Análisis Léxico
El analizador léxico, también conocido como scanner, lee los caracteres uno a uno desde la entrada y va formando grupos de caracteres con alguna relación entre sí (tokens), que constituirán la entrada para la siguiente etapa del compilador. Cada token representa una secuencia de caracteres que son tratados como una única entidad.
Un Analizador Léxico (o analizador lineal) transforma la secuencia de símbolos de entrada en una secuencia de componentes (símbolos) léxicos sobre la cual es mas fácil hacer luego el análisis sintáctico. El A.L. lee caracteres de entrada y los agrupa en secuencias que tienen significado dentro de la estructura sintáctico del lenguaje fuente.
Un analizador léxico es un traductor que actúa en la primera fase de un proceso de compilación.
Para iniciar en la construcción de un analizador léxico o primero que realizamos es:
1. Definición de todas las palabras reservadas o también lo llamamos lenguaje, a esto le agregamos todos los caracteres separadores, es decir el caracter inmediato que puede existir luego de esta palabra por ejemplo si tengo el lenguaje:
L= { if, (, ), for }, estas palabras reservadas de C++.
if, sus separadores serán: espacio, (, tabulador, enter
(, sus separadores son muchos: identificadores, numeros, (, espacio, tabulador, etc..
esto se debe hacer con cada una de las palabras reservadas.
2. Construcción del autómata en base a las palabras reservadas:

El número negativo colocado a final, es el token, es decir lo que me va a dar como resultado el léxico al reconocer una palabra, esto puede ser un conjunto de caracteres o número negativos.
3. Construcción de la tabla de transiciones

Esta tabla representa el movimiento del autómata, y ya se puede hacer implementación para reconocer las palabras. Si embargo es necesario realizar un proceso de compactación de tablas.
Espero sus comentarios




Según lo que entiendo, la tabla de símbolos que se muestra en el post es solamente para validar palabras reservadas. Ya que si se analiza una cadena, por ejemplo: “forif” según lo que se muestra en la tabla de símbolos esto nos arrojaría un error. Mi pregunta es ¿cómo puedo llenar la tabla de símbolos, si a la cadena que ingresé “forif”, la quiero considerar como identificador?.
Desde ya agradezco su respuesta
Efectivamente la tabla y todo el ejercicio resuelve el lenguaje planteado al inicio L= { if, (, ), for },, si se desea reconocer identificadores se deberia incrementar una expresión regular que los defina, asi como la complementación del autómata con dicha expresión y la agregación de siímbolos adicionales que se permiten en los identificadores. La tabla finalmente reconoce lo que colocamos en el autómata, cuando se maneja identificadores existen elementos que no se pueden colocar en el autómata pero tienen que representarse en la tabla´.
Espero haber respondido, aunque no es un tema muy sencillo de explicar en palabras.
Aclarar que en otros contextos los famosos ‘tokens’ son denominados ‘lexemas’
He leido la explicacion rapidamente y, como ya he estudiado un poco el tema, me ha servido para ampliarme un poco los conocimientos, por ejemplo, lo de la tabla de transiciones es nueva para mí. Me parece que la explicacion está un poco compleja y que habría que extenderla para facilitar la comprensión del proceso.
OK, tomeré en cuenta tu comentario, muchas gracias, realizaré otro post aclarativo