
Analizador léxico
La primera fase de un compilador es la lexica, se encarga de leer un programa fuente ya sea escrito en cualquier lenguaje de programación de tu preferencia. Su primer funcion del analizador lexico es leer los caracteres de entrada y generando como salida una secuencia de componentes léxicos que el analizador sintáctico utiliza para el análisis. Por lo general, esta interacción se implementa convirtiendo el analizador léxico en una subrutina o corrutina del sintáctico, se lee los caracteres de entrada hasta que pueda distinguir el siguiente componente léxico. Otro propósito es vincular los mensajes de error del compilador con el código fuente del programa, al recibir el codigo fuente el analizador lexico los divide en tokens, los tokens son referimos es el elemento mas pequeño de un programa que es significativo para un compilador. los tokens son fichas digitales que pueden representar muchas cosas diferentes en el mundo digital. algunos de los tokens utilizados son: palabras claves, identificadores, operadores como: ] ( ) { } , ; : ... * = # ! % ^ & – + | ~ \ ' " < > ? . / y caracteres de puntuacion. En la imagen 2.1 vemos unas lineas de codigo, al pasar la fase lexica se divide el programa en tokens valorarlo uno por uno, para entender los tokens en programacion es como aprender un alfabeto de un nuevo idioma.
fuente: pFunción del Analizador Léxico. (s. f.). https://cidecame.uaeh.edu.mx/lcc/mapa/proyecto/libro32/21_funcin_del_analizador_lxico.html
Para entender mas sobre el tema de los tokens, necesitamos una tabla de simbolos que nos ayudan a valor los tokens que entran al analizador lexico. Una tabla de símbolos es una estructura de datos que asigna nombres a atributos. Los nombres son los identificadores que se utilizan en el código fuente, como variables, funciones, clases y constantes. Los atributos son las propiedades que describen los nombres, como su tipo, ámbito, valor, ubicación y tamaño. Como se muestra en la imagen anterior se genero la tabla de simbolos, en la cual se mostrara un ejemplo de un compilador de un lenguaje que clasifique imagenes para dividir el programa fuente en la tabla de simbolos.
Código fuente generado en javascript:
import * as tf from '@tensorflow/tfjs';
import * as mobilenet from '@tensorflow-models/';
const commands =
LOAD_MODEL
CLASSIFY_IMAGE example.jpg
END`;
async function compileAndExecute(commands) {
const lines = commands.trim().split("\n");
let model = null;
for (let line of lines) {
const parts = line.trim().split(" ");
const command = parts[0];
const argument = parts[1];
switch (command) {
case "LOAD_MODEL":
console.log("Cargando el modelo...");
model =
model = aw
await mobilenet.load();
console.log("Modelo cargado exitosamente.");
break;
case "CLASSIFY_IMAGE":
if (!model) {
console.error("Primero debes cargar un modelo con LOAD_MODEL.");
return;
}
}
}
}
console.log(`Clasificando la imagen: ${argument}`);
const img = document.getElementById(argument);
const predictions = await model.classify(img);
console.log("Predicciones:", predictions);
break;
case "END":
console.log("Ejecución finalizada.");
return;
default:
console.error(`Comando no reconocido: ${command}`);
}
}
}
}
}
}
const imageHTML = `<img src="https://path/to/your/image.jpg" crossorigin="anonymous">`;
document.body.innerHTML += imageHTML;
compileAndExe
compileAndE
compileA
compileAndExecute(commands);
Acontinuacion se muestra la tabla de simbolos con todos los tokens generados del codigo fuente mostrado anteriormente:

El codigo generado en javascript clasifica las imagenes ingresadas mediante HTL, en la cual el compilador reconoce las imagenes procesadas y las compara, al tener el codigo generado Se muestra la tabla del programa dividido en tokens y en lexemas, ya que la tabla nos facilita a entender mejor como funciona la fase lexica al dividir el codigo fuente y validar cada uno de los tokens y verificar ya sea errores de sintaxis o semantico, en la cual se muestra la imagen 2.2 vemos la tabla de simbolos con los componentes lexicos del codigo fuente y con sus respectivo lexemas, para validar los tokens generados por el codigo fuente que se genero usaremos los automatas, definimos que un automata es un modelo matemático para una máquina de estado finito, en el que dada una entrada de símbolos, mediante una serie de estados de acuerdo a una función de transición (que puede ser expresada como una tabla). Esta función de transición indica a qué estado cambiar dados el estado actual y el símbolo leído.
para saber mas afondo de como funciona los automatas echa un vistazo a este video detallado: https://youtu.be/P0AxQvJcN2Q?si=5gfue8zfisCRiSew
A continuacion se mostrara el automata con su respectiva tabla de transicion.
Automata determinista
En este caso vamos a validar el programa fuente con un automata, ya que el codigo generado para clasificar imagenes ingresadas en la cual validaremos si el programa acepta los formatos JPEG y PNG, estos son los formatos más comunes que un navegador puede manejar mediante etiquetas HTML, Es importante comprender los temas afondo para poder entender cada una de las fases de un compilador ya que cada tema va de la mano para desarrollar tu propio compilador. En la imagen 2.3 vemos el automata elavorado con sus respectivos estados y los formatos que acepte el programa generado, el automata funciona de la siguiente manera:
- Si es j, transita a q2 para reconocer .jpg o .jpeg.
- Si es p, transita a q2 para reconocer .png.
- Para .jpg, busca g y transita a q3.
- Para .jpeg, continúa leyendo hasta llegar al final de la cadena.
- Para .png, busca g y transita a q3.

Tabla de transición
Al realizar la tabla de transición validamos los datos ingresados en el automata que nos ayuda a verificar cada dato que se genere, como vimos en el automata acepta los formatos .jpg, .jpeg y .png, se valida en la tabla pasando por todos los estados hasta llegar al estado de aceptacion que en este caso seria q4 que da por validado el dato ingresado, al ingresar un formato que no sea de imagen no podra llegar al estado final y no sera valido para el automata ya que no contada con el formato establecido. cada uno de los elementos establecidos nos ayuda a entender la fase lexica, pero ¿habra una herramienta para realizar un analizador lexico? que nos ayude a validar todo el proceso de una manera facil y en un lenguaje que conoces.
Herramienta para realizar un analizador léxico
Existen diversas herramientas y bibliotecas que facilitan la creación de analizadores léxicos. Estas herramientas están diseñadas para identificar y procesar tokens en un lenguaje fuente según las reglas definidas. La herramienta mas usada al generar lenguaje en C, un lenguaje que ya conocemos y se hara mas facil de entender, la herramienta flex funciona de la siguiente manera:
Flex (Fast Lexical Analyzer Generator)
- Herramienta ampliamente utilizada para crear analizadores léxicos.
- Se escribe un archivo de definición que contiene reglas léxicas en formato de expresiones regulares.
- Genera código C que realiza el análisis léxico.
- Ideal para: Proyectos en C/C++.
En la imagen 2.4 vemos un codigo en flex que genera un analizador lexico para clasificar imagenes ya que es viable y útil. Actúa como la primera etapa de un compilador que procesa comandos, valida la entrada y prepara datos para el análisis sintáctico o la ejecución. La herramientas como Flex simplifican esta tarea al manejar la identificación de patrones y generación de código base. Al crear un analizador léxico para un compilador que clasifique imágenes se realizará pero normalmente el analizador lexico generalmente procesan texto, se puede diseñar para interpretar comandos o instrucciones relacionadas con imágenes. Se enfocaría en identificar tokens como palabras reservadas, identificadores, extensiones de archivo, y comandos específicos.
Para saber como descargar flex consulta este video: Francisco Daniel Castro Chafoya. (2019, 20 octubre). Instalar flex y bison en windows [Vídeo]. YouTube. https://www.youtube.com/watch?v=_vIGlG09mn8