0
Máquinas de Pila Abstracta Generación de Código Intermedio Leonel Morales Díaz [email_address] Copyright 2008 by Leonel Mo...
Código intermedio <ul><li>Un programa para una máquina abstracta </li></ul><ul><li>Dos cualidades </li></ul><ul><ul><li>Fá...
Código de 3 direcciones <ul><li>A = A*8 + B/7 </li></ul><ul><li>temp1 = A*8 </li></ul><ul><li>temp2 = B/7 </li></ul><ul><l...
Máquinas de Pila <ul><li>Memoria independiente para instrucciones y datos </li></ul><ul><li>Toda operación es con valores ...
Instrucciones aritméticas <ul><li>Una instrucción por cada operador aritmético </li></ul><ul><ul><li>+, -, *, /, div, mod,...
Ejemplo <ul><li>1, 3 + 5 * </li></ul><ul><li>Push 1 </li></ul><ul><li>Push 3 </li></ul><ul><li>Push (Pop + Pop) </li></ul>...
Izquierda o derecha <ul><li>i = 5; i = i + 1; </li></ul><ul><li>Lado derecho: valor entero </li></ul><ul><li>Lado izquierd...
Instrucciones <ul><li>Push v inserta v en la pila </li></ul><ul><li>ValD w inserta valor de posición w </li></ul><ul><li>V...
día := (14*a) div 4 + 153*m <ul><li>En postfijo: </li></ul><ul><li>día 14 a * 4 div 153 m * + := </li></ul><ul><li>En códi...
Control de flujo <ul><li>Opciones </li></ul><ul><ul><li>Operando da destino </li></ul></ul><ul><ul><ul><li>Jump 300 </li><...
Instrucciones Control Flujo <ul><li>Label z etiqueta la posición </li></ul><ul><li>Look z va a posición etiqueta z </li></...
if a>8 then a=10; <ul><li>ValD a </li></ul><ul><li>Push 8 </li></ul><ul><li>- </li></ul><ul><li>IfTrueLook Asigna </li></u...
while a<5 do a++; <ul><li>Label Prueba </li></ul><ul><li>ValD a </li></ul><ul><li>Push 5 </li></ul><ul><li>- </li></ul><ul...
Etiquetas <ul><li>Función NewLabel() </li></ul><ul><ul><li>Genera nuevas etiquetas </li></ul></ul><ul><ul><li>Puede incluí...
Reglas Semánticas <ul><li>Prop  -> if  Expr  then  Prop </li></ul><ul><li>Label1 = NewLabel(); </li></ul><ul><li>Prop.t = ...
Upcoming SlideShare
Loading in...5
×

Pila Abstracta

1,627

Published on

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.

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,627
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
19
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Pila Abstracta"

  1. 1. Máquinas de Pila Abstracta Generación de Código Intermedio Leonel Morales Díaz [email_address] Copyright 2008 by Leonel Morales Díaz – Ingeniería Simple. Derechos reservados Disponible en: http://www.ingenieriasimple.com/compiladores
  2. 2. Código intermedio <ul><li>Un programa para una máquina abstracta </li></ul><ul><li>Dos cualidades </li></ul><ul><ul><li>Fácil de producir </li></ul></ul><ul><ul><ul><li>Reglas claras de cómo construírla </li></ul></ul></ul><ul><ul><li>Fácil de traducir al lenguaje objeto </li></ul></ul>
  3. 3. Código de 3 direcciones <ul><li>A = A*8 + B/7 </li></ul><ul><li>temp1 = A*8 </li></ul><ul><li>temp2 = B/7 </li></ul><ul><li>A = temp1 + temp2 </li></ul><ul><li>Variables temporales </li></ul>
  4. 4. Máquinas de Pila <ul><li>Memoria independiente para instrucciones y datos </li></ul><ul><li>Toda operación es con valores de la pila </li></ul><ul><li>Operaciones </li></ul><ul><ul><li>Aritmética entera </li></ul></ul><ul><ul><li>Manipulación de pila </li></ul></ul><ul><ul><li>Control de flujo </li></ul></ul>
  5. 5. Instrucciones aritméticas <ul><li>Una instrucción por cada operador aritmético </li></ul><ul><ul><li>+, -, *, /, div, mod, etc. </li></ul></ul><ul><ul><li>Ojo con “-”: a – 8 -> a 8 - </li></ul></ul><ul><li>Simula evalución de expresiones postfijas </li></ul>
  6. 6. Ejemplo <ul><li>1, 3 + 5 * </li></ul><ul><li>Push 1 </li></ul><ul><li>Push 3 </li></ul><ul><li>Push (Pop + Pop) </li></ul><ul><li>Push 5 </li></ul><ul><li>Push (Pop * Pop) </li></ul>
  7. 7. Izquierda o derecha <ul><li>i = 5; i = i + 1; </li></ul><ul><li>Lado derecho: valor entero </li></ul><ul><li>Lado izquierdo: dónde almacenar resultado </li></ul><ul><ul><li>i en lado izquierdo indica dirección </li></ul></ul>
  8. 8. Instrucciones <ul><li>Push v inserta v en la pila </li></ul><ul><li>ValD w inserta valor de posición w </li></ul><ul><li>ValI w inserta dirección de w </li></ul><ul><li>Pop Saca valor de la pila </li></ul><ul><li>:= Pop y poner en dir. Pop </li></ul><ul><li>Copy Pop y Push-Push </li></ul>
  9. 9. día := (14*a) div 4 + 153*m <ul><li>En postfijo: </li></ul><ul><li>día 14 a * 4 div 153 m * + := </li></ul><ul><li>En código de pila </li></ul>ValI día Push 14 ValD a * Push 4 div Push 153 ValD m * + :=
  10. 10. Control de flujo <ul><li>Opciones </li></ul><ul><ul><li>Operando da destino </li></ul></ul><ul><ul><ul><li>Jump 300 </li></ul></ul></ul><ul><ul><li>Operando da posición relativa de destino </li></ul></ul><ul><ul><ul><li>Forward 5 </li></ul></ul></ul><ul><ul><ul><li>Backward 10 </li></ul></ul></ul><ul><ul><li>Destino simbólico (etiquetas) </li></ul></ul><ul><ul><ul><li>Jump Ciclo </li></ul></ul></ul>
  11. 11. Instrucciones Control Flujo <ul><li>Label z etiqueta la posición </li></ul><ul><li>Look z va a posición etiqueta z </li></ul><ul><li>IfFalseLook z </li></ul><ul><ul><li>Si Pop = 0 va a posición etiqueta z </li></ul></ul><ul><li>IfTrueLook z </li></ul><ul><ul><li>Si Pop <> 0 va a posición etiqueta z </li></ul></ul><ul><li>Halt detiene ejecución </li></ul>
  12. 12. if a>8 then a=10; <ul><li>ValD a </li></ul><ul><li>Push 8 </li></ul><ul><li>- </li></ul><ul><li>IfTrueLook Asigna </li></ul><ul><li>Look Continúa </li></ul><ul><li>Label Asigna </li></ul><ul><li>ValI a </li></ul><ul><li>Push 10 </li></ul><ul><li>:= </li></ul><ul><li>Label Continúa </li></ul>
  13. 13. while a<5 do a++; <ul><li>Label Prueba </li></ul><ul><li>ValD a </li></ul><ul><li>Push 5 </li></ul><ul><li>- </li></ul><ul><li>IfFalseLook Sigue </li></ul><ul><li>ValI a </li></ul><ul><li>ValD a </li></ul><ul><li>Push 1 </li></ul><ul><li>+ </li></ul><ul><li>:= </li></ul><ul><li>Look Prueba </li></ul><ul><li>Label Sigue </li></ul>
  14. 14. Etiquetas <ul><li>Función NewLabel() </li></ul><ul><ul><li>Genera nuevas etiquetas </li></ul></ul><ul><ul><li>Puede incluírse en reglas semánticas </li></ul></ul><ul><ul><ul><li>TmpLabel = NewLabel() </li></ul></ul></ul><ul><ul><li>Garatiza etiquetas no repetidas </li></ul></ul><ul><ul><ul><li>Label00001, Label00002, ..., Label03428, ... </li></ul></ul></ul>
  15. 15. Reglas Semánticas <ul><li>Prop -> if Expr then Prop </li></ul><ul><li>Label1 = NewLabel(); </li></ul><ul><li>Prop.t = Expr.t & NL & “IfFalseLook ” & Label1 & NL & Prop.t & NL & “Label ” & Label1 </li></ul>
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×