Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich möchte dem User die Möglichkeit geben, Script - Files anzulegen. In diesen kann er Bedingungen reinschreiben.
Zum Beispiel var1 > var2.
Kann ich dies irgendwie zur Laufzeit auswerten lassen? Oder muss ich das mühsam machen à la
Falls var1 im Ausdruck vorhanden, dann prüfe ob var2 im Ausdruck vorhanden, falls Vergleichszeichen = ">" etc.
So dass ich schlussendlich zig if Klauseln habe?
Ja das habe ich gesehen. Nur habe ich auch im Netz gesucht, es gibt X Parser aber ich habe nur welche gefunden um mathematische Ausdrücke zu parsen.
Ich will aber eigentlich mathematische und logische Operationen durchführen. Aber ich denke mit Benis Parser wurde mir viel Arbeit abgenommen und ich brauche ihn "nur" noch zu erweitern.
Wie komplex sollen die Ausdrücke denn sein? Für einfache Ausdrücke à la LHS x OPER x RHS kann man sich sowas recht schnell selbst zusammenbauen. Wenn man die dann noch zu komplexen Ausdrücken verknüpfen können soll, dann wirds natürlich schon schwieriger.
Das dürfte doch aber nicht allzuproblematisch sein, einen Parser für die Grundrechenarten und ein paar logische Operatoren zu bauen?
Dazu muss man sich nur überlegen, dass die Operatoren eine gewisse Priorität besitzen (z.B. wird * vor + berechnet). Somit kann man aus jedem Ausruck eine Baumstruktur erhalten:
z.B.
3+4*(5+1)
Der Ausdruck in Klammern hat die höchste Priorität und wird als erstes ausgewertet, danach folgt * und zum Schluss +:
D.h. man muss den Ausdruck parsen, um daraus einen binären Baum zu erhalten, der in diesem Fall so aussieht:
Code:
+
3 *
4 +
5 1
Um den Ausdruck auszuwerten, muss also 3 + [Ausdruck aus dem rechten Teilbaum] berechnet werden.
Der rechte Teilbaum schreibt eine Operation 4 * [weiterer rechter Teilbaum] vor.
Somit bleibt zum Schluss nur noch die Auswertung des Teilbaums für 5+1.
Allgemein kann man so einen Baum mit einem einfachen rekursiven Algorithmus auswerten:
Der Knoten beschreibt die Operation auf den Werten des linken und des rechten Teilbaums bzgl. des jeweiligen Knotens.
Die Teilbäume bestehen entweder nur aus einem Blatt (dann kann dort der Wert direkt abgelesen werden) oder sie bestehen aus weiteren Knoten, die erst noch ausgewertet werden müssen (rekursiver Funktionsaufruf):
D.h. du solltest dich am besten erstmal mit binären Bäumen beschäftigen, damit du weisst, was das genau ist und wie man das letztendlich implementieren kann. Danach kannst du dir dann Gedanken machen, wie du aus einer Zeichenkette den entsprechenden Baum bekommst, welcher dann leicht auszuwerten ist.