Necesitaba matemáticas de fechas en fórmulas, así que construí un compilador (y aprendí mucho)

Construye un compilador especializado en cálculos matemáticos de fechas de forma rápida y eficiente. Optimiza tus tareas con esta herramienta personalizada.

19 nov 2025 • 4 min de lectura • Equipo Q2BSTUDIO

Construí un compilador para matemáticas de fechas

Necesitaba matemáticas de fechas en fórmulas, así que construí un compilador y aprendí mucho. En mi empresa Q2BSTUDIO, especializada en aplicaciones a medida y software a medida, nos surgió un requisito claro: Marketing quería crear y editar la lógica de precios sin depender de desarrolladores. Lo habitual de almacenar fórmulas en la base de datos y evaluarlas en tiempo de ejecución ya no bastaba; necesitábamos un editor visual que trabajara sobre un lenguaje que pudiéramos controlar.

Al principio probamos librerías existentes como expr-eval. Buena librería, pero tenía dos problemas críticos para nuestro caso: no entendía fechas y no exponía un AST útil para construir un editor visual. El requisito real era poder escribir expresiones del tipo paymentDate < NOW() + FROM_DAYS(7) y manipular esas fórmulas como árboles en una interfaz no code.

Diseñé un lenguaje pequeño llamado littlewing escrito en TypeScript y ya en producción. Las decisiones de diseño surgieron pensando en el editor visual: un solo tipo de dato number para simplificar runtime, AST y la UI; tratar las fechas como números para que operaciones como NOW() + FROM_DAYS(7) funcionen con suma normal; y exponer el AST desde el primer día para que el editor pueda construir, transformar y serializar fórmulas con facilidad. También añadimos un sistema de overrides para variables por defecto que luego el runtime puede sustituir según contexto.

No soy ingeniero de compiladores por formación. Soy desarrollador autodidacta con más de una década construyendo aplicaciones web. Lo que me permitió avanzar fue un enfoque práctico: una especificación clara, necesidad de negocio real y plazo estricto. Para acelerar el trabajo hice pair programming con IA, usando la herramienta como un compañero que genera lexer, parser y pruebas, mientras yo tomaba las decisiones de diseño, optimización y compatibilidad con la UI.

Para el parsing aprendí y apliqué parsing Pratt, que resulta sorprendentemente directo para expresiones con precedencia de operadores. La idea esencial se puede resumir como parseExpression con parada según precedencia, parsePrefix para prefijos y parseInfix para operadores infijos. En pocas decenas de líneas ya parseábamos expresiones anidadas, operadores unarios, ternarios y llamadas a funciones.

En lugar de representar el AST con objetos grandes, opté por tuplas compactas como [tipo, nodoIzquierdo, operador, nodoDerecho]. Esa representación es más pequeña, más rápida y más sencilla de manipular desde una UI en React, donde crear y transformar nodos es una operación frecuente. El patrón de inspección es simple y eficiente.

Rendimiento y operativa en producción fueron claves. Partimos de un lexer cursor based que evita allocations de substring, visitantes de AST que minimizan la recursión, y cuidados para reducir la presión del GC. Para casos donde una misma fórmula se evalúa miles de veces por petición añadimos un JIT opcional que convierte el AST a código JavaScript con new Function para obtener aceleraciones de alrededor de 22× en fórmulas pequeñas y hasta 97× en fórmulas pesadas. El coste es la compilación inicial, por eso se activa solo cuando compensa.

El aporte de la IA fue acelerar tareas repetitivas: generar boilerplate, proponer tests, explicar técnicas difíciles y recordarme casos borde. Mi trabajo fue diseñar la semántica, decidir las estructuras de datos, perfilar, refactorizar y asegurar calidad. La IA no sustituyó la responsabilidad ni la revisión humana; la convirtió en un multiplicador de productividad.

Lo que aprendí es aplicable más allá de un compilador: tokenizar cadenas, construir árboles y recorrerlos son las piezas esenciales. No abstracciones prematuras, código simple que se pueda perfilar y mejorar, y diseñar pensando en la extensión hacia herramientas no code. Si tu empresa necesita llevar lógica de negocio a usuarios no técnicos, esta aproximación funciona.

En Q2BSTUDIO ayudamos a empresas a llevar estas ideas a producción, creando soluciones de desarrollo de aplicaciones a medida y soluciones de inteligencia empresarial. También ofrecemos servicios de inteligencia artificial para empresas, agentes IA, integraciones con Power BI y proyectos que combinan seguridad, cloud y automatización.

Palabras clave que aplicamos en nuestros proyectos: aplicaciones a medida, software a medida, inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, ia para empresas, agentes IA y power bi. Si te interesa un editor visual de fórmulas, un motor de reglas o una arquitectura segura y escalable en la nube, podemos ayudarte a diseñarlo e implementarlo.

Si quieres probar littlewing localmente escribe npm install littlewing y utiliza evaluate con un contexto por defecto para experimentar con expresiones de fechas y lógica de precios. En Q2BSTUDIO combinamos experiencia en desarrollo, IA, ciberseguridad y servicios cloud para llevar tus ideas a producción sin sorpresas.

Resumen final: no se trató de construir un compilador por gloria académica, sino de empoderar a equipos no técnicos para crear lógica de precios. La IA fue la herramienta que nos permitió entregar en plazo, pero el valor vino del diseño, las decisiones de ingeniería y la integración con la experiencia de producto. Si necesitas ayuda para un proyecto similar, desde software a medida hasta seguridad y servicios cloud aws y azure, en Q2BSTUDIO estamos listos para colaborar.

¿UNA PAUSA?

Juega un momento antes de irte

NUESTROS SERVICIOS

Cómo podemos ayudarte

¿Tienes un proyecto en mente?

Cuéntanos tu visión y la convertimos en una solución de software. Sea cual sea el alcance, hacemos realidad tu idea.