Generar un Árbol de Expresión
He creado una clase llamada ArbolExpresion que tiene la siguiente forma:
y para ingresarle una expresion como:
lo hago de la siguiente manera:
Asta aquí todo perfecto pero el problema que tengo es cuando quiero que la expresión que se ingrese al árbol sea una expresión que un usuario haya ingresado.
¿Alguien tiene idea de cómo puedo hacerlo?
Esta clase forma parte de un proyecto para un compilador que estoy haciendo.
- Inicie sesión o regístrese para enviar comentarios
Si, tienes que parsear la
Si, tienes que parsear la entrada, convertila en tokens, aplicarle reglas y mientras se las aplicas generar estos árboles.
¬¬
Creo que no será de mucha ayuda lo que te escribí, pero así es.
Gracias por responder, ya
Gracias por responder, ya tengo los tokens, los cuales son obtenidos de la entrada del texto y después son enviados a un Analizador Léxico que verifica que los tokens pertenescan al lenguaje y después llamo al Analizador Sintactico que verifica que los tokens estén en orden correcto y esas cosas, pero no entiendo en que momento y como se pueden generar los árboles.
Me podrías ayudar un poco más o recomendarme algún enlace donde se explique como hacerlo.
El analizador sintáctico debe
El analizador sintáctico debe de estar a esta altura recibiendo "algo", ese "algo", tiene ya información suficiente para caminar crear esta arbol.
Todo depende de como se vea ese algo, debe de ser otro árbol a esta altura. Lo que habrías de hacer es ver que información tiene ese algo y como está estructurado para "recorrerlo" y crear el arbol mientras lo recorres.
Como se ve el código del analizador sintáctico?
Saludos.
En el Analizador Sináctico no
En el Analizador Sináctico no recibo un árbol, recibo un conjunto de tokens que pertenecen a una sentencia y están dentro de un
lo que tengo en clase es un Grafo de estados con métodos como este tipo:
la clase token tiene está forma:
¿Cómo podría hacerle para ir generando el Arbol de Expresion a partir de este conjunto de tokens?
Algoritmo Shunting-yard
He aquí un procedimiento:
Teniendo la siguiente expresión:
Separa en tokens.
Convierte a notación posfija utilizando el algoritmo Shunting-yard (inventado por Edsger W. Dijkstra):
Crea el árbol (mediante algún procedimiento recursivo), p.ej.:
¡Ya puedes hacer lo que quieras con el árbol!, p.ej.:
¡Por si sirve de algo!
~~~