Download - Pila Abstracta

Transcript
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