Comment utiliser les arbres d'expression en PHP?

expression-trees php

Question

Je suis en train de créer un programme PHP qui résout des équations. J'ai divisé l'équation d'entrée en un tableau de sorte que chaque ligne du tableau contienne un terme. (So. [0] = "+ 5x", [1] = "=", [2] = "-5", [3] = "+10". C’est juste une équation de base. Le script divise également ce est dans () dans les sous-tableaux. Ainsi, par exemple 2x + (5-3x) = 3 (x + 1) [0] = "+ 2 * x", [1] = tableau ([0] = "+5" ....

Cependant, j'ai découvert des arbres d'expression parfaitement adaptés à cette résolution d'équation. J'ai fait des recherches sur Internet pour l'apprendre, mais je ne trouve aucun site Web qui l'explique en PHP (je connais PHP OOP.). Il y a beaucoup de pages qui les expliquent dans C, par exemple, mais comme je ne connais que PHP, cela n’aide en rien, car je ne comprends pas le code de cet exemple.

Est-ce que quelqu'un ici peut tout expliquer sur les arbres d'expression en PHP et quelques exemples de code pratiques?

Réponse acceptée

Voici l'algorithme décrit. vous pouvez l'implémenter en PHP. Je ne pense pas que quiconque ait déjà implémenté cela en PHP (et le distribue en open source)

Un exemple serait:

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

Où:

  • * = priorité 2
  • + = priorité 1
  • ( = augmentera la priorité des signes de 10
  • + (second +) = priorité 11
  • ) = diminuera la priorité des signes de 10
  • = = dans ce cas, il montre qu'il existe une autre expression (0)

La plus haute priorité est la plus importante - celle que vous devez faire en premier

En utilisant ces règles, vous pouvez créer un arbre d’expression ...

Donc .. une façon dont vous devez créer l'expression puis interpréter est la suivante:

2 x * 3 5 * + 6 9 + -

A expliqué:

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

Je ne me souviens pas exactement comment écrire un arbre. J'ai fait ceci dans un cours d'informatique, mais c'était quelque chose comme ça:

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

Vous devez maintenant créer votre propre interprète pour cela. Vous pouvez utiliser le modèle d'interprétation: Interprète PHP


Réponse populaire

J'ai construit un arbre d'expression en PHP qui analyse les expressions mathématiques et tente de résoudre le problème. Vous pouvez trouver la source ici http://codehackit.blogspot.com/2011/08/expression-parser-in-php.html

J'explique à peu près tous les détails dans ce post de blog, mais si vous trouvez des ambiguïtés, posez-les ici;)

Salut, espérons que cela aide ou du moins inspire



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi