Download - Pila Abstracta
![Page 1: Pila Abstracta](https://reader036.vdocumento.com/reader036/viewer/2022082811/558a8c6cd8b42a035f8b462b/html5/thumbnails/1.jpg)
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
![Page 2: Pila Abstracta](https://reader036.vdocumento.com/reader036/viewer/2022082811/558a8c6cd8b42a035f8b462b/html5/thumbnails/2.jpg)
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
![Page 3: Pila Abstracta](https://reader036.vdocumento.com/reader036/viewer/2022082811/558a8c6cd8b42a035f8b462b/html5/thumbnails/3.jpg)
Código de 3 direccionesA = A*8 + B/7
temp1 = A*8temp2 = B/7A = temp1 + temp2
Variables temporales
![Page 4: Pila Abstracta](https://reader036.vdocumento.com/reader036/viewer/2022082811/558a8c6cd8b42a035f8b462b/html5/thumbnails/4.jpg)
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
![Page 5: Pila Abstracta](https://reader036.vdocumento.com/reader036/viewer/2022082811/558a8c6cd8b42a035f8b462b/html5/thumbnails/5.jpg)
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
![Page 6: Pila Abstracta](https://reader036.vdocumento.com/reader036/viewer/2022082811/558a8c6cd8b42a035f8b462b/html5/thumbnails/6.jpg)
Ejemplo1, 3 + 5 *
Push 1Push 3Push (Pop + Pop)Push 5Push (Pop * Pop)
![Page 7: Pila Abstracta](https://reader036.vdocumento.com/reader036/viewer/2022082811/558a8c6cd8b42a035f8b462b/html5/thumbnails/7.jpg)
Izquierda o derechai = 5; i = i + 1;Lado derecho: valor enteroLado izquierdo: dónde almacenar resultado
i en lado izquierdo indica dirección
![Page 8: Pila Abstracta](https://reader036.vdocumento.com/reader036/viewer/2022082811/558a8c6cd8b42a035f8b462b/html5/thumbnails/8.jpg)
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
![Page 9: Pila Abstracta](https://reader036.vdocumento.com/reader036/viewer/2022082811/558a8c6cd8b42a035f8b462b/html5/thumbnails/9.jpg)
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
*
+
:=
![Page 10: Pila Abstracta](https://reader036.vdocumento.com/reader036/viewer/2022082811/558a8c6cd8b42a035f8b462b/html5/thumbnails/10.jpg)
Control de flujoOpciones
Operando da destinoJump 300
Operando da posición relativa de destino
Forward 5Backward 10
Destino simbólico (etiquetas)Jump Ciclo
![Page 11: Pila Abstracta](https://reader036.vdocumento.com/reader036/viewer/2022082811/558a8c6cd8b42a035f8b462b/html5/thumbnails/11.jpg)
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
![Page 12: Pila Abstracta](https://reader036.vdocumento.com/reader036/viewer/2022082811/558a8c6cd8b42a035f8b462b/html5/thumbnails/12.jpg)
if a>8 then a=10;ValD a
Push 8
-
IfTrueLook Asigna
Look Continúa
Label Asigna
ValI a
Push 10
:=
Label Continúa
![Page 13: Pila Abstracta](https://reader036.vdocumento.com/reader036/viewer/2022082811/558a8c6cd8b42a035f8b462b/html5/thumbnails/13.jpg)
while a<5 do a++;Label Prueba
ValD a
Push 5
-
IfFalseLook Sigue
ValI a
ValD a
Push 1
+
:=
Look Prueba
Label Sigue
![Page 14: Pila Abstracta](https://reader036.vdocumento.com/reader036/viewer/2022082811/558a8c6cd8b42a035f8b462b/html5/thumbnails/14.jpg)
EtiquetasFunción NewLabel()
Genera nuevas etiquetasPuede incluírse en reglas semánticas
TmpLabel = NewLabel()
Garatiza etiquetas no repetidasLabel00001, Label00002, ..., Label03428, ...
![Page 15: Pila Abstracta](https://reader036.vdocumento.com/reader036/viewer/2022082811/558a8c6cd8b42a035f8b462b/html5/thumbnails/15.jpg)
Reglas SemánticasProp -> if Expr then
PropLabel1 =
NewLabel();Prop.t = Expr.t & NL
& “IfFalseLook ” & Label1 & NL & Prop.t & NL & “Label ” & Label1