¿Cómo usar árboles de expresiones en PHP?

expression-trees php

Pregunta

Actualmente estoy haciendo un programa PHP que resuelve ecuaciones. He dividido la ecuación de entrada en una matriz para que cada línea en la matriz contenga un término. (So. [0] = "+ 5x", [1] = "=", [2] = "-5", [3] = "+10". Esta es solo una ecuación básica. La secuencia de comandos también divide lo que está en () en subarreglas. Por ejemplo, 2x + (5-3x) = 3 (x + 1) [0] = "+ 2 * x", [1] = array ([0] = "+5" ....

Sin embargo, descubrí árboles de expresión que es lo perfecto para usar en esta resolución de ecuaciones. He buscado en todo el Internet para aprenderlo, pero no puedo encontrar ningún sitio web que lo explique en PHP (sé PHP OOP). Hay muchas páginas que los explican, por ejemplo, en C, pero como solo conozco PHP, no sirve de nada, porque no entiendo el código de ejemplo.

¿Puede alguien aquí explicar todo sobre los árboles de expresiones en PHP y algún código práctico de ejemplo?

Respuesta aceptada

Aquí está el algoritmo descrito. Puedes implementar esto en PHP. No creo que nadie haya implementado esto en PHP (y lo distribuya como fuente abierta)

Un ejemplo sería:

2*x+3*5-(6+9) = 0

Dónde:

  • * = prioridad 2
  • + = prioridad 1
  • ( = aumentará la prioridad de los signos en 10
  • + (segundo +) = prioridad 11
  • ) = disminuirá la prioridad de los signos en 10
  • = = en este caso está mostrando que hay otra expresión (0)

La prioridad más alta es la más importante: la que debe hacer primero.

Usando estas reglas puedes crear un árbol de expresiones ...

Entonces ... una forma en la que tienes que crear la expresión y luego interpretarla es:

2 x * 3 5 * + 6 9 + -

Explicado:

  • 2 * x | (1)
  • 3 * 5 | (2)
  • (1) + (2) | (3)
  • 6 + 9 | (4)
  • (3) - (4) = final

No recuerdo exactamente cómo escribir un árbol. Hice esto en un curso de Informática, pero fue algo como esto:

                                     -
                                /         \
                                E         (E)
                                |          +
                                +         / \
                             /    \      6   9
                            E      E        
                            |      |    
                            *      *
                           / \    / \    
                          T   E   T  E
                          |   |   |  |
                          2   T   3  T
                              |      |
                              x      5

Ahora tienes que crear tu propio intérprete para esto. Puedes usar el patrón de intérprete: PHP Intérprete


Respuesta popular

Construí un árbol de expresiones en PHP que analiza las expresiones matemáticas y trata de resolver el problema. Puede encontrar la fuente aquí http://codehackit.blogspot.com/2011/08/expression-parser-in-php.html

Explico bastante todos los detalles en esa publicación del blog, pero si encuentra alguna ambigüedad, pregunte aquí;)

Saludos, espero que ayude o al menos inspire.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow