Академический Документы
Профессиональный Документы
Культура Документы
OPTIMIZACION DE CODIGO
PROLOGO
En este ensayo explicaremos el comportamiento del analizador semntico, la
generacin de cdigo y tambin la optimizacin de cdigo y esto lo vamos a utilizar en
cuando programemos software.
En el analizador semntico se va ver lo que utiliza, la manera que ordena los atributos
y el uso de los cudruplas, tripletes.
En la generacin de cdigo se ve algunas descripciones de los operandos,
conversiones de tipos, tipos de cdigos y la manera de comportamiento dependiendo al tipo
de cdigo que se va utilizar
Mientras en la optimizacin de cdigo se basa ms que nada a la reduccin de cdigo,
quitar redundancias y de esta manera no utilizar mucho los recursos de la mquina, mejorar
el tiempo de respuesta de una operacin, etc.
CAPITULO I
ANLISIS SEMNTICO
Est compuesto por dos analizadores: morfolgico y sintctico
Utiliza el rbol sintctico para comprobar restricciones de tipo, algunas limitaciones y
prepara la generacin de cdigo
Propagacin de atributos
Se realiza tanto en bottom-up (hacia arriba) como en top- down (hacia abajo), ya que
estas van a transmitir las restricciones y los tipos de hojas son para la comprobacin
Sea la expresin
int a,b,c
a/(b+c ^2)
Las transformaciones posibles se pueden representar mediante un grafo cuyos nodos son
los tipos de datos y cada arco indica una transformacin
Gramtica de atributos
Es una extensin de la notacin de Backus se basa en usar algunos smbolos adicionales
no sintcticos. En los analizadores sintcticos top-down basados en gramticas la
introduccin de los smbolos de accin en las rutinas correspondientes es trivial. En los
analizadores bottom-up basados en gramticas es ms delicado, pues los estados del anlisis
se mueven simultneamente sobre varias reglas.
Generacin de representaciones intermedias
Existen dos representaciones intermedias principales: Notacin sufija y Cudruplas
Los operadores didicos (o binarios) pueden especificarse mediante tres notaciones
principales:
Notacin sufija
Se representa sin usar parntesis, los identificadores aparecen en el mismo orden y los
operadores de izquierda a derecha.
Hay operadores mondicos (unarios) algunos se transforman en didicos (binarios) o
se cambia el smbolo.
Ejemplo: a se convierte en 0-a o en @a
a*(b+c/d) ab@cd/+*
Push +
T ::= F
E ::= E - T
Push -
F ::= i
E ::= T
Push i
F ::= (E)
T ::= T * F
Push *
T ::= T / F
Push /
F ::= - F
Push @
La transferencia (GOTO).
La instruccin condicional
GOTO L
L TR
L1:
L2:
Cudruplas
Una operacin didica se puede representar mediante la cudrupla
(<Operador>, <Operando1>, <Operando2>, <Resultado>)
Ejemplo
Una expresin se puede representar mediante un conjunto de cudruplas. Ejemplo: la
expresin a*b+c*d equivale a:
(*,a,b,t1)
(*,c,d,t2)
(+,t1,t2,t3)
Triplete
A diferencia de las cudruplas aqu no se pone el resultado al lado sino q se sustituye
con el orden de ejecucin
Ejemplo
a*b+c*d equivale a:
(1) (*,a,b)
(2) (*,c,d)
(3) (+,(1),(2))
Generacin automtica de cudruplas
En un anlisis bottom-up, se asocia a cada smbolo no terminal una informacin
semntica, y a cada regla de produccin una accin semntica
Semntica de bloques
Sean las reglas
<Instr> ::= do <id> := <Expr> S1
, <Expr> S2
<CD1> <LInstr> end S5
<CD1> ::= , <Expr> S3 | ^ S4
Evaluacin ptima de las expresiones booleanas
Las operaciones booleanas usualmente se definen as:
O|T F
Y|T F
NO| T F
---|-------|---------|----T|T T
T|T F
|F T
F|T F
F|F F
Y la sintaxis adecuada para que la precedencia sea: NO, Y, O. Sin embargo, es posible
simplificarlas considerablemente. Basta fijarse en la expresin: a Y (b O NO c)
CAPITULO II
GENERACIN DE CDIGO
El cdigo generado por un compilador puede ser de uno de los tipos siguientes:
G.Cdigo
Expresiones
La tabla de cdigo nos ayuda a ver mejor las expresiones tanto las diaticas como las
monadicas ya que el cambiuo de tipo se puede realizar de manera directa por medio de la
operacin de carga en registro, y esta nos reduce la parte dedicada a la generacin de cdigo
Generacin a partir de cudruplas
En esta parte se sustituye palabras como :
La multiplicacin se hara igual, sustituyendo "ADD" por "MUL".
La divisin se hara igual, sustituyendo "SUB" por "DIV".
Ejemplo: sea la expresin A*((A*B+C)-C*D)
Las cudruplas son:
Cudrupla
Se genera
------------
---------------
(*,A,B,T1)
MOV AC,A
MUL AC,B
T1
(+,T1,C,T2)
ADD AC,C
T2
(*,C,D,T3)
MOV T2,AC
(-,T2,T3,T4)
(*,A,T4,T5)
Valor de AC
-----------
MOV AC,C
MUL AC,D
T3
MOV T3,AC
MOV AC,T2
T2
SUB AC,T3
T4
MUL AC,A
T5
Direccin.
Optimizacin de bucles
Consiste
operacin para esto tambin hay algunas tcnicas que os ayudan a optimizar los bucles
Regiones
Son bloques que van a separar cada parte del bucle o cdigo, y asi podremos entender
mejor las partes que debemos optimizar
Asignaciones muertas
Hay algunas instrucciones de cdigo cuyos valores calculados se utilizan slo en
determinadas circunstancias, es decir, a veces se utilizan los valores y a veces no lo son.
En otro aspecto tambin hay parte en donde se usa esa parte de cdigo pero no realiza ningn
cambio