- Victor Alejandro Buendia Henao
- Juan Sebastián valencia Uribe
- Jose David Marin Este proyecto es un analizador léxico (lexer) escrito en Python. Su función es tomar un fragmento de código fuente y descomponerlo en tokens, que son las unidades fundamentales del lenguaje.
-
UTP_lexer.py: Este archivo descompone el código en tokens usando expresiones regulares, manejando identificadores, operadores y literales. ¡También detecta errores como caracteres ilegales! 🧐
-
UTP_parser.py: Se encarga de organizar los tokens en estructuras lógicas y generar nodos AST que representan el código en un formato más comprensible para la máquina. 🎯
-
UTP_AST_nodes.py: Aquí es donde definimos los diferentes nodos del AST que representan operaciones como literales, declaraciones de variables, operaciones binarias, y más. 💡
-
UTP_error_handler.py: Administra los errores que se encuentran durante el análisis del código y los muestra de manera clara y comprensible. ❌
- Soporta palabras reservadas como
var,if,while,return, etc. - Identifica operadores (
+,-,*,<=,==, etc.) - Reconoce identificadores, números enteros, flotantes y caracteres
- Soporta comentarios de línea (
//) y de bloque (/* ... */) - Ignora espacios en blanco
- Detecta caracteres ilegales
El lexer analiza código como este:
var x = 10;
if (x >= 5) {
print(x);
}
El código anterior se convierte en la siguiente lista de tokens:
Token(type='VAR', value='var', lineno=1)
Token(type='ID', value='x', lineno=1)
Token(type='ASSIGN', value='=', lineno=1)
Token(type='INTEGER', value='10', lineno=1)
Token(type='SEMI', value=';', lineno=1)
Token(type='IF', value='if', lineno=2)
Token(type='LPAREN', value='(', lineno=2)
Token(type='ID', value='x', lineno=2)
Token(type='GE', value='>=', lineno=2)
Token(type='INTEGER', value='5', lineno=2)
Token(type='RPAREN', value=')', lineno=2)
Token(type='LBRACE', value='{', lineno=2)
Token(type='PRINT', value='print', lineno=3)
Token(type='LPAREN', value='(', lineno=3)
Token(type='ID', value='x', lineno=3)
Token(type='RPAREN', value=')', lineno=3)
Token(type='SEMI', value=';', lineno=3)
Token(type='RBRACE', value='}', lineno=4)
Para ejecutar el lexer, simplemente corre el script en Python:
python lexer.pySi dentro del código fuente hay caracteres ilegales, el lexer los detecta y muestra un error. Por ejemplo, si el código contiene var b = @20;, la salida incluirá:
Línea 2: Error - Caracter ilegal '@'
El lexer usa expresiones regulares para identificar distintos tipos de tokens. Los pasos clave son:
- Definir los patrones de tokens en
TOKEN_SPECpara categorizar su clase. - Crear una expresión regular combinada.
- Usar
re.finditer()para recorrer el código fuente y generar una lista de tokens. - Ignorar espacios en blanco y comentarios.
- Detectar errores de caracteres ilegales.
- Es un lexer básico, no un parser y mucho menos un compilador completo. No verifica la sintaxis completa, solo descompone el código en tokens.
- Se puede ampliar fácilmente agregando más palabras clave u operadores como por ejemplo el uso de un token CLASSES.