Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Generacin de Cdigo
Intermedio
Cdigo intermedio
Un programa para una mquina
abstracta
Dos cualidades
Fcil de producir
Reglas claras de cmo construrla
Cdigo de 3 direcciones
A = A*8 + B/7
temp1 = A*8
temp2 = B/7
A = temp1 + temp2
Variables temporales
Mquinas de Pila
Memoria independiente para
instrucciones y datos
Toda operacin es con valores de la
pila
Operaciones
Aritmtica entera
Manipulacin de pila
Control de flujo
Instrucciones aritmticas
Una instruccin por cada operador
aritmtico
+, -, *, /, div, mod, etc.
Ojo con -: a 8 -> a 8 -
Ejemplo
1, 3 + 5 *
Push 1
Push 3
Push (Pop + Pop)
Push 5
Push (Pop * Pop)
Izquierda o derecha
i = 5; i = i + 1;
Lado derecho: valor entero
Lado izquierdo: dnde almacenar
resultado
i en lado izquierdo indica direccin
Instrucciones
Push v
inserta v en la pila
ValD w
inserta valor de
posicin w
ValI w
inserta direccin de w
Pop
Saca valor de la pila
:=
Pop y poner en dir. Pop
Copy
Pop y Push-Push
da := (14*a) div 4 +
153*m
En postfijo:
da 14 a * 4 div 153 m * + :=
En cdigo de pila
ValI da
Push 14
ValD a
*
Push 4
div
Push 153
ValD m
*
+
:=
Control de flujo
Opciones
Operando da destino
Jump 300
IfTrueLook z
Si Pop <> 0 va a posicin etiqueta z
Halt
detiene ejecucin
Label Asigna
ValI a
Push 10
:=
Label Contina
IfFalseLook Sigue
ValI a
ValD a
Push 1
+
:=
Look Prueba
Label Sigue
Etiquetas
Funcin NewLabel()
Genera nuevas etiquetas
Puede inclurse en reglas semnticas
TmpLabel = NewLabel()
Reglas Semnticas
Prop -> if Expr then
Prop
Label1 =
NewLabel();
Prop.t = Expr.t & NL
& IfFalseLook &
Label1 & NL &
Prop.t & NL &
Label & Label1