← Volver a todos los proyectos

🧮 Reconocedor de Expresiones Matemáticas

Un proyecto enfocado en el desarrollo de un analizador léxico para reconocer, procesar y manejar operaciones matemáticas complejas.

📘 Introducción

El analizador léxico representa la primera etapa de un compilador, encargado de identificar errores y procesar los datos para avanzar a las siguientes fases. Este proyecto desarrolla un sistema que reconoce sistemas numéricos y utiliza expresiones regulares óptimas para cumplir con sus objetivos.

🎯 Objetivos

  • Reconocer valores numéricos de distintos sistemas de numeración.
  • Realizar conversiones entre sistemas numéricos.
  • Distinguir operadores aritméticos y signos de apertura/cierre.
  • Reconocer funciones matemáticas.
  • Implementar gramáticas para resolver operaciones básicas y avanzadas.
  • Guardar valores ingresados para reutilizarlos como en lenguajes de programación.

🔍 Descripción del problema

El usuario puede ingresar números que pertenecen a diferentes sistemas numéricos. El programa reconoce dichos sistemas, traduce las bases numéricas y distingue operadores aritméticos, signos de agrupación y funciones matemáticas mediante expresiones regulares.

📋 Sistemas Numéricos

Sistema Numérico Letra Reconocida Secuencias Válidas Ejemplos
Binario b | B [0-1] b"1111"
Ternario t | T [0-2] T"12"
Cuaternario c | C [0-3] c"22"
Quinario q | Q [0-4] -q"11"
Senario x | X [0-5] x"100"
Heptal s | S [0-6] s"21"
Octal o | O [0-7] o"7"
Nonario n | N [0-8] N"81"
Decimal [0-9] 100
Hexadecimal h | H [0-9a-fA-F] H"F"
Romano r | R r"mmmCCXIV"

Además, reconoce números decimales en cualquier sistema numérico, por ejemplo: b"111.11".

📐 Extensión de los Números romanos

Letra Valor Impresión
(n|N) 5,000
(o|O) 10,000
(p|P) 50,000
(q|Q) 100,000 ĉ
(r|R) 500,000
(s|S) 1,000,000
(t|T) 5,000,000
(u|U) 10,000,000
(w|W) 50,000,000
(y|Y) 100,000,000
500,000,000
1,000,000,000

Nota: Solo representa números romanos enteros; la parte decimal se omite.

📚 Zig & C

El proyecto utiliza Zig como orquestador principal, integrándose con código C generado por Flex y Bison. Zig proporciona seguridad de memoria y compilación fácil a WASM, permitiendo que la calculadora se ejecute en el navegador.

🔧 Ejecución del programa

El proyecto utiliza Zig como sistema de construcción. Primero, genera los analizadores léxico y sintáctico con Flex y Bison, luego compila con Zig:

lex reconocedor.l
yacc -d gramatica.y
zig build

O usa make para automatizar el proceso.

Para compilación WASM: make wasm

Requisitos: Flex, Bison, Zig 0.15.2 o superior.

�️ Prueba la Calculadora

Puedes probar la calculadora directamente en tu navegador usando nuestra terminal interactiva impulsada por WebAssembly.

Abrir Terminal Calculadora

�📊 Ejemplos de ejecución

Para preparar operaciones, utiliza la entrada y salida en archivos:

./math_app < entrada.txt > salida.txt
Entrada Salida