Ideen für Mathparser gesucht
-
Vielleicht hätte ich dazu sagen sollen, dass mein Parser intern keinen AST generiert. Transformieren ist so also nicht möglich.
-
Ah, dann wär wohl das was du als nächstes implementieren solltest:
AST generieren
:p
Was genau gedenkst du denn mit diesem Parser anzufangen ohne AST?
In welcher Form liefert der Parser denn die grammatikalische Information, wenn nicht als AST?
-
Mathe-Parser ... keinen AST
Ach, und wie sieht die generierte Struktur aus? Ansonsten ist es kein Parser.
-
Er rechnet eben das Ergebnis direkt aus. Z.B.: http://ideone.com/69Qds
-
314159265358979 schrieb:
Er rechnet eben das Ergebnis direkt aus. Z.B.: http://ideone.com/69Qds
Nettes Spielzeug ... ein besserer Taschenrechner ist als Tutorial im
flex
undbison
Manual enthalten. Wenn du in weiter in diese Richtung gehen willst: Starting Forth
-
Dass du meinen Taschenrechner als Spielzeug bezeichnest, sehe ich schon fast als Beleidigung an
Das ist das erste Mal, dass ich einen Parser für Grundrechnungsarten + Klammern alleine geschafft hab, das macht mich auch etwas stolz. Die anderen Features sind letztendlich eh nur Peanuts.
-
Also wäre der nächste Schritt, in Lexer, Parser und Interpreter aufzuteilen?
-
314159265358979 schrieb:
Also wäre der nächste Schritt, in Lexer, Parser und Interpreter aufzuteilen?
Ja, AST wäre halt cool, weil du dann richtig coole Sachen machen kannst.
zB einfach nur eine Vereinfachung. Generell ists dann auch viel einfacher Erweiterungen einzubauen.
-
Hm...
Sollte infix_function_call zu einer eigenen AST-Node werden? Sollten parenthesis_group, bracket_group und braces_group zu einer AST-Node werden, oder statt der 3 einfach nur group, oder gar keine AST-Node für Gruppen?Fragen über Fragen...
-
Ich denke, im AST braucht man keine Klammern. Evtl. für irgendwelche Optimierungen, da bin ich mir jetzt nicht sicher. Aber an sich kann man Klammern beim Aufbau des AST auflösen.
-
Der Ast kennt doch nur noch Operationen.
Input: "5 * (8 - sin(12) ^ (1 + x))"
Ergebnis: Mult(Value(5), Sub(Value(8), Pot(sin(Value(12)), Add(Value(1), Var("x"))))
-
audacia schrieb:
dot schrieb:
symbolisches Differenzieren
Symbolisches Vereinfachen von Ausdrücken. Sonst wird das mit dem Differenzieren schnell unübersichtlich.
Das kann ich bestätigen. Ich habe vor langer Zeit mal beides probiert. Zum symbolischen Vereinfachen habe ich aber keinen guten Ansatz gefunden. Wie macht man das auf eine schlaue Art? Bei mir ist es letztendlich darauf hinausgelaufen, dass ich unglaublich viele Spezialfälle gesondert behandeln musste. Das muss aber irgendwie systematischer gehen.
-
Gregor schrieb:
Bei mir ist es letztendlich darauf hinausgelaufen, dass ich unglaublich viele Spezialfälle gesondert behandeln musste. Das muss aber irgendwie systematischer gehen.
Ich weiß nicht so recht. Ich habe von dem Thema ja keine Ahnung, aber hast du dir mal die Sourcen von Maxima angesehen? Anteilsmäßig ist der Umfang der Vereinfachungen bzw. Sonderfallsammlungen dort schon auch recht beachtlich.
Wie gesagt: Keine Ahnung, ob das State of the Art ist.