Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sistemas
Lenguajes y Compiladores
Traducción Dirigida por la Sintaxis
Teoría Lenguajes
1
Definición
Teoría Lenguajes
2
Código Intermedio
Teoría Lenguajes
3
Clases de Codigos Intermedios
Teoría Lenguajes
4
Clases de Códigos Intermedios
Teoría Lenguajes
5
Notación Posfija
La notación posfija es una notación muy simple usada
para expresiones aritméticas que coloca el operador
al extremo derecho de la expresión (después de los
operandos y no entre ellos).
Ejemplo: para la expresión A + C * D
Su correspondiente notación posfija es: ACD*+
La notación posfija se procesa usando una pila:
Se empilan los operandos
6
Notación Posfija
Suponga que A 2, C sea 4 y D es 3.
La expresión se evalúa:
Empila 2
Empila 4
Empila 3
* requiere dos operandos que se desempilan (3 y 4), se
multiplican y el resultado se empila
Empila 12
+ requiere dos operandos que se desempilan (12 y 2), se
suman y el resultado se empila
Empila 14
Teoría Lenguajes
7
Notación Posfija
8
Código de tres direcciones
Las proposiciones constan por lo general de tres
direcciones:
res := arg1 op arg2
Donde res, arg1 y arg2 pueden ser constantes (sólo arg1
y arg2) o identificadores declarados por el usuario o
variables de trabajo creadas por el compilador.
Las variables de trabajo se crean cuando se trata
de expresiones con múltiples operadores, que se
dividen en una secuencia de operaciones con un solo
operador cada una.
op arg1 arg2 res
Teoría Lenguajes
9
Código de tres direcciones
Para la expresión: A + C * D
Se tiene la siguiente secuencia de instrucciones de
tres códigos:
MUL C D Var1
ADD A Var1 Var2
STO Var2 Res
Donde MUL, ADD y STO se suponen los códigos de
las operaciones de *, + y :=.
El manejo de las variables de trabajo es importante
Teoría Lenguajes
10
Código de dos direcciones
11
Código de dos direcciones
Para la expresión: A + C * D
Se tiene la siguiente secuencia de instrucciones de
dos códigos:
(1) MUL C D
(2) ADD A (1)
(3) STO (2) Res
El código de dos direcciones no necesita generar
variables de trabajo
Teoría Lenguajes
12
Análisis Semántico
Teoría Lenguajes
13
Regla Semántica
14
Ejemplo de Reglas Semánticas
Definición de las reglas semánticas de una
gramática generando un código de tres
direcciones.
ApuntE es el apuntador a la tabla de símbolos
para E
k lleva el control de las variables temporales
Teoría Lenguajes
15
Ejemplo de Reglas Semánticas
Teoría Lenguajes
16
Ejemplo de Reglas Semánticas
T1 → T2 * F ( Inc K
ApuntT1 := VarK
Genera(MUL,ApuntT2,ApuntF,VarK)
T1 → T2 / F ( Inc K
ApuntT1 := VarK
Genera(DIV,ApuntT2,ApuntF,VarK)
F→x (ApuntF := Apuntx)
F→y (ApuntF := Apunty)
F →( E ) (ApuntF := ApuntE)
Teoría Lenguajes
17
Reglas para generar Notación Posfija
Teoría Lenguajes
18
Reglas para generar Notación Posfija
19
Generación de Notación Posfija
20
Generación de Notación Posfija
Teoría Lenguajes
21
Atributos Sintetizados
22
Definición con Atributos Sintetizados
23
Definición con Atributos Sintetizados
E.val = 19 n
E.val = 15 + T.val = 4
T.val = 15 F.val = 4
F.val = 3 digito.valex = 5
digito.valex = 3
Teoría Lenguajes
24
Generación de Proposiciones
En el caso de proposiciones condicionales o
iterativas hay que tener especial cuidado con los
saltos.
Generalmente se tiene que realizar una segunda
pasada para generar la dirección de la
instrucción que repite la iteración (direcciones
abiertas)
Para generar código usará
JPC (salto condicional)
JMP (salto incondicional)
Teoría Lenguajes
25
Ejemplo
Teoría Lenguajes
26
Ejemplo
Teoría Lenguajes
27