?
happystudent schrieb:
Wenn man zum Beispiel einen Taschenrechner implementiert, baut der ja auch dynamisch einen Baum, der den zu berechnenden Ausdruck repräsentiert. Den Ausdruck auswerten kann man dann, indem man den Baum durchläuft.
Wenn ich jetzt den selben Ausdruck aber nicht als Baum aufstellen lasse, sondern direkt hardcode, ist die Auswertung oft um ein vielfaches schneller.
Das wird insbesondere wichtig, wenn die Funktion etliche male ausgewertet werden soll (nicht nur einmal, wie bei einem klassischen Taschenrechner).
Daher dachte ich, es wäre eine gute Idee, einen solchen Baum erst zu kompilieren und dann den kompilierten Ausdruck etliche Male auswerten zu lassen.
Wenn es dazu aber bessere Alternativen gibt, bin ich dafür natürlich offen.
warum machst du das nicht mit flex und bison?
Wenn es deutlich mächtiger sein muss als statische Formel-Auswertung (bedingte Verzweigungen z.B.), kann man den Parser um Laufzeit-Semantik erweitern, sprich Code-Erzeugung für eine CPU oder VM, die Befehle zur Kontrollfluß-Steuerung (bedingte Verzweigungen etc) haben und ausführen können.
Wenn du Spaß daran findest und den Parser und Code Generator immer weiter ausbaust, hast du irgenwann eine kleine Programmiersprache mit Variablen und Verzweigungen, dann eine große mit Typsystem, Variablen, Verzweigungen ...