ANÁLISIS LEXICOGRÁFICO
¿Qué es un
analizador lexicográfico?
Un
analizador léxico y/o analizador lexicográfico (en inglés scanner) es la
primera fase de un compilador consistente en un programa que recibe como entrada
el código fuente de otro programa (secuencia de caracteres) y produce una
salida compuesta de tokens (componentes léxicos) o símbolos. Estos tokens
sirven para una posterior etapa del proceso de traducción, siendo la entrada
para el analizador sintáctico (en inglés parser).
Se encarga
de buscar los componentes léxicos o palabras que componen el programa fuente,
según unas reglas o patrones. La entrada del analizador léxico podemos
definirla como una secuencia de caracteres.
Gramática
(N, T, P, S)
N * Símbolos
no terminales.
T * Símbolos terminales
P * Reglas de producción
S * Axioma inicial
El
analizador léxico tiene que dividir la secuencia de caracteres en palabras con
significado propio y después convertirlo a una secuencia de terminales desde el
punto de vista del analizador sintáctico, que es la entrada del analizador
sintáctico.
El
analizador léxico reconoce las palabras en función de una gramática regular de
manera que sus NO TERMINALES se convierten en los elementos de entrada de fases
posteriores. En LEX, por ejemplo, esta gramática se expresa mediante
expresiones regulares.
El analizador
léxico es la primera fase de un compilador. Su principal función consiste en
leer los caracteres de entrada y elaborar como salida una secuencia de componentes
léxicos que utiliza el analizador sintáctico para hacer el análisis. Esta
interacción, suele aplicarse convirtiendo al analizador léxico en una subrutina
o corrutina del analizador sintáctico.
Recibida la
orden “Dame el siguiente componente léxico” del analizador sintáctico, el analizador
léxico lee los caracteres de entrada hasta que pueda identificar el siguiente
componente léxico.
Otras funciones
que realiza:
• Eliminar los
comentarios del programa.
• Eliminar
espacios en blanco, tabuladores, retorno de carro, etc, y en general, todo
aquello que carezca de significado según la sintaxis del lenguaje.
• Reconocer los
identificadores de usuario, números, palabras reservadas del lenguaje, ..., y
tratarlos correctamente con respecto a la tabla de símbolos (solo en los casos
que debe de tratar con la tabla de símbolos).
• Llevar la
cuenta del número de línea por la que va leyendo, por si se produce algún
error, dar información sobre donde se ha producido.
• Avisar de
errores léxicos. Por ejemplo, si @ no pertenece al lenguaje, avisar de un
error.
• Puede hacer
funciones de preprocesador.
El analizador lexicográfico
puede tener la siguiente estructura:
Donde cada
acción es un fragmento de programa que describe cual ha de ser la acción del
analizador léxico cuando la secuencia de entrada coincida con la expresión
regular.
Patrón: es una
expresión regular.
Token: es el terminal
asociado a un patrón. Cada token se convierte en un número que es un código
identificativo de cada patrón. En algunos casos, cada número tiene asociado un
puntero a la tabla de símbolos. Utilizamos la palabra terminal desde el punto
de vista de la gramática utilizada por el analizador sintáctico.
Lexema: Es cada secuencia
de caracteres concreta que encaja con un patrón, es decir, es como una
instancia de un patrón.

HUMILDAD, CIENCIA Y HONESTIDAD.



No hay comentarios:
Publicar un comentario