Pila Abstracta

15
Máquinas de Pila Abstracta Generación de Código Intermedio Leonel Morales Díaz [email protected] right 2008 by Leonel Morales Díaz – Ingeniería Simple. Derechos reservados Disponible en: http://www.ingenieriasimple.com/compila

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 of Pila Abstracta

Page 1: 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

Page 2: Pila Abstracta

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

Código de 3 direccionesA = A*8 + B/7

temp1 = A*8temp2 = B/7A = temp1 + temp2

Variables temporales

Page 4: Pila Abstracta

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

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

Ejemplo1, 3 + 5 *

Push 1Push 3Push (Pop + Pop)Push 5Push (Pop * Pop)

Page 7: Pila Abstracta

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

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

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

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

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

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

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

EtiquetasFunción NewLabel()

Genera nuevas etiquetasPuede incluírse en reglas semánticas

TmpLabel = NewLabel()

Garatiza etiquetas no repetidasLabel00001, Label00002, ..., Label03428, ...

Page 15: Pila Abstracta

Reglas SemánticasProp -> if Expr then

PropLabel1 =

NewLabel();Prop.t = Expr.t & NL

& “IfFalseLook ” & Label1 & NL & Prop.t & NL & “Label ” & Label1