SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our User Agreement and Privacy Policy.
SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our Privacy Policy and User Agreement for details.
Successfully reported this slideshow.
Activate your 14 day free trial to unlock unlimited reading.
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.
Interfaces de Usuarios, Interacción Humano-Computador y Lenguajes de Programación
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.
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.
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>
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.
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>
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.
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.
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.
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.
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.
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.
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>