ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Ensayo Codigo Intermedio


Enviado por   •  17 de Junio de 2013  •  2.464 Palabras (10 Páginas)  •  698 Visitas

Página 1 de 10

GENERACION DE CODIGO

Esta etapa inicia el proceso de sintesis par un compilador, que ha pasado por la etapa analisis en las tres fases anteriores (analisis lexico,sintactico,semantico).

En el diseno de rutinas semanticas y generacion de codigo es posible generar representaciones intermedias (tales como cuadruplos, triples, etc) o generar el codigo objeto directamente; ambas posibilidades ofrecen ventajas.

VENTAJAS DE LA GENERACION DE CODIGO INTERMEDIO

El codigo objeto es abstraido para una maquina virtual. esta abstraccion ayuda a separar operaciones de alto nively realizar dependientes de la maquina.

La generacion de codigo y el asignamiento de registros temporales son separados de las rutinas semanticas, los cuales solo trabajan con la abstraccion presentada por la representacion intermedia. las dependencias del codigo objeto son aisladas de las rutinas de generacion de codigo.

La abstraccion puede ser hecha en el nivel de representacion interemdia. esta organizacion ayuda a hacer una optimizacion completamente independiente del codigo objeto, con lo que hace que las rutinas de optimizacion complejas sean mas transportables . debido a que las representaciones intermedias son po diseno mas abstracta y uniforme, las rutinas de optimizacion puede ser mas simples.

VENTAJAS DE GENERACION DE CODIGO OBJETO DIRECTO

Evita un paso extra con la traduccion de una representacion intermedia al codigo objeto

Presenta y permite un consepto simple para el modelo de compilacion de un paso para lenguajes de programacion a decuados

FORMAS DE REPRESENTACION INTERMEDIA

En la historia de los compiladores han sido utilizadas una amplia variedad de representaciones intermedias sin embargo la forma mas simple es la notacion posfija, la cual tambien es conocida en matematicas como notacion libre de parentesis para expresiones aritmeticas que han sido utilizadas mucho tiempo antes que los compiladores. como su nombre lo implica la notacion posfija es una representacion en la cual los operadores aparecen despues que los operandos para los cuales se aplican.

Una de las atracciones principales de la notacion posfija es la simplicidad en la traduc-cion de los procesos, y la consistencia de la representacion. estos factores hacen de esta notacion la mas usual como una representacion intermedia para el manejo de interpretes. de echo la notacion posfija no es muy efectiva como entrada para un optimizador a un generador de codigo, a menos que el codigo objeto a generar tenga una arquitectura en forma de pila.

La siguiente clase de representacion de codigo intermedio se refiere a un arbol de 3 di-recciones,2 para los operandos y una para la hubicacion del resultado. esta clase incluye un amplio numero de representaciones diferentes entre las cuales encontramos cuadruplos y triples. la principal diferencia entre estas notaciones y la notacion posfija es que ellos incluyen referencias explicitas para los resultados de los calculos intermedios. mientras que la notacion posfija los resultados son implicitos al representarlos en una pila.

La diferencia entre triples y cuadruplos es que con los triples es referenciado el valor in-termedio hacia el numero del triple que lo creo, pero en los cudruplo requiere que ellos tengan nombre implicitos.

los triples tienen una ventaja obia de ser mas consistente, pero ellos dependen de su po-si-cion, y hacen que la optimizacion presente cambios de codigo mucho mas compleja.

RECONOCIMIENTO SINTACTICO

Una gramatica que se crea inicialmente no es capaz de revizar el codigo de un programa por si solo.

Produccion -> arbol ->codigo de 3 direcciones -> regla semántica -> codigo

Representamos la siguiente instrucion en notacion polaca:

X= a * b + c - ( m + n - r)

ab * c + mn + r - -

CODIGO DIRECTO

Pila Simbolo actual Expresion restante Accion Codigo generado

a b*c+mn+r-- guarda en pila

a b *c+mn+r-- guarda en pila

ab * c+mn+r-- codigo load a

mult b

store t1

T1 c +mn+r-- guarda en pila

T1c + mn+r-- codigo loadT1

add c

store T2

T2 m n+r-- guarda en pila

T2m n +r-- guarda en pila

T2mn + r-- codigo load m

add n

store T3

T2T3 r -- guarda en pila

T2T3r - - codigo load T3

sub r

store T4

T2T4 - codigo load T2

sub T4

CODIGO INMEDIATO

Pila Simbolo actual Expresion restante Accion Codigo generado

a b*c+mn+r-- guarda en pila

a b *c+mn+r-- guarda en pila

ab * c+mn+r-- codigo load a,mult b

ACC c +mn+r-- guarda en pila

ACCc + mn+r-- codigo add c

ACC m n+r-- guarda en pila codigo: store T1

T1m n +r-- guarda en pila

T1mn + r-- codigo load m,add n

T1ACC r -- guarda en pila

T1 ACC r - - codigo sub r

T1 ACC - codigo store T2,load T1,sub T2

FASES DEL COMPILADOR

Fases del Compilador

...

Descargar como (para miembros actualizados)  txt (15.8 Kb)  
Leer 9 páginas más »
Disponible sólo en Clubensayos.com