pila abstracta
DESCRIPTION
La pila abstracta es una concepción de la computadora que se utiliza para generar el código intermedio que es más sencillo de transformar en código de máquina.TRANSCRIPT
Máquinas de Pila AbstractaGeneración de Código Intermedio
Leonel Morales Dí[email protected]
Copyright 2008 by Leonel Morales Díaz – Ingeniería Simple.Derechos reservados Disponible en: http://www.ingenieriasimple.com/compiladores
Código intermedioUn programa para una máquina abstractaDos cualidades
Fácil de producirReglas claras de cómo construírla
Fácil de traducir al lenguaje objeto
Código de 3 direccionesA = A*8 + B/7
temp1 = A*8temp2 = B/7A = temp1 + temp2
Variables temporales
Máquinas de PilaMemoria independiente para instrucciones y datosToda operación es con valores de la pilaOperaciones
Aritmética enteraManipulación de pilaControl de flujo
Instrucciones aritméticasUna instrucción por cada operador aritmético
+, -, *, /, div, mod, etc.Ojo con “-”: a – 8 -> a 8 -
Simula evalución de expresiones postfijas
Ejemplo1, 3 + 5 *
Push 1Push 3Push (Pop + Pop)Push 5Push (Pop * Pop)
Izquierda o derechai = 5; i = i + 1;Lado derecho: valor enteroLado izquierdo: dónde almacenar resultado
i en lado izquierdo indica dirección
InstruccionesPush v inserta v en la pilaValD w inserta valor de posición wValI w inserta dirección de wPop Saca valor de la pila:= Pop y poner en dir. PopCopy Pop y Push-Push
día := (14*a) div 4 + 153*m
En postfijo:día 14 a * 4 div 153 m * + :=
En código de pila
ValI día
Push 14
ValD a
*
Push 4
div
Push 153
ValD m
*
+
:=
Control de flujoOpciones
Operando da destinoJump 300
Operando da posición relativa de destino
Forward 5Backward 10
Destino simbólico (etiquetas)Jump Ciclo
Instrucciones Control FlujoLabel z etiqueta la posiciónLook z va a posición etiqueta zIfFalseLook z
Si Pop = 0 va a posición etiqueta z
IfTrueLook zSi Pop <> 0 va a posición etiqueta z
Halt detiene ejecución
if a>8 then a=10;ValD a
Push 8
-
IfTrueLook Asigna
Look Continúa
Label Asigna
ValI a
Push 10
:=
Label Continúa
while a<5 do a++;Label Prueba
ValD a
Push 5
-
IfFalseLook Sigue
ValI a
ValD a
Push 1
+
:=
Look Prueba
Label Sigue
EtiquetasFunción NewLabel()
Genera nuevas etiquetasPuede incluírse en reglas semánticas
TmpLabel = NewLabel()
Garatiza etiquetas no repetidasLabel00001, Label00002, ..., Label03428, ...
Reglas SemánticasProp -> if Expr then
PropLabel1 =
NewLabel();Prop.t = Expr.t & NL
& “IfFalseLook ” & Label1 & NL & Prop.t & NL & “Label ” & Label1