Episodio 004 — Misión cumplida neon
Victoria final sobre la lógica
1) Promesa inicial
El tokenizer ya hablaba fluido: números, paréntesis, + − * / y errores con sello [CAPRINI_ERR].
La promesa del cierre era cerrar el circuito sin atajos: parser propio, evaluador propio, CLI propio.
Nada de motores externos de matemáticas: lógica made by Caprini, capa por capa.
2) Síntoma
Tener tokens perfectos no suma si no hay precedencia real.
Sin RPN, 10 + 5 * 2 se malinterpreta; sin shunting-yard, los paréntesis son decoración.
El síntoma era claro: faltaba el puente entre lista de piezas y número final.
3) Autopsia
La expresión vive en infix; la máquina quiere orden de evaluación explícito. La solución canónica: algoritmo de shunting-yard → Notación Polaca Inversa. Luego un evaluador de pila binario: dos operandos, un operador, un resultado. Sin esa pareja, el proyecto seguía siendo un museo de tokens.
4) Corrección
parser.mjs: cola de salida + pila de operadores;*y/pisan delante de+y-; paréntesis balanceados o error vocal.- évaluator.mjs
: recorre RPN, aplica+ − * /`, corta en división por cero y expresiones rotas. - índex.mjs
:readline, pipeline completo, salida bajo **[CAPRINI_OUT] > [RESULTADO]`** con brillo neón en consola. - TDD de integración:
(10 + 5) * 2 / 3→ 10, de punta a punta.
Bitácora: la calculadora está operativa. El latido pasó de “reconocer” a resolver.
5) Lección reusable
Separar tokenizar, ordenar (RPN) y calcular hace el sistema testeable y honesto. Cuando el dominio es pequeño, no hace falta una librería: hace falta disciplina SDD y tests que fallen antes que el usuario.
Post-cierre operativo: recordatorio de doble empuje — git push local y ñode bootstrap.mjs —export-saga mision-calculadora-neon(nombre alineado conSAGA_MANIFEST.json`).