Verfasst: 23.07.2008 15:03
Top-Down-Methoden bestimmen zuerst Teile des zu berechnenden Ausdrucks, dann Teile von Teilen usw., bis die Teile klein genug sind um direkt ausgewertet zu werden. Bottom-up-Methoden nehmen kleine Teile der Eingabbedaten und setzen sie in strukturierter Weise so zusammen, dass immer größere Teilstücke entstehen, bis schließlich der ganze Ausdruck ausgewertet ist. Für mehr Informationen google einfach mal nach "Syntaxanalyse" oder "Parser".AND51 hat geschrieben:> Top-Down-Ansatz
Das ist also die Methode, wenn man innerste Klammern zuerst berechnet und dieses Teilergebnis rekursiv zurü+ckgibt, bis man "unten", also auf äußerster Ebene angekommen ist?
Wenn ja, fände ich das auf Anhieb einfach, es so zu probieren.
Ja, der rekursive Top-Down-Ansatz leuchtet vielen Leuten spontan intuitiv ein -- zumindest Leuten denen rekursives Denken nicht fremd ist.
Nee, hier verwechselst Du jetzt glaub ich was. "Separieren" muss man die Sachen ja sowieso. In jedem Fall.AND51 hat geschrieben:> Bottom-Up-Ansatz
Und das ist meine 2. Idee, alles in ein Array zu separieren?
Hier habe ich mal mit Regulären Ausdrücken versucht, einen Teststring zu separieren.
Bis jetzt separiert er nur Zahlen und Nicht-Zahlen. Nicht-Zahlen sind also Mathematische Operatoren.
So meinst du das doch, oder?
Ein String besteht ja zunächst einmal nur aus "aneinandergehängten" Zeichen. Der String muss in einzelne Token separiert werden, dazu hatte ich auch schon was geschrieben. Der Programmteil der das macht nennt sich "Scanner". Wie der Scanner die einzelnen Token separiert, ob mit RegEx oder anders, finde ich eigentlich gar nicht so wichtig

Wenn Du als erstes den Quellstring in Token aufteilst (ob mit RegEx oder ohne) und die einzelnen Token in einem Array abspeicherst, dann müssen die Token eben anschließend aus dem Array gelesen werden. Das ändert am Prinzip des Programms gar nichts! Mein Code lässt sich leicht dahin gehend abwandeln, und es bleibt ein rekursiv absteigender Parser, egal ob man die Token quasi "ad hoc" aus dem Quellstring separiert, oder alle Token am Anfang separiert und irgendwo zwischenspeichert, und dann später nach und nach aus dem Zwischenspeicher holt.
edit 27.7.2008
Eine so abgewandelte Version meines Codes findet sich jetzt hier. Ich denke sie eignet sich gut für Experimente mit RegEx o.Ä.
Gruß, Little John