Análisis Léxico
Escribe código en el editor y pulsa Analizar o Ejecutar para ver los tokens aquí.
¿Qué es el análisis léxico?
El análisis léxico (también llamado lexing o scanning) es la primera fase de un compilador. Su trabajo es leer el código fuente carácter por carácter y convertir esas secuencias de caracteres en unidades significativas llamadas tokens.
El lexer actúa como traductor entre el texto plano del programador y el stream estructurado que el parser necesita. Sin el lexer, el parser tendría que lidiar directamente con caracteres, lo cual sería mucho más complejo.
¿Qué es un token?
Un token es la unidad léxica mínima con significado en el lenguaje. Cada token tiene:
- Tipo: la categoría del token (IDENTIFICADOR, LET, NUMERO, MAS, etc.)
- Lexema: la secuencia de caracteres exacta del código fuente
- Línea y columna: la posición en el fuente para mensajes de error precisos
Por ejemplo, para el código let x: number = 42;, el lexer produce:
Token(LET, "let", línea=1, col=1) Token(IDENT, "x", línea=1, col=5) Token(DOS_PUNTOS, ":", línea=1, col=6) Token(TIPO_NUMBER,"number", línea=1, col=8) Token(IGUAL, "=", línea=1, col=15) Token(NUMERO, "42", línea=1, col=17) Token(PUNTO_COMA, ";", línea=1, col=19)
¿Qué es un lexema?
Un lexema es la secuencia real de caracteres del código fuente que forma un token. Mientras el tipo de token es una categoría abstracta, el lexema es el texto concreto. Por ejemplo, el tipo es IDENTIFICADOR, pero el lexema puede ser nombreVar o factorial.
Buffering: el proceso de escaneo
El lexer escanea el código usando dos punteros sobre el buffer de entrada:
- inicio del lexema: marca dónde comenzó el token actual
- posición actual: avanza carácter por carácter
Esta técnica de two-buffer scheme es la base clásica descrita en "Compilers: Principles, Techniques, and Tools" (Aho, Lam, Sethi, Ullman).
Categorías de tokens en Slang
let, func, if, else, while, for, returnnumber, string, boolean, void42, 3.14, 0, 100"Hola", "mundo"true, falsesuma, nombreVar, factorial+ - * /< > <= >= == !=&& || !( ) { } ; : ,Errores léxicos
Un error léxico ocurre cuando el lexer encuentra un carácter que no pertenece a ningún token válido del lenguaje, o una secuencia que no puede completar un token reconocible.
- Carácter
@— no existe en Slang - Cadena sin cerrar:
"hola mundo - Número mal formado: el lexer reconoce decimales pero no
3..14
El lexer de Slang no aborta al encontrar un error. Registra el diagnóstico y continúa escaneando para reportar tantos errores como sea posible en un solo pase.