Compiladores
COMPILADORES Unidad II: Diseño e implementación de analizadores léxicos
Flor Prof. Flor Narciso GIDyC-Departamento de Computación LABSIULA-Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes fnarciso@ula.ve
Análisis léxico
La cadena de caracteres que constituye el programa fuente se lee de izquierda a derecha y se agrupa en componentes léxicos otokens, que son secuencias de caracteres que tienen un significado colectivo (identificadores, literales, operadores, palabras reservadas, signos de puntuación, etc.).
Análisis léxico
Leer los caracteres de entrada y elaborar como salida una secuencia de componentes léxicos que utiliza el analizador sintáctico para hacer en análisis. Programa fuente Analizador léxico
Componente léxico Obténel siguiente componente léxico
Ejemplo
p = i + v * 60 Analizador léxico
(IDENTIFICADOR, p) (OPASIGNACION, =) (IDENTIFICADOR, i) (OPARITMETICO, +) (IDENTIFICADOR, v) (OPARITMETICO, *) (NUMERO, 60)
Analizador sintáctico
Tabla de símbolos
1
Análisis léxico
Funciones
• Descomponer el programa fuente en componentes léxicos (palabras reservadas, operadores, identificadores,constantes, literales, delimitadores). •Eliminar del programa fuente comentarios y espacios en blanco en forma de caracteres de espacio en blanco, caracteres TAB y de línea nueva. •Relacionar los mensajes de error del compilador con el programa fuente (asociar un número de línea con un mensaje de error).
Análisis léxico: Componentes léxicos
Ejemplo: Dada la siguiente función
Entero: WCH(Entero:tarifa; Entero: principio; Entero: fin) Comienzo Entero: costo; costo = tarifa * (principio - fin) + 2; devolver(costo); Fin
Análisis léxico: Componentes léxicos
Ejemplo: Los lexemas de sus componentes léxicos son:
Entero : WCH ( Entero : tarifa ; Entero : principio ; Entero : fin ) Comienzo Entero costo ; costo = tarifa * ( principio - fin ) + 2 ; devolver ( costo ) ; Fin
Análisis léxico:Componentes léxicos
Lexema Entero WCH, tarifa, principio, fin, costo (, ), :, ; Comienzo, devolver, Fin = *, -, + 2 Token Patrón Entero ( | )* (|) |:|; Comienzo | Fin | devolver = +|-|* ()+
2
Análisis léxico: Espacios en blanco
Ejemplo: Eliminación de espacios en blanco, tabuladores y nueva línea → | | → b → TAB → EOL → +
Análisis léxico: Atributos
Reconocimiento deconstantes numéricas: Sea el componente léxico o token. Cuando una secuencia de dígitos aparece en la cadena de entrada, el analizador léxico pasará al analizador sintáctico y el valor del número se pasará como atributo del componente léxico . (, atributo)
Ejemplo 31 + 26 Cadena de componentes léxicos:
+
(, 31) (, +) (, 26)
Análisis léxico: Atributos
Diagramas de Transiciones
Reconocimiento de identificadores y palabras reservadas: Cuando el analizador léxico reconoce un identificador, si no está almacenado en la tabla de símbolos (TS), entonces se almacena. El atributo del componente léxico es un apuntador a esa entrada en la TS. Ejemplo: conta = conta + suma Cadena de componentes léxicos< id> = +
Diagrama que representan las acciones que tienen lugar cuando elanalizador léxico es llamado por el analizador sintáctico para obtener el siguiente componente léxico.
Inicio
# #
Estado inicial Estado final Transición
(,ap1 )(, )(,ap1)(, ) (,ap2)
3
Diagramas de Transiciones
Ejemplo: Diagrama de transiciones para el componente léxico < Inicio = Devuelve(, MEI) 1 2 0 > 3 otro 4 = > 5 6
Devuelve(, MEN) Devuelve(, DIF)
Diagramas de TransicionesEjemplo: Diagrama de transiciones para el componente léxico
Letra o dígito Inicio 0 letra 1 otro 2
Devuelve(, ap)
Devuelve(, IGU)
= otro
7 8
Devuelve(, MAI) Devuelve(, MAY)
Ejercicios
Ejercicios
Identifique los lexemas que forman los componentes léxicos en el siguiente programa en C++. Dé valores razonables de atributo para los componentes léxicos. int max (int i,...
Regístrate para leer el documento completo.