Crear un tokenizador de expresiones matemáticas en JavaScript es un paso clave para construir intérpretes y compiladores sencillos que luego pueden crecer en complejidad. En esta guía aprenderás a descomponer una cadena que contiene una operación numérica en una secuencia de tokens bien definidos, la base para evaluar, transformar o analizar cualquier fórmula.
Qué es tokenizar Una expresión como 3.5*(2+x)-sin(0.5) se recorre de izquierda a derecha y se convierte en piezas atómicas llamadas tokens. Cada token tiene un tipo y un valor, por ejemplo Numero 3.5, Operador *, Parentesis (, Identificador sin. Con esta secuencia es mucho más fácil construir un analizador sintáctico y, más adelante, un evaluador seguro y extensible.
Tipos de token habituales Numero enteros y decimales con punto. Operador símbolos como + - * / ^ %. Parentesis apertura y cierre. Identificador nombres de variables y funciones como x o sin. Coma separador de argumentos. Espacio en blanco se ignora. Opcionalmente puedes añadir Constante para pi o e.
Patrones recomendados Numero ^(?:[0-9]+(?:\.[0-9]+)?|\.[0-9]+). Identificador ^[A-Za-z_][A-Za-z0-9_]*. Operador ^[+\-*/^%]. Parentesis ^[()]. Coma ^,. Espacio ^\s+. Estos patrones se prueban en el orden adecuado para evitar ambigüedades, por ejemplo probar Numero antes que Operador para no confundir el signo decimal con otro símbolo.
Algoritmo paso a paso 1 inicializa indice i en 0 y una lista vacía. 2 mientras i sea menor que la longitud de la cadena, intenta casar un patrón en la posición i. 3 si casa Espacio avanza la longitud del espacio y no generes token. 4 si casa Numero crea token Numero con el lexema leído. 5 si casa Identificador crea token Identificador. 6 si casa Parentesis u Operador o Coma crea el token correspondiente. 7 si no casa nada lanza un error indicando el carácter y la posición. 8 complejidad lineal O(n) si se consume cada lexema una sola vez.
Ejemplo de salida para 3.5*(2+x)-sin(0.5) seria Numero 3.5, Operador *, Parentesis (, Numero 2, Operador +, Identificador x, Parentesis ), Operador -, Identificador sin, Parentesis (, Numero 0.5, Parentesis ). Con estos tokens ya puedes construir un analizador descendente o usar la clásica conversión a notación polaca inversa con el algoritmo del patio de maniobras.
Extensiones útiles Soporte de notación científica como 1.2e-3. Detección de signos unarios para manejar -x y +x como operadores de aridad uno. Tabla de funciones y constantes configurables. Mensajes de error con contexto mostrando rango de caracteres. Normalización regional para usar siempre punto como separador decimal.
Por qué importa Un buen tokenizador separa responsabilidades y facilita pruebas unitarias, validación de entrada y seguridad. Es la puerta de entrada a evaluadores rápidos, motores de reglas, generadores de código y hasta pequeñas DSL que puedes integrar en tus productos de software.
En Q2BSTUDIO desarrollamos soluciones de alto rendimiento y calidad profesional, desde aplicaciones a medida y software a medida hasta plataformas con inteligencia artificial, agentes IA e IA para empresas. También ofrecemos ciberseguridad y pentesting, servicios cloud aws y azure, automatización de procesos, servicios inteligencia de negocio y analítica con power bi, todo integrado de extremo a extremo para acelerar tu hoja de ruta tecnológica.
Si quieres convertir este tokenizador de JavaScript en un evaluador robusto, o integrarlo en un motor de reglas, un sistema de reporting o una API segura, nuestro equipo puede ayudarte con arquitectura, pruebas, despliegue y observabilidad, llevando tu idea desde el prototipo hasta producción con prácticas modernas y foco en escalabilidad y mantenimiento.