Wie verwende ich Expression-Bäume in PHP?

expression-trees php

Frage

Ich mache gerade ein PHP-Programm, das Gleichungen löst. Ich habe die Eingangsgleichung in ein Array aufgeteilt, so dass jede Zeile im Array einen Begriff enthält. (So. [0] = "+ 5x", [1] = "=", [2] = "-5", [3] = "+10". Dies ist nur eine grundlegende Gleichung. Das Skript teilt auch was ist in () in Sub-Arrays, also zum Beispiel 2x + (5-3x) = 3 (x + 1) [0] = "+ 2 * x", [1] = Array ([0] = "+5" ....

Ich habe jedoch Ausdrucksbäume gefunden, die in diesem Gleichungslöser perfekt sind. Ich habe das ganze Internet durchsucht, um es zu lernen, aber ich kann keine Webseiten finden, die es in PHP erklären (ich kenne PHP OOP.). Es gibt viele Seiten, die sie zum Beispiel in C erklären, aber da ich nur PHP kenne, hilft das nicht, weil ich den Beispielcode nicht verstehe.

Kann jemand hier alles über Expression-Bäume in PHP und einige praktische Beispiel-Code erklären?

Akzeptierte Antwort

Hier ist der beschriebene Algorithmus . Sie können dies in PHP implementieren. Ich glaube nicht, dass irgendjemand dies bereits in PHP implementiert hat (und es als Open Source verbreitet)

Ein Beispiel wäre:

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

Woher:

  • * = Priorität 2
  • + = Priorität 1
  • ( = erhöht die Priorität der Zeichen um 10
  • + (zweites +) = Priorität 11
  • ) = wird die Priorität der Zeichen um 10 verringern
  • = = in diesem Fall zeigt es, dass es einen anderen Ausdruck gibt (0)

Die höchste Priorität ist die wichtigste - diejenige, die Sie zuerst tun müssen

Mit diesen Regeln können Sie einen Ausdrucksbaum erstellen ...

Also ... eine Art, in der Sie den Ausdruck erstellen und dann interpretieren müssen, ist:

2 x * 3 5 * + 6 9 + -

Erklärt:

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

Ich erinnere mich nicht genau, wie ich einen Baum schreiben sollte. Ich machte das in einem Kurs in Informatik, aber es war in etwa so:

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

Jetzt müssen Sie dafür einen eigenen Interpreter erstellen. Sie können das Interpreter-Muster verwenden: PHP-Interpreter


Beliebte Antwort

Ich habe einen Ausdrucksbaum in PHP erstellt, der mathematische Ausdrücke analysiert und versucht, das Problem zu lösen. Sie finden die Quelle hier http://codehackit.blogspot.com/2011/08/expression-parser-in-php.html

Ich erkläre so ziemlich alle Details in diesem Blogpost, aber wenn Sie irgendwelche Zweideutigkeiten finden, fragen Sie einfach hier;)

Prost, hoffe es hilft oder inspiriert zumindest



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow