1. TECNOLÓGICO NACIONAL DE MÉXICO CAMPUS
COMITÁN
SISTEMAS COMPUTACIONALES
Asignatura: Lenguajes y Autómatas.
Trabajo: Investigación.
Docente: Pablo Eduardo Chapela Gómez.
Alumno: Ulices Pérez Hernández.
Semestre: 5.
Grupo: “B”.
12/Septiembre/2023
2. ERRORES LEXICOS
El análisis léxico constituye la primera fase, aquí se lee el programa fuente de
izquierda a derecha y se agrupa en componentes léxicos (tokens), que son
secuencias de caracteres que tienen un significado. Además, todos los espacios en
blanco, líneas en blanco, comentarios y demás información innecesaria se elimina
del programa fuente. También se comprueba que los símbolos del lenguaje
(palabras clave, operadores,) se han escrito correctamente.
Como la tarea que realiza el analizador léxico es un caso especial de coincidencia
de patrones, se necesitan los métodos de especificación y reconocimiento de
patrones, y estos métodos son principalmente las expresiones regulares y los
autómatas finitos. Sin embargo, un analizador léxico también es la parte del
traductor que maneja la entrada del código fuente, y puesto que esta entrada a
menudo involucra un importante gasto de tiempo, el analizador léxico debe
funcionar de manera tan eficiente como sea posible.
Son pocos los errores simplemente en el nivel léxico ya que tiene una visión muy
restringida de un programa fuente. El analizador léxico debe devolver el
componente léxico de un identificador y dejar a otra fase se ocupe de los errores.
Suponga que una situación en la cual el analizador léxico no puede continuar porque
ninguno de los patrones concuerda con un prefijo de la entrada. Tal vez la estrategia
de recuperación más sencilla sea recuperación “EN MODO PANICO” (este método
de recuperación es donde se borra caracteres sucesivos de la entrada hasta que el
analizador léxico pueda encontrar un componente léxico bien formado). ¡¡Los
programas no siempre son correctos!!
El compilador tiene que:
➢ Reportar clara y exactamente la presencia de errores
➢ Recuperarse de cada error lo suficientemente rápido para poder detectar
errores subsiguientes:
➢ Tratar de evitar mensajes falsos de error.
➢ Un error que produce un token erróneo.
➢ Errores léxicos posibles.
3. GENERADORE LÉXICO
Un generador léxico, también conocido como analizador léxico, es una parte
fundamental de un compilador o intérprete de lenguaje de programación. Su función
principal es analizar el código fuente de un programa y dividirlo en unidades más
pequeñas llamadas "lexemas" o "tokens". Cada token representa una unidad
significativa de código, como una palabra clave, un identificador, un operador o un
valor numérico. Aquí tienes una investigación detallada sobre los generadores
léxicos:
1. Importancia de los generadores léxicos:
Los generadores léxicos son una de las primeras etapas en la compilación e
interpretación de programas. Su papel es crucial, ya que preparan el código fuente
para el análisis posterior. Sin un analizador léxico eficiente, el proceso de traducción
de código sería mucho más complejo.
2. Tareas principales de un generador léxico.
- Escaneo: El generador léxico examina el código fuente caracter por caracter,
identificando patrones que corresponden a tokens. Por ejemplo, puede detectar
palabras clave como "if" o "while", operadores como "+", o identificadores como
"variable".
- Eliminación de espacios en blanco y comentarios: El analizador léxico también
elimina espacios en blanco, tabulaciones y comentarios, ya que generalmente no
son relevantes para la etapa de análisis posterior.
- Construcción de tokens: Cada vez que el generador léxico reconoce un token, lo
almacena en una estructura de datos que representa la secuencia de tokens. Estos
tokens se utilizan más adelante en el proceso de análisis sintáctico.
3. Herramientas para implementar generadores léxicos:
Los generadores léxicos se implementan utilizando herramientas específicas como
Flex (Fast Lexical Analyzer Generator) en el caso de lenguajes basados en el
estándar POSIX, o herramientas personalizadas que utilizan expresiones regulares
y análisis manual.
4. Expresiones regulares en generadores léxicos:
4. Las expresiones regulares son una parte esencial de un generador léxico. Se
utilizan para definir patrones de caracteres que corresponden a tokens específicos.
Por ejemplo, una expresión regular para números enteros podría ser `d+`, que
coincide con una o más cifras.
5. Autómatas finitos en generadores léxicos:
Para implementar un generador léxico, se utilizan autómatas finitos deterministas
(AFD) o autómatas finitos no deterministas (AFND). Estos autómatas se construyen
a partir de las expresiones regulares y se utilizan para reconocer patrones en el
código fuente.
6. Tabla de símbolos:
El generador léxico también mantiene una tabla de símbolos que almacena
información sobre identificadores encontrados en el código fuente. Esto permite
hacer un seguimiento de las variables y símbolos definidos y usarlos en etapas
posteriores del proceso de compilación.
7. Ejemplo de generador léxico:
Imagina un lenguaje de programación simple en el que el analizador léxico debe
reconocer palabras clave como "if" y "while", operadores como "+" y "-", y números
enteros. Utilizando expresiones regulares y autómatas finitos, el generador léxico
dividirá el código fuente en tokens como ("if", PALABRA_CLAVE), ("(",
PARENTESIS_ABIERTO), ("x", IDENTIFICADOR), (">", OPERADOR), y así
sucesivamente.
8. Integración en el proceso de compilación:
Después de que el generador léxico ha dividido el código fuente en tokens, estos
tokens se pasan a la etapa de análisis sintáctico, donde se verifica la estructura y la
gramática del programa. La salida del analizador léxico es fundamental para el
funcionamiento correcto del compilador o intérprete.
En resumen, los generadores léxicos desempeñan un papel esencial en la
traducción de código fuente en lenguajes de programación en unidades
significativas y facilitan el análisis sintáctico subsiguiente. Su implementación se
basa en expresiones regulares y autómatas finitos, lo que permite un procesamiento
eficiente y preciso del código fuente.