Pila Abstracta
-
Upload
leonel-morales-diaz -
Category
Education
-
view
1.624 -
download
3
description
Transcript of Pila Abstracta
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