Necesité ayuda para crear árboles personalizados con una expresión aritmética. Digamos, por ejemplo, introducir esta expresión aritmética:Analizando una expresión aritmética y construyendo un árbol en Java
(5+2)*7
El árbol de resultados debe ser similar:
*
/\
+ 7
/\
5 2
tengo algunas clases personalizadas para representar los diferentes tipos de nodos, es decir PlusOp, LeafInt, etc. No necesito evaluar la expresión, simplemente creo el árbol, entonces puedo realizar otras funciones más tarde. Además, el operador negativo '-' solo puede tener un hijo, y para representar '5-2', debe ingresarlo como 5 + (-2).
Se requerirá alguna validación sobre la expresión para asegurar que cada tipo de operador tenga el no correcto. de argumentos/niños, cada corchete de apertura va acompañado de un corchete de cierre.
Además, probablemente debería mencionar que mi amigo ya ha escrito un código que convierte la cadena de entrada en una pila de tokens, si eso va a ser útil para esto.
Agradecería cualquier ayuda. Gracias :)
(He leído que puedes escribir una gramática y usar antlr/JavaCC, etc. para crear el árbol de análisis sintáctico, pero no estoy familiarizado con estas herramientas o con la escritura de gramáticas, así que si esa es tu solución, Le agradecería si pudiera proporcionar algunos útiles tutoriales/enlaces para ellos.)
Debo agregar que también haré algo similar para las expresiones lógicas (por ejemplo, ¬A V B). – ChocolateBear
Vea mi respuesta de SO sobre cómo construir un analizador de descenso recursivo, que es realmente fácil para las expresiones. Esa respuesta se vincula con un segundo, que muestra cómo construir árboles con un analizador así. http://stackoverflow.com/questions/2245962/is-there-an-alternative-for-flex-bison-that-is-usable-on-8-bit-embedded-systems/2336769#2336769 –