JavaCC

Me encontré hoy sin mucho que hacer. Mala cosa.

Ni siquiera desaforaron al Peje.

De hecho sí tengo que hacer; tengo que terminar de calificar la tarea 3 y preparar mi clase del jueves. Pero había logrado despertarme a las 5:00 AM para ir a correr, y decidí que me caería bien un “descanso”… o sea hacer lo que quisiera en la compu.

Busqué JLex y Cup, pensando en que añadiría las fórmulas quitapón a Maistro. Pero descubrí una cosa mejor: JavaCC. Es un generador de parsers, y está lo suficientemente sencillo de usar como para que consiguiera mi gramática para fórmulas de promedios en un par de horas.

La idea es que las fórmulas consisten de números (dobles en Java), funciones, y las cuatro operaciones básicas. Las funciones no tienen su dominio en los reales, sin embargo; su dominio son listas de reales (dobles en Java). Y sólo están definidas cinco funciones: avg, max, min, sum y len. Sólo hay una variable posible en las fórmulas: list, que es una lista de reales, y las funciones sólo trabajan con esta variable. Por supuesto, la lista puede ser de tamaño arbitrario.

Una fórmula válida, entonces, es algo de este estilo:

(sum(list)-min(list))/(len(list)-1)

Esta fórmula regresa el promedio de los reales en list, sin tomar en cuenta el menor. Es la fórmula que Elisa utiliza en sus cursos para sacar promedios; siempre quita la calificación más baja.

En Maistro por defecto la fórmula es avg(list), que sencillamente regresa el promedio de los valores de la lista. Pero ahora el usuario podrá añadir la fórmula que se le ocurra. No son terriblemente complicadas las fórmulas a utilizar, pero son lo suficientemente poderosas para hacer cosas interesantes.

Ahora sólo tengo que agregar la interfaz Web para que añadan fórmulas, para que validen que las fórmulas sean correctas, etc.

2 comentarios sobre “JavaCC

  1. Estoy realizando un analizador en JavaCC, de un lenguaje mini, y mi pregunta es la siguiente, cuando tú analizas la expresión y es correcta, ¿cómo puedes ejecutar lo analizado? Es decir, ¿cómo pasar a Java lo introducido para ser compilado y ejecutado?
    No sé si expresé mis preguntas con claridad.
    Un saludo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *