Codigo intermedio
Compiladores II
1
Usos del Código Intermedio
• Múltiples lenguajes y compiladores
– n+m módulos -> n*m compiladores
• Optimización
– Representación de fácilmodificación
• Modelos de generación de código o Máquinas abstractas
– FAM, G-machine, máquina de Warren
• Compiladores transportables
– PASCAL /P-Code, JAVA
• Interpretación rápida
– OAKLisp,CLISP
• Depuración
– Intérpretes de C u otros lenguajes
Compiladores II
2
Notación polaca Inversa (postfija)
• Se utiliza principalmente para la representación de
expresiones aritméticas• Expresión a notación polaca inversa
– Algoritmo
• Representar la expresión en forma de árbol sintáctico
• Recorrer el árbol en postorden
– Ejemplo: a+b*c-d
+
a
d
*
b
cCódigo: a b c * + d Compiladores II
3
Extensión a instrucciones de control de flujo
• Ejemplo:
– Fuente: if then else
– No se puede traducir a: If
ya que solo se ha de evaluar una de lasinstrucciones
– Código generado
etiqueta1
Salta si falso
etiqueta2
Salta
etiqueta1:
etiqueta2:
Compiladores II
Código más típico
Salta Si falso Etiqueta1
Salta Etiqueta2Etiqueta1:
Etiqueta2:
4
Pros y Contras de la Notación Polaca Inversa
• Generación de código:
– Simple
– No utiliza registros
• Optimización
– Es difícil de reordenar ya que hay queconsiderar el
contenido de la pila
• Interpretación rápida
– Es muy fácil de interpretar ya que solo necesita una pila
• Transportable:
– Si, ya que todos los procesadores implementan una pila.Compiladores II
5
n-tuplas
• En la notación de n-tuplas cada instrucción es una n-tupla.
– Tripletas
• , ,
• El resultado se asocia al número de tripleta
– Tripletas indirectas
• Sontripletas donde el orden de ejecución se especifica a parte.
– Cuadruplas
• , , ,
Compiladores II
6
Tripletas
• Tripleta: , ,
el resultado se asocia al número de tripleta
–...
Regístrate para leer el documento completo.