Codigointermedio 140219115248 Phpapp02
Lenguaje I
Generación de Código Intermedio
Proceso de Síntesis
Lenguaje Intermedio
Generación de Código
Ventajas del código intermedio
Facilitar la fase de optimización
Aumentar la portabilidad del compilador de una máquina a otra
Se puede utilizar el mismo analizador para diferentes generadores
Se pueden utilizar optimizadores independientesde la máquina
Facilitar la división en fases del proyecto
Fuente
Scanner
Parser
Generador
de
Código
LI
Objeto
TDS
Generación de código. Procesadores de
Lenguaje I
Generación de Código Intermedio
Aumentar la portabilidad del compilador de una máquina a otra
Se puede utilizar el mismo analizador para diferentes generadores
Se pueden utilizar optimizadores independientes de lamáquina
C
back-ends
front-ends
Pascal
Ada
C++
Java
Generador
de
Código Intemedio
Optimización
independiente
de máquina
Intel X
Dec-Alpha
Motorola
N+M vs N*M
1
Generación de código. Procesadores de
Lenguaje I
Fase de Análisis
position := initial + rate * 60
lexical analyzer
id1 := id2 + id3 * 60
syntax analyzer
:=
+
id1
*
id2l
60
id3
semantic analyzer
:=
Symbol
Table
rate….
*id2l
inttoreal
id3
position ....
initial ….
E
r
r
o
r
s
+
id1
60
intermediate code generator
Generación de código. Procesadores de
Lenguaje I
Fase de Síntesis
Symbol Table
position ....
initial ….
rate….
intermediate code generator
E
r
r
o
r
s
temp1 := inttoreal(60)
temp2 := id3 * temp1
temp3 := id2 + temp2
id1 := temp3
3 address code
code optimizer
temp1 := id3 * 60.0
id1 := id2 +temp1
final code generator
MOVF id3, R2
MULF #60.0, R2
MOVF id2, R1
ADDF R1, R2
MOVF R1, id1
2
Generación de código. Procesadores de
Lenguaje I
Tipos de representaciones
intermedias
La representación del código intermedio depende
de la máquina objeto:
0-direcciones: código para máquinas de pila (código P)
2-direcciones: códigos para máquinas con operaciones
sobre registros de memoria3-direcciones: código para máquinas de arquitectura
RISC
En todo caso, añade un recorrido descendente
adicional para generar el código final
Generación de código. Procesadores de
Lenguaje I
Tipos de representaciones
intermedias
Propiedades:
Fácil de producir en el análisis semántico
Fácil de traducir a código máquina real
Instrucciones simples y concisas, de fácil optimización
Tipos
Árboles de Sintaxis Abstracta
Notación Polaca Inversa (RPN)
Código P
Códigos de tres direcciones
Cuartetos
Tercetos
Tercetos Indirectos
3
Generación de código. Procesadores de
Lenguaje I
Representaciones intermedias:
RPN
Notación Polaca Inversa (RPN)
Los operadores van después de los operandos
S=A+B*C
→ SABC*+=
Ventajas
Facilidad para generar código a partir de ella
Es lanotación más sencilla para el lenguaje intermedio
Inconvenientes
El código es difícil de entender
Poca flexibilidad
No es útil para optimización de código
Generación de código. Procesadores de
Lenguaje I
Representaciones intermedias: P
Código P
Extensión RPN para máquina completa (etiquetas, saltos)
Razones históricas (intérpretes Pascal)
Primer caso de máquina virtual
Todaslas operaciones toman como argumentos la pila
Cargar/almacenar: lod, lda, ldc, sto
Aritmética: adi, sbi, mpi
Saltos: ujp, fjp, lab
Similares ventajas e inconvenientes (es un CI muy
próximo a un lenguaje ensamblador)
4
Generación de código. Procesadores de
Lenguaje I
Representaciones intermedias: P
Ejemplos Código P
Ejemplo 1:
x:=y+1
Ejemplo 2:
if cond then x=3
Codigo P
lda x //carga direccion x
lod y // carga valor y
ldc 1 // carga constante 1
adi
// suma 2 pos pila
sto
// almacena tope en inf.
Codigo P
lod cond // carga cond
fjp L1
// si falso salta a L1
lda x
// carga direccion x
ldc 3
// carga constante 3
sto
// almacena tope en inf
lab L1 // etiqueta L1
1
3
y
&x
cond
&x
…
…
…
Generación de código. Procesadores de
Lenguaje I
Árboles de Sintaxis Abstracta...
Regístrate para leer el documento completo.