Codigo intermedio

Solo disponible en BuenasTareas
  • Páginas : 17 (4199 palabras )
  • Descarga(s) : 0
  • Publicado : 23 de noviembre de 2010
Leer documento completo
Vista previa del texto
Lección 5: Generación De Código
1. 2. 3. 4. 5. 6. Introducción Tipos de Código Intermedio Declaraciones Expresiones y Asignación Estructuras de Control Procedimientos y Funciones

Lecturas: Scott, capítulo 9 Muchnick, capítulos 4, 6 Aho, capítulo 8 Fischer, capítulos 10, 11 , 12 , 13, 14 Holub, capítulo 6 Bennett, capítulo 4, 10
12048 - J. Neira 1

1/6. Introducción
• Código intermedio:interfaz entre ‘front-ends’ y ‘back-ends’ • Se busca:
– transportabilidad – posibilidades de optimización

• Debe ser:
– abstracto – sencillo

• No se tiene en cuenta:
– – – – modos de direccionamiento tamaños de datos existencia de registros eficiencia de cada operación

¿por qué no generar el código final directamente?
12048 - J. Neira 2

Código Intermedio
• Ventajas:
– Permiteabstraer la máquina, separar operaciones de alto nivel de su implementación a bajo nivel. – Permite la reutilización de los front-ends y backends. – Permite optimizaciones generales.

• Desventajas:
– Implica una pasada más para el compilador (no se puede utilizar el modelo de una pasada, conceptualmente simple). – Dificulta llevar a cabo optimizaciones específicas de la arquitectura destino. –Suele ser ortogonal a la máquina destino, la traducción a una arquitectura específica será más larga e ineficiente.
3

12048 - J. Neira -

2/6. Tipos de Código Intermedio
• AST (Abstract Syntax Trees): forma condensada de árboles de análisis, con sólo nodos semánticos y sin nodos para símbolos terminales (se supone que el programa es sintácticamente correcto). Arbol de análisis:
E T P opad‘+’ P opmul P ‘*’ id(C) id(A) ‘+’ id(B) T ‘*’ id(C)
4

• Ventajas: unificación de pasos de compilación
– Creación del árbol y la tabla de símbolos – Análisis semántico – Optimización – Generación de código objeto

• Desventaja:
– espacio para almacenamiento

AST:
T E

id(A) id(B)
12048 - J. Neira -

ASTs
program gcd(input, output); var i,j : integer; begin read(i,j); while i j do ifi > j then i := i – j else j := j – i; writeln(i); end.

12048 - J. Neira -

5

Tipos de Código Intermedio
• DAG (Directed Acyclic Graphs): árboles sintácticos concisos

árbol sintáctico:
E

DAG:
E ‘+’

T id(B) ‘*’ id(C)

‘+’

T

T id(B) ‘*’ id(C)

id(B) ‘*’ id(C)

– Ahorran algo de espacio – Resaltan operaciones duplicadas en el código – Difíciles de construir
12048 -J. Neira 6

Tipos de Código Intermedio
• TAC (Three-Address Code): secuencia de instrucciones de la forma:
dir 1 dir 2 dir 3

resultado := operando1 op operando2

• Las operaciones más complejas requieren varias instrucciones: • Este ‘desenrollado’ facilita la optimización y generación de código final.
(a + b) x (c – (d / e))

– operador: aritmético / lógico – operandos/resultado:constantes, nombres, temporales.

• Se corresponde con instrucciones del tipo: a := b + c
12048 - J. Neira 7

TAC
• Ensamblador general y simplificado para una máquina virtual: incluye etiquetas, instrucciones de flujo de control… • Incluye referencias explícitas a las direcciones de los resultados intermedios (se les da nombre). • La utilización de nombres permite la reorganización (hastacierto punto). • Algunos compiladores generan este código como código final; se puede interpretar fácilmente (UCSD PCODE, Java). • Operadores:
CI muchos pocos corto largo generación optimización compleja sencilla compleja sencilla

12048 - J. Neira -

8

TAC • Variaciones sintácticas: (Aho) (Fischer)
(READI, A) (READI, B) (GT, A, B, t1) (JUMP0, t1, L1) (ADDI, A, 5, C) (JUMP, L2) (LABEL, L1)(ADDI, B, 5, C) (LABEL, L2) (SUBI,C, 1, t2) (MULTI, 2, t2, t3) (WRITEI, t3)
12048 - J. Neira -

1. Asignación: x := y op z x := op y x := y x[i] := y x := y[i] x := &y x := *y *x := y 2. Saltos: goto L if x oprel y goto L 3. Procedimientos: param x1 ... param xn call p, n
9

Representaciones de TAC
Fuente: a := b * c + b * d; • Cuádruplas: el destino suele ser una temporal. (*, b, c,...
tracking img