Análisis léxico
El analizador léxico o scanner lee los caracteres del programa fuente para agruparlos en palabras o lexemas y luego clasificarlos en componentes léxicos o tokens que son entregados al analizador sintáctico.
Un analizador de léxico tiene como función principal el tomar secuencias de caracteres o símbolos del alfabeto del lenguaje y ubicarlas dentro de categorías, conocidascomo unidades de léxico.
Las unidades de léxico son empleadas por el analizador gramatical para determinar si lo escrito en el programa fuente es correcto o no gramaticalmente.
El Analizador Léxico es la etapa del compilador que va a permitir saber si es un lenguaje de formato libre o no. Frecuentemente va unido al analizador sintáctico en la misma pasada, funcionando entonces como unasubrutina de este último. Ya que es el que va leyendo los caracteres del programa, ignorará aquellos elementos innecesarios para la siguiente fase, como los tabuladores, comentarios, espacios en blanco, etc.
Aunque el analizador de léxico es la primera etapa del proceso de compilación, no es quien lo inicia. La compilación empieza con el analizador gramatical quien solicita un token para realizarsu trabajo; el analizador de léxico reúne símbolos y envía el token correspondiente a la unidad de léxico que conformó al analizador gramatical y espera una nueva solicitud de token.
El analizador de léxico está supeditado por el analizador gramatical.
Componentes Léxicos o tokens
• Palabras reservadas: if, while, do, break
• Identificadores:
asociados a variables, nombres defunciones, tipos definidos por el usuario, etiquetas,... Por ejemplo: velocidad, y11, suma, _100
• Operadores: = * + - / ==
• Símbolos especiales: ; [ ] ( ) { } , • Constantes numéricas: valores enteros, valores en coma flotante, etc.:
982, 0xF678, -83.2E+2,...
• Constantes de caracteres: cadenas de caracteres, “hola mundo”,... • Comentarios: /** abcde **/
Otras funciones del AnalizadorLéxico
•Administrar el archivo del programa fuente: abrirlo, leerlo,
cerrarlo y gestionar posibles errores de lectura.
•“Eliminar” comentarios, espacios en blanco, tabuladores y saltos
de línea (caracteres no validos para formar un token).
•Incluir archivos: # include ...
•Expandir macros y funciones inline: # define ...
•Contabilizar líneas y columnas para emitir mensajes de error.•Reconocer las marcas de fin de archivo. •Insertar los identificadores en la Tabla de Símbolos.
•Reconocer errores léxicos.
•Token: elemento léxico o categoría sintáctica del lenguaje fuente
•En Español: Nombres, verbos, adjetivos, …
•En un lenguaje de programación: Identificadores, Enteros,
palabras reservadas, espacios en blanco, …
•Patrón: regla que describe cómo se forma un token. Lospatrones
se especifican mediante expresiones regulares
•Lexema: Secuencia de caracteres del programa fuente que
concuerda con un patrón.
•Atributos: Información adicional asociada a un token y que será utilizada en el análisis semántico y/o en la etapa de síntesis
Ejemplos Token identificador cte_entera pr_if pr_do op_div Lexema total, b52, i 1492, 1, 512 if do / Patrón Letra seguidade letras o dígitos Digito seguido de mas dígitos Letra i seguida de letra f Letra d seguida de letra o Símbolo /
op_mayig cte_cadena
>= “hola…!!!”
Símbolo > seguido de = Símbolos entre comillas
• Definir el conjunto de elementos léxicos
(tokens)
• Elaborar la tabla de tokens, detallando: token,
código asignado al token y patrón (ER)
• Construir un AFD (Autómata FinitoDeterminista) para cada ER asociada a cada token.
• Combinar todos los AFDs en un único AFD
• De los estados finales no deben salir transiciones. • En el caso de las cadenas no específicas, se debe leer
hasta hallar un carácter que no forma parte del patrón. En este último estado se debe devolver al buffer de entrada el carácter leído (que puede ser parte del siguiente token),...
Regístrate para leer el documento completo.