Etapas del Compilador

Fases de un traductor y cambio en la representación

Análisis del programa fuente

Su lectura es de Izquierda a Derecha

Lo realiza el Analizador Léxico

Forma Tokens

Son cadenas de caracteres con un significado conjunto

Constituyen los datos de entrada para el análisis jerárquico

Análisis Léxico

Lee la secuencia de caracteres del
programa fuente y la convierte en una secuencia de tokens

La secuencia de caracteres toma el nombre de LEXEMA y son instancias de los tokens, por ejemplo los números 1234 ó 4553

Es la única que tiene acceso al código fuente del programa

Elimina los espacios en blanco que separan los tokens

Ejemplos de Tokens:
- Un identificador
- Una constante entera
- Un operador
- Una palabra clave
- Signos de puntuación
- Un operador formado por varios caracteres como "++"

Análisis Sintáctico

Es un analizador jerárquico, tambien llamado parser

Es la que recibe la secuencia de tokens generadas en la fase anterior y la vuelve a examinar.

El objeto de este nuevo análisis consiste en la detección de errores semánticos y sintácticos como la duplicidad de las variables, secuencia de tokens que no se ajustan a la gramática del lenguaje.

La misión del analizador sintáctico es comprobar que la sintaxis del programa fuente de entrada este bien formada.

Análisis Semántico

Se chequea el programa fuente buscando errores semánticos y recopilando información sobre los tipos de los datos para la siguiente fase

Un componente importante lo constituye el chequeo de tipos de datos

Se utiliza la estructura jerárquica creada por el analizador sintáctico para identificar los operadores y operandos de las expresiones.

Generador de Código Intermedio

Puede tener muchas formas posible

Ahora el código intermedio depende totalmente del ordenador con el que se trabaja ya que se basa en las instrucciones y arquitectura del procesador.

si en la fase anterior no se producen errores, el generador de codigo intermedio traduce el analisis resultante a un formato propio del compilador

Existen 2 propiedades principales

Facil de producir

Facil de traducir

Optimizador de Código Intermedio

Se trata de mejorar el código intermedio para que su ejecución sea más rápida

El código ocupa menos espacio

Generador de Código

Consiste en la generación de código

Código máquina reubicable

Lenguaje ensamblador

Se escogen posiciones de memoria para las variables utilizadas en el programa

Se traducen las instrucciones intermedias a instrucciones que entiende la máquina

Detección de Errores y
Emisión de Mensajes de Error

Es un mensaje de error que el compilador emite cuando detecta una anomalía o inconsistencia en cualquier fase del compilador.

Puede pararse al encontrar un error o intentar recuperar todos los errores de una pasada.

Manejo de la Tabla de Símbolos

a

Es una estructura de datos que contiene un registro por cada identificador con campos para cada uno de sus atributos

Debe permitir encontrar rápidamente el registro de cada identificador, y almacenar o consultar los datos

El Analizador Léxico puede incuir un nuevo registro en la tabla cada vez que detecte un nuevo identificador

Los atributos no podrán ser determinados durante el Análisis Léxico

Bibliografía

Jiménez Millán, J. A. (2014). Compiladores y procesadores de lenguajes. Servicio de Publicaciones de la Universidad de Cádiz. https://elibro.net/es/ereader/uguayaquil/33847?page=1

J. Corrales, E. Ponce, (2006), Técnicos de Soporte Informático de la Comunidad de Castilla Y León, Editorial Mad, S.L., Sevilla, España.

Ejemplo

Un traductor trabaja en fases, cada una de las cuales transforma el programa fuente de una representación a otra.

Programa fuente

Analizador léxico o lineal (scanner)

Analizador sintáctico o jerárquico (parser)

Analizador semántico (analizador restricciones de contexto)

Manejo Tabla de Símbolos

Generador de código objeto

Programa objeto

En el gráfico se muestra la descomposición típica.

En la práctica algunas de las fases pueden estar agrupadas

Las primeras tres fases se conocen como “la sección de análisis de un traductor”

Las últimas tres fases se consideran como “la sección de síntesis del traductor”

Generador de código intermedio

Manejo de errores

Las fases siguientes incluyen la información de los atributos