Compiladores: Fundamentos y Componentes del Procesamiento Léxico

Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 5,44 KB

El Analizador Léxico: La Primera Fase de un Compilador

¿Qué es el Analizador Léxico?

El analizador léxico, también conocido como escáner o fase de rastreo, tiene la función de leer el programa fuente como una secuencia de caracteres y dividirlo en tokens.

Definición de Token

Los tokens son las palabras reservadas de un lenguaje, secuencias de caracteres que representan una unidad de información en el programa fuente. Cada token representa un patrón específico de caracteres que el analizador léxico reconoce o ajusta desde el inicio de la entrada.

Función Principal del Analizador Léxico

Es la primera fase de un compilador. Su principal función consiste en leer la secuencia de caracteres del programa fuente, carácter a carácter, y elaborar como salida la secuencia de componentes léxicos que utiliza el analizador sintáctico. El analizador léxico opera bajo petición del analizador sintáctico, devolviendo un componente léxico conforme este lo va necesitando para avanzar en la gramática.

Componentes y Módulos Clave en el Procesamiento Léxico

Interfaz del Analizador Léxico

La interfaz toma la especificación de un archivo de texto proporcionado por el usuario para generar un analizador léxico. Si no ocurre ningún error, retorna el analizador generado en un archivo de texto.

Analizador Lexicográfico

El analizador lexicográfico lee caracteres del archivo de texto que contiene la especificación de ETLs, reconoce lexemas y retorna tokens. Es utilizado por el módulo de interfaz, que lo inicializa indicándole el archivo de lectura, y por el analizador sintáctico, el cual hace los requerimientos de tokens.

Analizador Sintáctico

El analizador sintáctico es inicializado por el módulo de interfaz, solicitándole al parser el archivo de entrada. Utiliza el módulo de análisis lexicográfico, al cual le solicita los tokens del archivo de entrada.

Generador de Código

El generador de código es el responsable de generar las estructuras de datos y el código necesario para crear los analizadores léxicos traductores. Es decir, crea el AFD y los AFTs, así como toda la información y las funcionalidades necesarias para simularlos.

Utilidades del Generador

Las utilidades del generador congregan todas las herramientas necesarias, tanto estructuras de datos como funcionalidades, para la generación de un analizador. Dado que existen distintos tipos de utilidades, este módulo podría dividirse en componentes más pequeños y específicos, logrando así relaciones de uso más precisas.

Elementos Léxicos y Estructuras de Datos Fundamentales

Concepto de Tabla

Una tabla es un conjunto de pares clave-valor, llamados elementos de la tabla. La tabla de símbolos es un componente necesario de un compilador.

Cadenas Específicas

Las cadenas específicas incluyen palabras reservadas (if, while, ...), signos de puntuación (., ,, =, ...), operadores aritméticos (+, *, -, /) y lógicos (AND, OR, ...), entre otros. Habitualmente, las cadenas específicas no tienen asociado ningún valor, solo su tipo.

Cadenas No Específicas

Las cadenas no específicas son, por ejemplo, los identificadores o las constantes numéricas o de texto. Siempre tienen tipo y valor.

Funciones de la Tabla de Tokens (Tabla de Nombres o Identificadores)

A la tabla de tokens también se la conoce como tabla de nombres o tabla de identificadores, y cumple dos funciones principales:

  • Efectuar chequeos semánticos.
  • Generación de código.

Manejo de Errores Léxicos Comunes

Nombres Ilegales de Identificadores

Un nombre contiene caracteres inválidos.

Números Incorrectos

Un número contiene caracteres inválidos o no está formado correctamente.

Errores en Palabras Reservadas

Caracteres omitidos, adicionales o cambiados de sitio. Se detecta un fin de archivo a la mitad de un componente léxico. Los métodos de recuperación de errores léxicos se basan en saltarse caracteres en la entrada hasta que un patrón pueda ser reconocido, o bien en usar otros métodos más sofisticados que incluyen la inserción, borrado, sustitución de un carácter en la entrada o el intercambio de dos caracteres consecutivos.

Clases Clave en la Implementación de un Analizador Léxico

Clase Lexer

Su responsabilidad es leer caracteres del archivo de entrada (donde se encuentra la cadena a analizar), reconocer lexemas y retornar tokens luego de ejecutar las traducciones necesarias.

Clase YYLexerTranslations

La responsabilidad principal de esta clase consiste en ejecutar las traducciones cuando son invocadas por la clase Lexer.

Clase Symbol

Esta clase se utiliza para definir el tipo de los tokens.

Grupo de Clases del Usuario

Este grupo contiene las clases definidas por el usuario, las cuales generalmente participan en la traducción. Su responsabilidad es proveer las estructuras de datos y funcionalidades necesarias para llevar a cabo las traducciones. Este grupo puede existir o no, según las necesidades del usuario.

Entradas relacionadas: