Evaluador de expresiones aritmeticas (Java)

12 12 2008

Ya he elaborado la version 2 de este evaluador de expresiones.

Ups!! Hola!!, despues de una larga ausencia aqui estoy de nuevo reportandome, ya saben la vida como estudiante limita muchas cosas, pero ya esta por finalizar este semetre por no decir que ya «finalizo».

evaluadorExpresiones

Esta vez quiero compartir con ustedes uno de mis pequeños proyectos de Programacion, un evaluador de expreciones aritmeticas que es capaz realizar suma, resta, multiplicacion, divicion, potencia y modulo, con sus respectivo orden de prioridad asignado por los operabdos o por parentesis.

Lo primero que hace este programa es un analisis lexico y gramatical de la expresion, si la expresion contiene algun error, lanza un mensaje informando al usuario de dicho error, controla la prioridad de las operaciones y tambien la de los parentesis, de acuerdo al contexto de la expresion a evaluar crea su arbol sintactico, este evaluador esta basado en el patron de diseño interprete.

Como algo extra, genera el codigo en ensamblador para la expresion dada, este codigo se basa en un archivo de cabezera que contiene las macros para cada una de las operaciones, las operaciones y parentesis se evaluan de acuerdo a su prioridad utilizando una pila. El archivo .asm se guarda en «C:\ProgSist».

Por que lo pidieron, aqui  el codigo.

Saludos!!! y comenten posibles mejoras…


Acciones

Information

35 responses

26 01 2009
kenshicu

men, parecido a ese proyecto me mandaron uno a mi,
tengo que hacerlo utilizando arbol binario.
dime si me puedes ayudar en eso
porque tengo la clase arbol binario pero es para trabajar
con enteros y no se como convertirla a string.

Salu2

27 01 2009
r4mfr3

@kenshicu
Tratare de ayudarte, solo dame mas detalles, ¿que es lo que tratas de convertir a String?.

31 03 2010
Veronica

Hola ayudame con el coigo en java para un evaluador de una expresion infija estoy desesperada xf te lo agradeceria un monton, intente descargar el que aparece allo pero no puedo, mas o menos lo q necesitos es un que evalue de izquierda a derecha y si el token es un ( se vaya a una pila operador y si es un numero a una de operandos…. Asta que sea toda evaluada y retorne solo un numero que q quede en la pila….. Xf..

30 01 2009
kenshicu

Mira lo que tengo que hacer es este mismo evaluador de expresions que publicas, pero tengo que utilizar la clase arbol binario, debe ser para convertir la expresion utilizando el recorrido postorder, el problema es que no me queda mucho tiempo para entregarlo. Lo que pasa es que acabo de empesar a estudiar arbol binario y me sueltan este proyecto sin tener muchos conocimientos de esta materia y se me ha ido el tiempo estudiandolo mas que haciendolo.

Ahora lo que comente que queria convertir a string es el arbol binario
para poder guardar en el no solo operandos sino los operandores tambien
pero en lo que estoy enfrascado ahora es en llevar la ecuacion que da el usuario a notacion infija para convertirla con el arbol binario a postfija y ya despues utilizando pilas hacer el calculo final.
no se si me explique bien
Si me puedes ayudar te lo agradecere

No veo aqui como descargar tu codigo fuente.

30 01 2009
kenshicu

Mira esto es lo que me piden hacer:
Árbol Binario: Construir un Editor de Expresiones. El mismo debe contener y cumplir con diferentes requisitos: serán permitidas sólo expresiones numéricas, sin variables, se aceptarán las operaciones matemáticas de suma (+), multiplicación (*), resta (-), y división (/) y se debe tener en cuenta los signos de agrupamiento paréntesis ( ) y corchetes [ ] en ese orden de prioridad. Se deberá comprobar que la expresión esté bien escrita, es decir, que no hayan expresiones que no sean las que se pueden resolver. Se dará como resultado la resolución de esta fórmula y tendrá que existir un buen nivel de interactividad con el usuario.

30 01 2009
r4mfr3

@ kenshicu
Ahora te entiendo mejor, mira yo puedo facilitarte el codigo fuente, pero en realidad utilizo otra tecnica para evaluar las expresiones matematicas ( no es la que tu me planteas ), esta tecnica se llama «patron interprete», y si uso un arbol, pero no es binario. Cada una de las ramas que se crean ( debido a la expresion de entrada ) se evaluan de manera recursiva ( primero las operaciones de mayor presedencia ), cada una de las evaluaciones ( valor numerico ) del nivel inferior es retornado al nivel inmediato superior.

Como puedes notar, la expresion matematica no es necesario tranformarla a notacion posfija, me haorro la memoria que necesitaria la pila que contendria la notacion posfija. El algoritmo de este evaluador toma la expresion tal cual ( en notacion infija, tal como la introduce el usuario ), la unica pila que se utiliza es la que requiere la recursividad, pero esa pila el mismo lenguaje de programacion se encarga de administrarla.

Para poder hacer todo esto se requiere primero que la expresion este bien escrita, para comprobar esto tengo una clase que se encarga de realizar un analisis lexico ( en esta parte se detectan errores de escritura en la expresion ), la cual retorna tokens a otra clase que construye el arbol sintactico (en esta parte se detectan los errores al evaluar la expresion, como por ejemplo la divicion entre cero ), ya teniendo el arbol sintactito, otra clase evalua de manera recursiva el arbol sintactico, y al final solo se retorna un tipo double que contiene el valor de toda la expresion.

Saludos…

31 01 2009
kenshicu

Ok man gracias por responder
aunque ya lo estoy armando con árbol binario
si me puedes mandar el código a mi e-mail mejor
para comparar algunos aspectos, y ver de cerca la técnica que utilizas

Saludos

17 01 2010
Milena

gracias por responderme cdo puedas revisa tu correo salu2

21 03 2009
Ghostf5

Muy buen post esto tambien me lo dejaron pero igual tengo q hacer mi arbol binario, sera que me podes mandar el codigo a mi correo.

Gracias

22 03 2009
Ivan

Que tal, fijate que acabo de ver y leer la descripcion de tu proyecto de evaluador de expresiones aritmeticas, pues en mi curso de lenguajes formales me dejaron como proyecto realizar un pequeño compilador de expresiones algebraicas, en la primera fase me piden el editor de texto y entorno grafico, asi como tambien el analizador lexico, realizado a travez de pilas, automata determinitico finito, similar al tuyo, ahora bien, si pudieras ayudarme con en las transiciones de estado (en la codificacion en java) ya que me esta costantdo mucho, solo tengo la interfaz grafica que me abre archivos de entrada pero no puedo realizar el analisis lexico.

23 03 2009
and1

disculpa como puedo descargar tu proyecto y si puedieras me falicitaras el codigo, como el otro amigo tambien estoy trabjando en un proyecto de arboles de analisis sintacticos, y necesito ejemplos para poder realizarlo, te lo agradeceria mucho

26 03 2009
KABRAKAN

HOLA PERDONA LA MOLESTIA PERO, ANDO ALGO DESESPERADO BUSCANDO AYUDA, NESECITO HACER ALGO SIMILAR A TU PROGRAMA PERO KE ME DIBUJE EL ARBOL SINTACTICO PODRIAS AYUDARME EN ESO? infiernomaya@hotmail.com

4 04 2009
Edgar

hola .. en estos momentos me encuentro realizando un compilador de «C» en java.

el compilador es de 2 pasadas asi que no llego a la ejecucion del codigo, en estos me encuentro realizando el editor, use un jtextpanel que me perminte colorear de diferentes colores diferentes partes del texto, esto lo uso para colorear las palabras reservadas .. bueno vamos al punto yo voy evaluando el codigo que introduce el usuario mientras lo escribe y quisiera evaluar las expresiones ya tengo una forma de hacerlo pero es un poco larga y fastidiosa .. me gustaria saber si me puedes facilitar la clase que evalua la expresion lexicamente .. para saber como lo hiciste tu y ver si me sirve para lo qe estoy haciendo. gracias

17 04 2009
the_man

Me puedes ayudar con un pequeño programita que tengo que hacer, este consiste asi: hacer que me devuelva el resultado de operaciones aritmeticas, si ingreso: 2+3-1/2*6, debe devolverme el valor de estas operaciones, HAy que hacerlo usando Arboles Binarios, y en lenguaje c++, tal vez puedas ayudarme, mandame cualquier cosa a este correo, adam_52fix@yahoo.es

18 04 2009
ralejanro

r4fr3,
que buen programa, me gustaria tener el codigo

21 04 2009
Rodrigo Moncada

Podría x favor facilitarme el código fuente, ya que me serviría de guía para una tarea ke tengo ke realizar; gracias de antemano.

24 04 2009
Sergio

Hola!! queria saber si me podias dejar el codigo porque ahora mismo estoy con una practica parecida y este codigo me podria ayudar mucho

24 04 2009
r4mfr3

Ya he puesto el link para descargar el codigo del evaluador de expresiones en java.

Saludos.

23 05 2009
marlon

parcero sera que me puede mandar el codigo funte que no se como descargarlo me serviria de mucho mi correao es marlondavidg@gmail.com

24 05 2009
avatar

Saludos me seria de gran ayuda que por favor me enviaras el link al correo para descargar el evaluador de expresiones aritmeticas y el codigo porque no lo veo en el sitio , mi correo es aga(arroba)uclv.edu.cu
Gracias.

26 05 2009
J()rg3

que tal como te va, te cuento que estaba revisando y no he encontrado el link donde esta el codigo…

1 06 2009
Nelson

men no esta el link, xfa subalo, para poder descargarlo.
Se le agradecería mucho!!

4 06 2009
tio

hola;
busco el link para descargar los archivos…

7 06 2009
e alfaro

no veo por ninguna parte el link de descarga

28 06 2009
Evaluador Expresiones Aritmeticas V2 « r4mfr3!!!

[…] 28 06 2009 Debio a los comentarios de personas a las cuales les intereso el proyecto del evaluador de expresiones, decidi retomarlo y agregarle algunos aspectos para acelerar el proceso de evaluacion, tambien le […]

30 07 2009
Camilo

Sin palabras! así me deja tu programa r4mfr3, finalmente llevaba semanas tratando de hacer una cosa parecida! asi q muchas gracias por contribuir al desarrollo de aplicaciones libres…

27 10 2009
gustav cast

he estado revisando tu codigo y me parece que esta bien organizado tambien he leido los post y creo que es presisamente a traves de los arboles binarios que tu codigo puede ser reducido y optimizado dramaticamente deberias retomar este proyecto con esa optica no importa que no publiques ningun codigo de todas formas es bueno saber que hay gente que no es envidiosa asi que por eso te escribo para que tengas apoyo y no solo peticiones jejeje gracias Dios te bendiga

6 11 2009
r4mfr3

@gustav cast
por que muchos buscan ayuda (y por un reto mio) de como construir un evaluador pero con arboles binarios, hace ya algun tiempo he estado dandole algunos retoques al codigo, de tal forma que este construya un arbol binario apartir de una expresion en formato posfijo derivado de la expresion original, pero por cuestiones de tiempo (mi escuela, tareas, trabajo y el servicio social) no he avanzado tan rapido, voy lento pero seguro.
Hasta donde tengo ya construyo el arbol de operandos y operadores (los puedo recorrer), checo la sintaxis de la expresion de forma lexica y gramatical para detectar errores antes de evaluar, bueno en fin solo me falta adaptar la parte de la evaluacion de los arboles, espero terminarlo pronto y en cuanto lo tenga lo compartire con ustedes (sera la V3).

Saludos, gracias por tu apoyo y el consejo.

19 11 2009
Zitro

Bueno muchas gracias por el código, tengo un proyecto algo similar solo me falta corregir algunos errores y tu codigo (muy completo por cierto) espero que me ayude a despejar las dudas q tengo.

Salu2

16 01 2010
milena

hola de nuevo kisiera ke le escribieras a kenshicu y le digas de mi parte ke me gustaria ver su proyecto para intercambiar palabras y ke me escriba por favor saludos espero tu respuesta ….

16 01 2010
milena

por favor enviame tu codigo fuente ke no puedo descargarlo dalu2222

16 01 2010
milena

nesecito el codigo fuente ke no puedo descargarlo ….

17 01 2010
kenshicu

Escribeme a

kenshicu[arroba]gmail.com

17 01 2010
r4mfr3

@milena

Revisa tu mail, respondiendo a tu peticion ayer te envie el codigo fuente de las dos versiones del evaluador de expresiones.

Saludos…

17 01 2010
r4mfr3

No puedo enviarte el codigo al correo que dejaste.

DNS Error: Domain name not found

El dominio de tu mail parece no existir.

Replica a Zitro Cancelar la respuesta