El documento describe las funciones del analizador léxico, que incluyen dividir el programa fuente en componentes léxicos o tokens según patrones, eliminar espacios y comentarios, y reconocer identificadores, números, palabras reservadas y más. Explica que los tokens se convierten en números que son la entrada para el análisis sintáctico. También resume dos métodos para implementar un analizador léxico: manualmente o mediante un generador automático.
El documento describe las funciones del analizador léxico, que incluyen dividir el programa fuente en componentes léxicos o tokens según patrones, eliminar espacios y comentarios, y reconocer identificadores, números, palabras reservadas y más. Explica que los tokens se convierten en números que son la entrada para el análisis sintáctico. También resume dos métodos para implementar un analizador léxico: manualmente o mediante un generador automático.
El documento describe las funciones del analizador léxico, que incluyen dividir el programa fuente en componentes léxicos o tokens según patrones, eliminar espacios y comentarios, y reconocer identificadores, números, palabras reservadas y más. Explica que los tokens se convierten en números que son la entrada para el análisis sintáctico. También resume dos métodos para implementar un analizador léxico: manualmente o mediante un generador automático.
palabras que componen el programa fuente, según unas reglas o patrones. La entrada del analizador léxico es una secuencia de caracteres, el analizador léxico divide esta secuencia en palabras con significado propio y después las convierte a una secuencia de terminales que se convierten en el punto de partida para que el analizador sintáctico construya el árbol sintáctico. 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. El analizador sintáctico solicita un nuevo componente, el léxico lee los caracteres de entrada hasta que pueda identificar el siguiente componente léxico, el cual devuelve al sintáctico según el formato convenido. Otras funciones del analizador léxico son. Eliminar los comentarios del programa. Eliminar espacios en blanco, tabuladores, retorno de carro, 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 Llevar la cuenta del número de línea por la que va leyendo, por si se produce algún error, dar información acerca de dónde se ha producido. Avisar de errores léxicos. Por ejemplo, si el carácter ‘@’ no pertenece al lenguaje, se debe emitir un error. También puede hacer funciones de preprocesador. La estructura del analizador léxico se puede resumir así. (Expresión regular)1 {acción a ejecutar}1 (Expresión regular)2 {acción a ejecutar}2 (Expresión regular)3 {acción a ejecutar}3 ... ... (Expresión regular)n {acción a ejecutar}n Donde cada acción a ejecutar es un fragmento de programa que describe cuál ha de ser la acción del analizador léxico cuando la secuencia de entrada coincida con la expresión regular. Normalmente esta acción suele finalizar con la devolución de una categoría léxica. Patrón: Es una expresión regular.
Representa la regla para que una
secuencia de caracteres sea considerada dentro de cierto componente léxico. Regla que describe cómo se forma un token. Token: es la categoría léxica asociada a un patrón. Cada token se convierte en un número o código identificador único. En algunos casos, cada número tiene asociada información adicional necesaria para las fases posteriores de la etapa de análisis. El concepto de token coincide directamente con el concepto de terminal desde el punto de vista de la gramática utilizada por el analizador sintáctico. Entre los componentes léxicos o tokens más importantes están: Palabras reservadas: if, while, do, . . . Identificadores: asociados a variables, nombres de funciones, tipos definidos por el usuario, etiquetas,... Por ejemplo: posicion, velocidad, tiempo, . . . Operadores: = * + - / == > < & ! = . . . Símbolos especiales: ; ( ) [ ] { } ... Constantes numéricas: literales que representan valores Constantes de caracteres: literales que representan enteros, en coma flotante, etc, 982, 0xF678, - 83.2E+2,... Cadenas concretas de caracteres, \hola mundo",... Es cada secuencia de caracteres concreta que encaja con un patrón. 8, 23 y 50 son algunos lexemas que encajan con el patrón (‘0'|’1'|’2'| ... |’9')+. Este_es_1_ejemplo es el lexema que satisface el patrón de un identificador. Un componente léxico puede tener uno o infinitos lexemas. Por ejemplo: palabras reservadas tienen un único lexema. Los números y los identificadores tienen infinitos lexemas. En el patrón „W‟„H‟„I‟„L‟„E‟ sólo encaja el lexema “WHILE”. posicion := inicial + velocidad * 60 Componentes léxicos: 1. El identificador posicion 2. El símbolo de asignación := 3. El identificador inicial 4. El signo de suma: + 5. El identificador velocidad 6. El signo de multiplicación:* 7. El número 60 T_While T_ParentesisIzquierdo T_Identificador y T_Menos T_Identificador z T_ParentesisDerecho T_LlaveApertura T_Int T_Identificador x T_Asignacion T_Identificador a T_Mas T_Identificador b T_PuntoyComa T_Identificador y T_MasAsignacion T_Identificador x T_PuntoyComa T_LlaveCierre Implementación Manual: Este mecanismo consiste en construir los patrones necesarios para cada categoría léxica (tokens), construir sus autómatas finitos individuales, fusionarlos por opcionalidad y, finalmente, implementar los autómatas resultantes. Aunque la construcción de analizadores mediante este método es sistemática y no propensa a errores, cualquier actualización de los patrones reconocedores implica la modificación del código que los implementa, por lo que el mantenimiento se hace muy costoso. Mediante generador automático: En este caso, se utiliza un programa especial que tiene como entrada pares de la forma (expresión regular, acción). El metacompilador genera todos los autómatas finitos, los convierte a autómata finito determinista, y lo implementa en un lenguaje de programación como C, Java, Pascal. El programa así generado se compila y se genera un ejecutable que es el analizador léxico del lenguaje. Existen muchas herramientas para la generación automática de AL. Las más conocidas: Lex Flex Jflex PClex Coco