Pil a Abstract A
-
Upload
shaq-sanchez -
Category
Documents
-
view
221 -
download
0
description
Transcript of Pil a Abstract A
-
Mquinas de Pila AbstractaGeneracin de Cdigo Intermedio
-
Cdigo intermedioUn programa para una mquina abstractaDos cualidadesFcil de producirReglas claras de cmo construrlaFcil de traducir al lenguaje objeto
-
Cdigo de 3 direccionesA = A*8 + B/7
temp1 = A*8temp2 = B/7A = temp1 + temp2
Variables temporales
-
Mquinas de PilaMemoria independiente para instrucciones y datosToda operacin es con valores de la pilaOperacionesAritmtica enteraManipulacin de pilaControl de flujo
-
Instrucciones aritmticasUna instruccin por cada operador aritmtico+, -, *, /, div, mod, etc.Ojo con -: a 8 -> a 8 -Simula evalucin 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: dnde almacenar resultadoi en lado izquierdo indica direccin
-
InstruccionesPush vinserta v en la pilaValD winserta valor de posicin wValI winserta direccin de wPopSaca valor de la pila:=Pop y poner en dir. PopCopyPop y Push-Push
-
da := (14*a) div 4 + 153*mEn postfijo:da 14 a * 4 div 153 m * + :=En cdigo de pilaValI daPush 14ValD a*Push 4divPush 153ValD m*+:=
-
Control de flujoOpcionesOperando da destinoJump 300Operando da posicin relativa de destinoForward 5Backward 10Destino simblico (etiquetas)Jump Ciclo
-
Instrucciones Control FlujoLabel zetiqueta la posicinLook zva a posicin etiqueta zIfFalseLook zSi Pop = 0 va a posicin etiqueta zIfTrueLook zSi Pop 0 va a posicin etiqueta zHaltdetiene ejecucin
-
if a>8 then a=10;ValD aPush 8-IfTrueLook AsignaLook ContinaLabel AsignaValI aPush 10:=Label Contina
- while a
-
EtiquetasFuncin NewLabel()Genera nuevas etiquetasPuede inclurse en reglas semnticasTmpLabel = NewLabel()Garatiza etiquetas no repetidasLabel00001, Label00002, ..., Label03428, ...
-
Reglas SemnticasProp -> if Expr then PropLabel1 = NewLabel();Prop.t = Expr.t & NL & IfFalseLook & Label1 & NL & Prop.t & NL & Label & Label1