Generador De Codigo Intermedio
Jessica159522 de Julio de 2014
5.485 Palabras (22 Páginas)335 Visitas
INDICE
Pág.
DEDICATORIA…………………………………………………………………. 3
PRESENTACIÓN…………………………………………………..……………4
INTRODUCCION…………………………………………………....................5
GENERACION DE CODIGO INTERMEDIO:
ASPECTOS GENERALES
CONCEPTO………………………………………………………….………… 7
1. Formas de representar el Código Intermedio
1.1. Arboles Sintaxis………………………………….……………….……..7
1.2 Código de tres direcciones…….………………………………………...8
1.2.1 Características.………………………………….…………………. 9
1.2.2 Instrucciones Comunes……………………………………………..9
1.2.3 Implementación…………………………………………………..…10
1.2.4 Ejemplo……………………………………………………………....11
1.3 Tipos y Declaraciones……………………………………………………11
1.4 Verificación de Tipos……………………………………………………..12
1.4.1 Tipos de Chequeos…………………………………………………12
1.4.2 Conversión de Tipos………………………………………………..12
1.4.3 Sobrecarga de Funciones y Operadores…………………………13
1.4.4 Funciones Polimórficas……………………………………………..13
1.5 Control de Flujo………………………………………………….……...…14
1.5.1 Expresiones Booleanas…………………………………………….14
1.5.2 Saltos…………………………………………………………………14
1.6 BACKPATCHING………………………………………………………….15
1.7 Instrucciones SWITCH…………………………………………….…...…15
1.7.1 Traducción de Instrucciones SWITCH-CASE…………………….15
1.7.2 Traducción de SWITCH-CASE dirigida por sintaxis……………..15
1.8 Figuras y Tablas…………………………………………………...………15
2. Generación de Código Intermedio mediantes Gramática de Tributos…...19
3. Ejemplo……………………………………………………………………….24
CONCLUSIÓN……………………………………………………....................26
BIBLIOGRAFÍA……………………………………………………………..…...27
LINKOGRAFÍA……………………………………………………………….…28
DEDICATORIA
A Dios por darnos la vida, salud,
Y sabiduría, por guiarnos por el camino
del bien, y así seguir adelante en nuestra
carrera profesional.
A nuestros padres agradecerles por su apoyo incondicional, moral y económico, que nos brindan día a día para poder cumplir nuestras metas.
Dedico también a mi docente
por la guía y orientación prestada
asi lograr el presente informe.
PRESENTACION
Este trabajo en presentado por las alumnas de Ingeniería de Sistemas, con el fin de elaborar una información adecuada sobre LA GENERACIÓN DE CÓDIGO INTERMEDIO, que este informe sea entendible, coherente y accesible a cada uno de los lectores.
En este informe encontramos los diversos puntos a tratar, la definición, sus características y todo lo relacionado con ello, rescatando puntos importantes que le den valor a nuestro trabajo.
Una representación intermedia es una estructura de datos que representa al programa fuente durante el proceso de la traducción a código objeto. El compilador primero traduce el código fuente en una forma más situable para la optimización, para luego convertirla en el código de máquina. El compilador transforma el código en un lenguaje más manejable, usualmente código de tres direcciones, el cual representa exactamente una instrucción de código de máquina, verifica tipos y traduce expresiones.
De esta manera estamos mostrando un pequeño resumen de los que será todo el contenido del trabajo. Esperamos que sea de su total agrado y satisfacción.
LAS ALUMNAS.
INTRODUCCIÓN
Ya hemos pasado por las etapas de análisis léxico, sintáctico y semántico, ahora viene la etapa de generador de código intermedio.
El proceso de la compilación se desglosa en dos partes: la parte que depende solo del lenguaje fuente (etapa inicial o front-end) y la parte que depende solo del lenguaje objeto (etapa final o back-end).
La etapa inicial traduce un programa fuente a una representación intermedia partir de la cual la etapa final genera el código objeto. De esta forma, los detalles que tienen que ver con las características del lenguaje objeto (código ensamblador, código maquina absoluto o relocalizable,...), la arquitectura de la maquina (número de registros, modos de direccionamiento, tamaño de los tipos de datos, memoria cache,...), el entorno de ejecución (estructura de registros y memoria de la máquina donde se va a ejecutar el programa...) y el sistema operativo se engloban en la etapa final y se aíslan del resto.
Con una representación intermedia bien definida, un compilador para el lenguaje i y la maquina j puede ser construido combinando el front-end para el lenguaje i con el back-end de la maquina j. De esta manera se pueden construir m*n compiladores escribiendo únicamente m front - ends y n back-ends.
Esta fase no es en realidad una parte separada del compilador, la mayoría de los compiladores generan código como parte del proceso de análisis sintáctico, esto es debido a que requieren del árbol de sintaxis y si este no va a ser construido físicamente, entonces deberá acompañar al analizador sintáctico al barrer el árbol implícito. En lugar de generar código ensamblador directamente, los compiladores generan un código intermedio que es más parecido al código ensamblador, las operaciones por ejemplo nunca se hacen con más de dos operando. Al no generarse código ensamblador el cual es dependiente de la computadora específica, sino código intermedio, se puede reutilizar la parte del compilador que genera código intermedio en otro compilador para una computadora con diferente procesador cambiando solamente el generador de código ensamblador al cual llamamos back-end, la desventaja obviamente es la lentitud que esto conlleva.
La tarea de síntesis suele comenzar generando un código intermedio. El código intermedio no es el lenguaje de programación de ninguna máquina real, sino que corresponde a una máquina abstracta, que se debe de definir lo más general posible, de forma que sea posible traducir este código intermedio a cualquier máquina real.
El objetivo del código intermedio es reducir el número de programas necesarios para construir traductores, y permitir más fácilmente la transportabilidad de unas máquinas a otras. Supóngase que se tienen n lenguajes, y se desea construir traductores entre ellos. Sería necesario construir n*(n-1) traductores.
Sin embargo si se construye un lenguaje intermedio, tan sólo son necesarios 2*n traductores.
Así por ejemplo un fabricante de compiladores puede construir un compilador para diferentes máquinas objeto con tan sólo cambiar las dos últimas fases de la tarea de síntesis.
•Aunque un programa fuente se puede traducir directa mente al lenguaje objeto, algunas ventajas de utilizar una forma intermedia independiente de la máquina son:
•Se facilita la predestinación; se puede crear un compilador para una máquina distinta uniendo una etapa final para la nueva máquina a una etapa inicial ya existente.
•Se puede aplicar a la representación intermedia un optimizador de código independiente de la máquina.
•Lenguajes intermedios
•Los árboles sintácticos y la notación postfija son dos clases de representaciones intermedias.
•El código intermedio es un código abstracto independiente de la máquina para la que se generará el código objeto. El código intermedio ha de cumplir dos requisitos importantes: ser fácil de producir a partir del análisis sintáctico, y ser fácil de traducir al lenguaje objeto.
•Control de flujo
•En los lenguajes de programación hay estructuras y operadores que permiten controlar el flujo de la ejecución, estos pueden ser ciclos, saltos, condiciones entre otros.
•Expresiones booleanas
•En los lenguajes de programación, las expresiones booleanas tienen dos propósitos principales. Se utilizan para calcular valores lógicos y como expresiones condicionales en proposiciones que alteran el flujo del control, como las proposiciones if - else o do - while.
Las expresiones booleanas se componen de los operadores boleanos (and, or y not) aplicados a los
...