Você está na página 1de 0

1

Generacin de Cdigo
I ntermedio
Programacin II
Margarita lvarez
Generacin de cdigo intermedio
Con la generacin de cdigo intermedio se inicia la tarea de sntesis.
Aunque un programa fuente se puede traducir directamente a lenguaje objeto,
algunas ventajas de utilizar una forma intermedia son:
Aumentar la portabilidad del compilador de una mquina a otra:
Se puede utilizar el mismo analizador para diferentes generadores.
Se pueden utilizar optimizadoresindependientes de la mquina.
Facilitar la divisin en fases del proyecto.
Analizador
Sintctico
Comprobacin
esttica
Gen. Cdigo
intermedio
Generador de
cdigo
Cdigo intermedio
Distinto formato de las instrucciones:
Notacin polaca inversa o notacin postfija
rboles sintcticos
Cdigo de tres direcciones
2
Notacin postfijo
La notacin postfija de una expresin E se puede definir como:
1. Si E es una variable o una constante, entonces la notacin
postfija de E es tambin E.
2. Si E es una expresin de la forma E
1
opE
2
donde op es
cualquier operador binario, entonces la notacin postfija de
E es E
1
E
2
op donde E
1
y E
2
son las notaciones postfijas
de E
1
y E
2
respectivamente.
3. Si E es una expresin de la forma (E
1
) entonces la notacin
postfija de E
1
es tambin la notacin postfija de E.
(9-5)+2 95-2+
9-(5+2) 952+-
Ejemplos
a:= b*-c+b*-c abc-*bc-*+:=
Notacin postfijo - Ejemplo
Definicin dirigida por la sintaxis
Producciones
expr expr + trmino
expr expr trmino
expr trmino
trmino 0

trmino 9
A cada no terminal est
asociado un atributo t con
un valor de la cadena que
representa la notacin
postfija de la expresin
generada por ese no
terminal en un rbol de
anlisis sintctico.
expr.t
expr.t
+
trmino.t
2
- trmino.t expr.t
5
trmino.t
9
9-5+2
= 9
= 9 = 5
= 2
= 95-2+
= 95-
Resultado: 95-2+
Reglas semnticas
expr.t expr.t || trmino.t || +
expr.t expr.t || trmino.t || -
expr.t trmino.t
trmino.t 0

trmino.t 9
Operador de
concatenacin
3
Notacin postfijo - Ejemplo
Esquema de Traduccin
Producciones
expr expr + trmino
expr expr trmino
expr trmino
trmino 0

trmino 9
expr.t
expr.t
+
trmino.t
2
- trmino.t expr.t
5
trmino.t
9
9-5+2
print(9)
print(5)
print(2)
print(+)
print(-)
Acciones semnticas
{print(+)}
{print(-)}
{print(0)}

{print(9)}
Resultado:
95-2+
rbol sintctico
El uso de rboles sintcticos como representacin intermedia permite que la
traduccin se separe del anlisis sintctico.
Es una forma condensada de un rbol de anlisis sintctico.
til para representar construcciones de lenguajes.
S if B thenS1 elseS2
Ejemplos
rbol sintctico rbol de anlisis sintctico
4
Grafo dirigidos acclicos para expresiones
(GDA)
Identifican las subexpresiones comunes de una expresin.
Un nodo interior representa un operador y sus hijos los
operandos.
Un nodo tiene ms de un padre.
Ejemplo:
a +a * (b - c) +(b - c) * d
Cdigo de tres direcciones
Es una secuencia de proposicin de la forma general:
x:= y op z
donde x,y y z son nombres, constantes o variables temporales, op representa
cualquier operador.
Ejemplos
x+y*z
t
1
:= y*z
t
2
:= x + t
1
a := b*-c+b*-c
t
1
:= -c
t
2
:= b * t
1
t
3
:= -c
t
4
:= b * t
3
t
5
:= t
2
+ t
4
a := t
5
=
a
+
*
b
-
c
*
b
-
c
5
Cdigo de tres direcciones
I mplementacin de proposiciones de tres
direcciones
Una proposicin de tres direcciones es una forma abstracta de
cdigo intermedio. En un compilador estas proposiciones se
pueden implementar como registros con campos para el
operador y los operandos.
Las implementaciones pueden ser:
Triplas
Cudruplas
Triplas Indirectas
6
Cudruplas
Se implanta en una secuencia de registros con 4 campos:
o Operacin
o Argumento1
o Argumento2
o Resultado
Ejemplo a:=b* -c+b* -c
Los nombres t1, t2 y t3 pueden ser registros de la mquina o posiciones de memoria
temporales, que desaparecen cuando se termina la compilacin.
Cudruplas
Los contenidos de los campos Argumento1, Argumento2 y Resultado son
generalmente punteros a la Tabla de Smbolos.
En general, las instrucciones que no requieren todos los campos dejan
vacos los que no utilizan, por ejemplo: las proposiciones con operadores
unariosno utilizan arg2.
Los saltos condicionales e incondicionales ponen la etiqueta (label) en
Resultado.
7
Triplas
Para evitar introducir nombres temporales en la Tabla de Smbolos, se
hace referencia a un valor temporal mediante la posicin de la proposicin
que lo calcula.
En este caso los registros son de 3 campos.
Triplas Indirectas
Se hace una lista de los punteros a triplas.
8
Comparacin de las representaciones
La diferencia en la implementacin es cuestin de mayor o menor indireccin:
Las triplas necesitan menos espacio y el compilador no genera
identificadores temporales, pero cambiar de sitio una proposicin que defina
un valor temporal exige modificar todas las referencias a l.
Esto representa un inconveniente a la hora de optimizar el cdigo, ya que
en cada paso del proceso de optimizacin hay que cambiar constantemente
las proposiciones de lugar.
Este problema no lo presentan las triplas indirectas. Una proposicin
puede trasladarse reordenando nicamente la lista de proposiciones.
En la prctica se utiliza la notacin de cudruplas como implementacin
del cdigo de 3 direcciones.

Você também pode gostar