Lösung von Aufgabe 3
- Das Zerlegen eines Strings in seine logischen
Bestandteile (Tokens) erledigt i.w. die Klasse
StringTokenizer. Sie bekommt eine Liste von
Trennzeichen und gibt dann jedesmal mit nextToken das nächste gefundene Token (Trennzeichen oder
Bereich dazwischen) zurück.
-
Die weitergehende Analyse erledigt ArithmetikTokenizer, der seiner
Elternklasse die meiste Arbeit übergibt. Die gefundenen Tokens sind
- Klammern oder Operatoren, die als entsprechende
Tokens geliefert werden,
- Zahlen, die gleich mit ihrem Wert versehen
werden,
- Leerzeichen, die überlesen werden, d.h. es wird
das nächste Token gewählt. Hier gäbe es Probleme mit Leerzeichen am
Ende der Eingabe, wenn dies nicht durch das s.trim() im Konstruktor gleich verhindert würde.
- etwas anderes → Eingabefehler. Wird hier
nicht abgefangen, sondern liefert später eine Exception.
- Das Berechnen des Ausdrucks aus den Tokens erfolgt
genau wie in der Vorlesung beschrieben. Dabei sorgt das Ausgliedern der
Hilfsfunktion applyOp für Übersichtlichkeit.
Zu beachten ist noch, dass die pop-Operation
von java.util.Stack nur ein Object zurückliefern kann, das man zur Weiterverarbeitung
mittels Casting in ein Token umwandeln
muss.
-
Sourcen:
- als lauffähiges Applet