Pila Abstracta

Post on 24-Jun-2015

1.624 views 3 download

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

Máquinas de Pila AbstractaGeneración de Código Intermedio

Leonel Morales Díazleonel@ingenieriasimple.com

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