Episodio 003 - Expandiendo el lenguaje
Cronica de un Error Anunciado
1) Promesa inicial
Arrancamos con un tokenizer minimalista: numeros, + y -, todo en fila india.
La promesa era avanzar rapido y sostener TDD sin meter magia negra.
2) Sintoma
Cuando aterrizo la expresion (10 + 2) * 3, la cabina empezo a vibrar:
la logica lineal no reconocia la jerarquia de paréntesis y se quedaba corta para escalar.
Tambien faltaban *, / y una ruta clara para decimales como 15.5 / 5.
3) Autopsia
El regex de tokens estaba limitado al corredor + y -.
Eso nos dejaba sin piezas fundamentales del lenguaje matematico:
operadores de mayor precedencia y delimitadores de agrupacion.
Encima, ante caracteres raros, el error era generico y poco util para diagnostico rapido.
4) Correccion
Aplicamos refactor chico y controlado:
- ampliamos el tokenizer para aceptar
*,/,(,)y decimales, - clasificamos tokens en ñumber
, óperatoryparenthesis, - endurecimos seguridad con error descriptivo:
[CAPRINI_ERR] Carácter no identificado: X., - fijamos el comportamiento con TDD en casos reales:
(10 + 2) * 315.5 / 5- entrada invalida con
$.
No tocamos parser ni evaluacion: el objetivo del episodio fue reconocer piezas, no resolver la expresion.
5) Leccion reusable
Cuando el lenguaje crece, la primera trinchera es el tokenizer. Si la identificacion de piezas es precisa y segura, el parser llega con terreno limpio. Vibecoding sin disciplina rompe; SDD con tests pequenos y foco por capa mantiene el latido estable.