Está en la página 1de 17

Fases de un Compilador

Repaso
Ing. Wylian Cabezas
UMG 2023
Faces de un compilador
Análisis:
Analizador Léxico Busca entre las 3 fases
el validar el código
fuente con la idea de
Análisis Analizador Sintáctico que lo que pase a la
generación este libre de
errores.
Analizador Semántico

Generador Código
Intermedio

Generación Optimizador

Generador de Código
• Es el primer tratamiento que se hace al código fuente.
• Formando una tabla de símbolos

• En esta fase se lee la secuencia de caracteres de izquierda a


derecha.
Análisis Léxico • Agrupa las secuencias de caracteres en unidades con
significado propio. (“tokens”)

• Se eliminan los comentarios del código fuente.


Análisis Léxico
• Lee las instrucciones que están en el código fuente y genera una serie
de elementos básicos (léxicos)
• En esta fase, la instrucción leída es una simple cadena de caracteres
sin ninguna estructura en particular.
Cada uno, no tiene ni
totalImpuesto = subtotal * taza / 100 estructura ni significado en
esta fase. Los agrupa en
Número entero componentes léxico:
variables, Operadores de
Variable Asignación, Operador
Aritmético y número entero
Operador aritmético

Operador de asignación
Analizador Léxico
• El trabajo del analizador léxico es en cooperación con el analizador
sintáctico.

Componente léxico

Programa Analizador
fuente Analizador Léxico
Sintáctico
Siguiente
componente léxico

Tabla de Símbolos
• Trabaja a solicitud del analizador sintáctico.

• El analizador sintáctico verifica que los diferentes


componentes léxico estén bien escritas.
Análisis Léxico
• Lo hace utilizando un conjunto de reglas de escrituras
dictadas por una gramática.
Funciones del Análisis
Léxico
• Procesa la cadena leída de izquierda a derecha y carácter por
carácter.

• Cuando se termine la lectura, dejará un indicador en la cadena de


entrada para reiniciar el proceso cuando sea solicitado de nuevo
por el analizador sintáctico.

• El analizador léxico realiza algunas tareas adicionales, mientras lee


el cadena de entrada, por ejemplo:
• Elimina los espacios, tabuladores, etc.
• Ignora comentarios
Análisis Léxico y Análisis Sintáctico

• Trabajan de forma conjunta, pero existen razones


para separarlos:

• Generar un diseño sencillo: La separación de las


fases puede simplificar la labor de análisis sintáctico.
• Se mejora la eficiencia del compilador
Componentes Léxicos
• Tome como ejemplo
𝒄𝒐𝒏𝒕𝒂𝒅𝒐𝒓 = 𝒗𝒂𝒍𝒐𝒓 + 𝟓;
• Las cadenas “contador” y “valor” generan un componen léxico
(lexema) llamado variable. Cuando estas vienen encerradas entre
comillas generan otro tipo de componente léxico llamado “cadena de
caracteres”.
• Los componentes léxicos deben concordar con un patrón para que
sean tratados como una unidad léxica.
• Debe haber un patrón para símbolos aritméticos, para cadenas, para
los números, signos de puntuación, etc.
Componentes Léxicos
• En los lenguajes de programación, se consideran componentes léxicos
básicos, como:

• Palabras reservadas
• Operadores (aritméticos, relacionales, de asignación, …)
• Identificadores Tabla de
• Constantes Símbolos
• Cadenas
• Signos de puntuación como paréntesis, coma y punto.
Patrones

• Es una regla que describe el conjunto de lexemas que pueden


representar a un determinado componente léxico.

• Por ejemplo:
• Para un operador relacional, es el conjunto de las cadenas <,
>, <=, >=, ==, <>.

• Estos patrones pueden ser mas complejos dependiendo del


componente léxico que necesite identificar.
Token
• Es la representación interna de una instancia del componente léxico.

• Consta de dos partes: un identificador de componente léxico, que


distingue un componente de otro y es un número entero asignado a
cada componente:
Componente Léxico Identificador

Identificador 1
Palabra reservada 2
Número entero 3
Operador aritmético 4
Token
• El segundo elemento del token es un apuntador a la tabla de símbolos
asociada al componente léxico, donde se ha almacenado la cadena
que permitió el reconocimiento del componente

calculo = suma + impuesto Tabla de símbolos del componente léxico


Identificador
(1,1) calculo

suma
(1,2)
impuesto
(1,3)
Lexema
• Secuencia de caracteres en el programa fuente, que
coinciden con el patrón para un token y que el
analizador léxico identifica como una instancia de ese
token.
Patrón: Es la regla que define que
es una cadena dentro del lenguaje.

Resumiendo estos Lexema: Es la cadena identificada


tres conceptos en el código gracias a un patrón.

Token: asociación de una clase y


un código que organiza los
lexemas.
Patrón:
Operadores Aritméticos: Clase 100 ( + - * / )
Operadores Asignación: Clase 200 ( = )
Identificadores: Clase 300 ( nombres validos de variables )
Signos de Puntuación: Clase 400

promedio=suma/cantidad;

Lexemas obtenidos: Token:


promedio -> Identificador promedio -> (300,301)
= -> Operador asignación = -> (200,201)
Suma -> Identificador Suma -> (300,302)
/ -> Operador aritmético / -> (100,101)
Cantidad -> Identificador Cantidad -> (300,303)
; -> signo de puntuación ; -> (400,401)
Analicemos:
public class Prueba {
public void generar() {
int suma;
suma = 1+2+3+4+5;
System.out.print(suma);
}
}

También podría gustarte