Secion vi

Solo disponible en BuenasTareas
  • Páginas : 13 (3038 palabras )
  • Descarga(s) : 0
  • Publicado : 21 de noviembre de 2011
Leer documento completo
Vista previa del texto
Universidad Nacional del Santa

Curso: Teoría de Compiladores

GENERACIÓN DE CÓDIGO INTERMEDIO INTRODUCCION
Esta fase del compilador 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 operandos. Al no generarse código ensamblador el cual es dependiente de la computadora especifica, sino código intermedio, se puedereutilizar 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 ningunamá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 nlenguajes, 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.

Figura 1. n*(n-1)traductores entre n lenguajes

Docente: Ing. Mirko Manrique Ronceros

~1~

Universidad Nacional del Santa

Curso: Teoría de Compiladores

Las máquinas abstractas deben definirse completamente: por una parte se definirá su arquitectura y por otra su repertorio de instrucciones. La arquitectura de la máquina abstracta se elegirá de forma que contribuya a facilitar la portabilidad dentro del grupode arquitecturas hacia las que previsiblemente se dirigirá el código objeto. Habitualmente las arquitecturas típicas de máquinas abstractas son: Máquinas basadas en pila, basadas en registros, combinación de pilas y registros, orientadas a objetos. También se pueden clasificar desde el punto de vista de la cantidad y complejidad de sus instrucciones en máquinas CISC (Complex Instruction SetComputer)y RISC (Reduced Instruction Set Computer).

Figura 2. 2*n traductores entre n lenguajes

Figura 3. Ejemplos de compiladores de distintos lenguajes para distintas máquinas

La forma de las instrucciones del código intermedio puede variar según sea el diseño de la máquina abstracta. Por ejemplo la expresión: (A+B)*(C+D)

Docente: Ing. Mirko Manrique Ronceros

~2~

UniversidadNacional del Santa Puede traducirse al siguiente conjunto de cuartetos: (+, A, B, T1) (+, C, D, T2) (*, T1, T2, T3)

Curso: Teoría de Compiladores

Donde ( + , A , B , T1 ) se interpreta como suma A y B y coloca el resultado temporalmente en T1. El resto de los cuartetos se interpretan de forma similar. T1, T2, y T3 pueden ser registros de la máquina o posiciones de memoria temporales. Otra forma denotación es la llamada notación polaca inversa (Reverse Polish Notation o RPN). Así la expresión anterior(+, A, B, T1) en notación polaca inversa es: AB + CD + * De esta forma los operadores aritméticos se colocan en el orden en que serán ejecutados, y además no es necesario el uso de paréntesis. Habitualmente la notación polaca va ligada a máquinas que utilizan una pila, y su representación...
tracking img