Sei sulla pagina 1di 12

Ejemplo de las fases de un compilador

Analizaremos algo ms las fases usando como ejemplo simple el fragmento de cdigo Pascal: posicion := inicial + velocidad * 60

Ejemplo de las fases de un compilador

Analizador Lexico

La cadena de entrada se recibe como una sucesin de caracteres. El anlisis lxico agrupa los caracteres en secuencias con significado colectivo y mnimo en el lenguaje, llamadas componentes lxicos (token) con ciertos atributos lxicos. En el ejemplo, se detectaran 7:
1. 2. 3. 4. 5. 6. 7. El identificador posicion el operador de asignacin := el identificador inicial el operador + el identificador velocidad el operador * la constante numrica 60

Ejemplo de las fases de un compilador

Cada vez que se detecta un nuevo identificador, se anota una entrada en la tabla de smbolos. El lenguaje de entrada tendr un catlogo de componentes posibles, que se podrn codificar, siendo mas comunes:

Palabras Reservadas: codificadas mediante las constantes BEGIN, END, IF, VAR . . . Identificadores: codificadas mediante la constante ID
(caracterizadas por ser sucesiones de letras y dgitos que comiencen por una letra, que no pertenezcan al catlogo de palabras reservadas).

Operadores Relacionales: codificados mediante la constante OPREL, que pueden ser uno de los siguientes: <=, <, >, >=, = <> Operadores aritmticos de un solo caracter: +, -, *, etc. Se codificarn con su propio cdigo de carcter.

Ejemplo de las fases de un compilador

Salida del Analizador lxico

Una sucesin de pares formada por el tipo de componente lxico de que se trata y cul de ellos es.

Llamaremos componente lxico al primer elemento del par y valor lxico al segundo. Por lo tanto, la salida del analizador lxico para el ejemplo sera:

<ID, 25> <OPASIGN,> <ID, 24> <+,> <ID, 26> <*,> <CTE, 60>

Ejemplo de las fases de un compilador

Analizador Sintctico:

Los components lxicos se agrupan para formar frases Normalmente las frases se representan mediante una estructura de rbol sintctico, siguiendo las reglas que describen el lenguaje.

Las reglas determinarn en el caso del ejemplo un rbol como el siguiente:

Ejemplo de las fases de un compilador

Analizador Semntico:

En esta etapa se revisa el resultado del anlisis sintctico, recopilando informacin de tipos y construyendo una representacin llamada arbol de sintaxis abstracta.

Para el ejemplo, en esta fase se anotar el tipo de los identificadores cuando se revise la declaracin de variables de forma que la tabla de smbolos ahora contendr ms informacin:

Ejemplo de las fases de un compilador

Salida del analizador semntico:

Un AST en el que ms que la estructura sintctica de la entrada, aparece la estructura de operaciones a realizar, como el siguiente:

Ejemplo de las fases de un compilador

Generacin de Cdigo Intermedio

Se puede considerar esta representacin intermedia como un programa para una mquina abstracta. Est representacin intermedia debe de tener dos propiedades, debe ser:

Fcil de producir. Fcil de traducir al lenguaje objeto

Puede tener diversas formas. La mas usada es la llamada cdigo de tres direcciones, que consiste en: Una secuencia de intrucciones, cada una de las cuales involucra a lo sumo un operador, adems de la asignacin. Tres direcciones a lo sumo (las de los operandos y la del resultado)

Ejemplo de las fases de un compilador

El cdigo intemedio, adems, deber generar nombres temporales para almacenar los resultados intermedios.

Para el ejemplo, la salida del compilador en esta fase podria ser la siguiente secuencia de instrucciones:

Ejemplo de las fases de un compilador

Optimizacin de cdigo

Esta fase trata de mejorar el cdigo intermedio, de modo que resulte un cdigo de mquina ms rpido de ejecutar. Se buscan optimizaciones sencillas que mejoran sensiblemente el tiempo de ejecucin del programa objeto sin retardar demasiado la compilacin Para el ejemplo, el resultado de esta fase podra ser la eliminacin de variables intermedias:

Ejemplo de las fases de un compilador

Generador de cdigo

Las posiciones de memoria se seleccionan para cada una de las variables usadas por el programa. Cada una de las instrucciones intermedias se traduce a una secuencia de instrucciones de mquina que ejecuta la misma tarea. Para el ejemplo, el cdigo objeto generado finalmente podra ser:

Resmen

El estudio de las fases anteriores trata la organizacin lgica de un compilador. En una implantacin, a menudo se agrupan las actividades en dos o mas fases.

Potrebbero piacerti anche