Vida Artificial

Investigación

Artículos

Autor

Otros

Nuevo Evaluador de Expresiones (Actualizado 05 de Marzo de 2009)

Una pieza fundamental en las simulaciones que he escrito es el evaluador de expresiones. Por lo general cuando yo ingreso una expresión matemática como "5+4*3", para el lenguaje de programación tan solo es un String, no significa nada mas. El evaluador de expresiones toma esa expresión guardada en un String, la interpreta y emite un resultado, que en el caso del ejemplo sería 17.

Desarrollé un evaluador de expresiones hace mas de una década cuando cursaba la carrera de Ingeniería de Sistemas. Y este ha sido el que he usado desde entonces. Pero ya con la experiencia obtenida en todos estos años pensé en volver a reescribir este código para darle mayor flexibilidad, romper varios límites y hacerlo mas veloz. Estos son los resultados.

Evaluador de expresiones antiguo (1993) Evaluador de expresiones (2005) Evaluador de expresiones (05 de Marzo de 2009)
Maneja 2 variables Maneja 26 variables. Maneja 26 variables
Maneja hasta 12 paréntesis. Maneja hasta 110 paréntesis. Ilimitado número de paréntesis
Las expresiones simples (sin uso de paréntesis) están limitadas a 30 operadores y operandos Limite de la expresión simple en 1000 caracteres Ilimitada tamaño de la expresión
Operadores son +, -, *, /, ^ Operadores son +, -, *, /, ^, % (división modular) Operadores son +, -, *, /, ^
Tiene seis(6) comprobaciones en la sintaxis Tiene nueve(9) comprobaciones en la sintaxis  
Ante un error matemático evalúa el resto de la expresión, pero aún así activa una variable tenida en cuenta en las simulaciones Ante un error matemático activa una variable de clase y toda la expresión es evaluada en cero. Ante un error matemático activa una variable de clase y toda la expresión es evaluada en cero.
Evalúa con precisión: double Evalúa con precisión float (menos preciso pero mas rápido) y double (mas preciso pero requiere mas tiempo). La versión Java. Evalúa con precisión float (menos preciso pero más rápido).
Descargar por motivos históricos (lenguaje C) Java: código fuente, de clic aquí (Mejorado: 21 de Septiembre de 2005)
C++: código fuente, de clic aquí  (Mejorado: 22 de Abril de 2007)

El  evaluador en C++ puede ser compilado en Windows y en Linux (no usa librerías MFC), además corrige fugas de memoria (memory leaks).

Se descartan todas las operaciones de string.h luego no hay límites en cuanto a cadenas.

Se descarta también la operación atof, se implementa una en línea.

    Manual de como se construyó la aplicación.
    Al trabajar con listas simples y doblemente enlazadas es ilimitado el número de paréntesis.
    En el desarrollo se ha cuidado de hacer el software lo mas rápido posible. Se ha chequeado que no tenga fugas de memoria.
    C++: código fuente + manual de desarrollo + manual de uso, de clic aquí para descargarlo 

El  evaluador en C++ puede ser compilado en Windows y en Linux (no usa librerías MFC).

 

1