Instituto Tecnológico de Nuevo León
Materia:
Lenguajes y Autómatas 2
Trabajo:
Análisis Léxico
Nombre del Alumno: Francisco Javier Alvarado González
No. De Control: 15481057
Catedrático: Dr. Fidencio Sánchez Rueda
Carrera: Ingeniería en Sistemas Computacionales
Ciudad Guadalupe, Nuevo León, a 10 de Septiembre del 2018
Un analizador léxico
Un analizador léxico 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).
La especificación de un lenguaje de programación a menudo incluye un conjunto
de reglas que definen el léxico. Estas reglas consisten comúnmente en
expresiones regulares que indican el conjunto de posibles secuencias de
caracteres que definen un token o lexema.
En algunos lenguajes de programación es necesario establecer patrones para
caracteres especiales (como el espacio en blanco) que la gramática pueda
reconocer sin que constituya un token en sí.
Análisis
Esta etapa está basada usualmente en una máquina de estados finitos. Esta
máquina contiene la información de las posibles secuencias de caracteres que
puede conformar cualquier token que sea parte del lenguaje (las instancias
individuales de estas secuencias de caracteres son denominados lexemas). Por
ejemplo, un token de naturaleza entero puede contener cualquier secuencia de
caracteres numéricos.
Funciones del Analizador Léxico
Convierte el programa fuente en una cadena de tokens
Para reconocer el token usa un patrón, una regla que describe como se
forman las cadenas que corresponden a un token.
Salta comentarios y espacios en blanco (tabuladores, saltos de línea...)
Tener el registro de la línea del archivo fuente que está siendo analizada
Genera mensajes de error léxico, y se recupera del error
Convierte los valores literales al tipo que corresponda
Si la entrada debe obedecer a un formato, verifica el formato Ej. Fortran,
Cobol
Tokens y Lexemas
Token:
Elemento básico del lenguaje
Unidad léxica indivisible
Identifica una entidad lógica dentro del lenguaje
Incluyen: Palabras Reservadas, Constantes, Operadores, Signos de
Puntuación e Identificadores
Lexema:
La cadena original que se identifica como token
No hay correspondencia 1-1 entre token-lexema
Construcción de Generadores
Automáticos de Scanners
Construir un NFA para cada una de las expresiones regulares a reconocer.
Aplicar una unión a todas las expresiones (unirlas con un mismo estado de
inicio -usando transiciones Є-), pero sin unirlas en un solo estado final (se
requiere un estado de aceptación para cada token de tal forma que se
pueda identificar el token econocido) Generar el DFA.
Hacer el programa de recorrido de DFA teniendo en cuenta que un lexema
puede pasar por varios estados de aceptación (crear una lista de los
estados de aceptación por los que pasó).
Atributos para tokens
El analizador recopila información sobre los tokens a medida que los
reconoce. Por ejemplo: token num, pero... qué lexema?
Cuando la cadena de entrada permite reconocer más de un token, esta
información puede ayudar a desambiguar.
Palabras Reservadas
Identificador es una palabra que inicia con una letra, y es seguida por letras
o dígitos.
Las palabras clave cumplen con este mismo patrón de construcción.
Se hace necesario un mecanismo que permita decidir cuándo una cadena
es una palabra clave o un identificador
Solución sencilla: Palabras Reservadas (que no pueden ser usadas como
identificadores)
Porque se divide el Análisis Léxico del Sintáctico?
Simplifica y modulariza el diseño del compilador, se hace más claro, facilita
la implementación.
Mejora la eficiencia del compilador:
El parser trabaja con Tokens, no con caracteres
Uso de técnicas de buffers
La mayor parte del tiempo de compilación se usa en el análisis léxico
(excluyendo la optimización)
Mayor portabilidad:
Aísla las peculiaridades en el alfabeto de entrada
Ej. El conjunto de caracteres, representación de símbolos