Upload
realvaradog4831
View
96
Download
1
Embed Size (px)
Citation preview
5/12/2018 2 Ejemplo Fases Compilador - slidepdf.com
http://slidepdf.com/reader/full/2-ejemplo-fases-compilador 1/12
Ejemplo de las fases de uncompilador
Analizaremos algo más las fases usandocomo ejemplo simple el fragmento decódigo Pascal:
posicion := inicial + velocidad * 60
5/12/2018 2 Ejemplo Fases Compilador - slidepdf.com
http://slidepdf.com/reader/full/2-ejemplo-fases-compilador 2/12
Ejemplo de las fases de uncompilador
Analizador Lexico La cadena de entrada se recibe como una sucesión de
caracteres.
El análisis léxico agrupa los caracteres en secuencias
con significado colectivo y mínimo en el lenguaje,llamadas componentes léxicos (token) con ciertosatributos léxicos. En el ejemplo, se detectarían 7:
1. El identificador posicion2. el operador de asignación :=
3. el identificador inicial4. el operador +5. el identificador velocidad6. el operador *7. la constante numérica 60
5/12/2018 2 Ejemplo Fases Compilador - slidepdf.com
http://slidepdf.com/reader/full/2-ejemplo-fases-compilador 3/12
Ejemplo de las fases de uncompilador
Cada vez que se detecta un nuevo identificador, se anotauna entrada en la tabla de símbolos.
El lenguaje de entrada tendrá un catálogo de componentesposibles, que se podrán codificar, siendo mas comunes:
✔ Palabras Reservadas: codificadas mediante las constantesBEGIN, END, IF, VAR . . .
✔ Identificadores: codificadas mediante la constante ID(caracterizadas por ser sucesiones de letras y dígitos quecomiencen por una letra, que no pertenezcan al catálogo depalabras reservadas).
✔ Operadores Relacionales: codificados mediante la constanteOPREL, que pueden ser uno de los siguientes: <=, <, >, >=,= <>
✔ Operadores aritméticos de un solo caracter : ”+”, ”-”, ”*”, etc.
Se codificarán con su propio código de carácter.
5/12/2018 2 Ejemplo Fases Compilador - slidepdf.com
http://slidepdf.com/reader/full/2-ejemplo-fases-compilador 4/12
Ejemplo de las fases de uncompilador
Salida del Analizador léxico Una sucesión de pares formada por el tipo de
componente léxico de que se trata y cuál de ellos es.
Llamaremos componente léxico al primer elemento del
par y valor léxico al segundo. Por lo tanto, la salida delanalizador léxico para el ejemplo sería:
<ID, 25>
<OPASIGN,>
<ID, 24>
<+,>
<ID, 26>
<*,>
<CTE, 60>
5/12/2018 2 Ejemplo Fases Compilador - slidepdf.com
http://slidepdf.com/reader/full/2-ejemplo-fases-compilador 5/12
Ejemplo de las fases de uncompilador
Analizador Sintáctico: Los components léxicos se agrupan para formar frases
Normalmente las frases se representan mediante unaestructura de árbol sintáctico, siguiendo las reglas que
describen el lenguaje. Las reglas determinarán en
el caso del ejemplo un árbolcomo el siguiente:
5/12/2018 2 Ejemplo Fases Compilador - slidepdf.com
http://slidepdf.com/reader/full/2-ejemplo-fases-compilador 6/12
Ejemplo de las fases de uncompilador
Analizador Semántico: En esta etapa se revisa el resultado del análisis sintáctico,
recopilando información de tipos y construyendo unarepresentación llamada arbol de sintaxis abstracta.
Para el ejemplo, en esta fase se anotará el tipo de losidentificadores cuando se revise la declaración de variablesde forma que la tabla de símbolos ahora contendrá másinformación:
5/12/2018 2 Ejemplo Fases Compilador - slidepdf.com
http://slidepdf.com/reader/full/2-ejemplo-fases-compilador 7/12
Ejemplo de las fases de uncompilador
Salida del analizador semántico: Un AST en el que más que la estructura sintáctica de la
entrada, aparece la estructura de operaciones a realizar,como el siguiente:
Ej l d l f d
5/12/2018 2 Ejemplo Fases Compilador - slidepdf.com
http://slidepdf.com/reader/full/2-ejemplo-fases-compilador 8/12
Ejemplo de las fases de uncompilador
Generación de Código Intermedio Se puede considerar esta representación intermedia
como un programa para una máquina abstracta.
Está representación intermedia debe de tener dos
propiedades, debe ser:✔ Fácil de producir.
✔ Fácil de traducir al lenguaje objeto
Puede tener diversas formas. La mas usada es la
llamada código de tres direcciones, que consiste en:✔ Una secuencia de intrucciones, cada una de las cuales
involucra a lo sumo un operador, además de laasignación.
✔ Tres direcciones a lo sumo (las de los operandos y la delresultado)
Ej l d l f d
5/12/2018 2 Ejemplo Fases Compilador - slidepdf.com
http://slidepdf.com/reader/full/2-ejemplo-fases-compilador 9/12
Ejemplo de las fases de uncompilador
El código intemedio, además, deberá generarnombres temporales para almacenar losresultados intermedios.
Para el ejemplo, la salida del compilador en esta fasepodria ser la siguiente secuencia de instrucciones:
Ej l d l f d
5/12/2018 2 Ejemplo Fases Compilador - slidepdf.com
http://slidepdf.com/reader/full/2-ejemplo-fases-compilador 10/12
Ejemplo de las fases de uncompilador
Optimización de código Esta fase trata de mejorar el código intermedio, de
modo que resulte un código de máquina más rápido deejecutar.
Se buscan optimizaciones sencillas que mejoransensiblemente el tiempo de ejecución del programaobjeto sin retardar demasiado la compilación
Para el ejemplo, el resultado de esta fase podría ser laeliminación de variables intermedias:
Ej l d l f d
5/12/2018 2 Ejemplo Fases Compilador - slidepdf.com
http://slidepdf.com/reader/full/2-ejemplo-fases-compilador 11/12
Ejemplo de las fases de uncompilador
Generador de código Las posiciones de memoria se seleccionan para cada
una de las variables usadas por el programa.
Cada una de las instrucciones intermedias se traduce auna secuencia de instrucciones de máquina que ejecutala misma tarea.
Para el ejemplo, el código objeto generado finalmentepodría ser: