Keine Lösung, aber …
Also ich muss zugeben, dass ich das Wort „Kellerautomat“ bis heute nicht kannte. Was es nicht alles gibt …
Und wenn ich bei Google mal „Kellerautomat“ eingebe und mir nur Seiten auf Deutsch zurückgeben lasse, kommen ein paar Seiten, die den mehr oder weniger verständlich beschreiben.
Als Nicht-Fachmann verstehe ich das nun so, dass Du vor allem die Klammer-Ausdrücke identifizieren kannst. Aber auch die Berechnungs-Symbole sollten erkennbar sein.
Ich vermute mal, dass man sich ein Set aus Symbolen und Operatoren definieren muss, also () + - * / ^ und so weiter und für jedes dieser Symbole einen eigenen Keller-Automaten braucht. Allerdings läuft das am Ende doch auf einen einzigen hinaus, der allerdings auf verschiedene Symbole „reagiert“. Für jeden Operator brauchst Du dann eine separate Berechnungs-Routine.
Ich glaube, Dein Verständnisproblem ist, dass Du Struktur und Berechnung nicht auseinander hältst. Der Automat ist meines Erachtens ausschließlich zum PARSEN da, also zum Erkennen und Identifizieren von Strukturen (hier also Zahlen, Klammern und Operanden). Die Berechnung hingegen ist davon unabhängig und findet sozusagen in den Zuständen bzw. Zustandsübergängen des Automaten statt (Informatiker werden mich jetzt erhängen).
Ich stelle mir das so vor, dass der Automat, wenn er eine Bedingung als gegeben erkannt hat (z.B. eine schließende zur öffnenden Klammer gefunden hat), das, was darin als Argument enthalten ist, an die nächst höhere Ebene der Verarbeitung weitergibt. Ohje, das klingt doof. Nehmen wir mal die Addition. Der Automat liest einen Ausdruck und dann ein +. Das Plus kommt in den Stack und wird wieder gelöscht, wenn der nächste Operand gelesen wurde (weil das Plus zwei Operanden erwartet). Diese Lösch-Aktion vom Stack muss nun die Berechnung anstoßen, wozu die beiden Operanden natürlich irgendwo gespeichert worden sein müssen. Die Punkt-vor-Strich-Regel stellt hier allerdings eine kleine Herausforderung dar …
Naja, wie gesagt, das ist nicht fachlich fundiert und ist nur ein Versuch, Denkanstöße zu geben. Manchmal hift das, die eigenen Gedanken zu sortieren.
Viele Grüße,
Kristian
PS (nicht ganz ernst gemeint): Du kannst ja mal fragen, ob Ihr auch die Umgekehrte Polnische Notation (RPN) implementieren könnt
Das ist vielleicht einfacher, weil es ohne Klammern auskommt. Ist eine feine Sache, wenn man sich daran gewöhnt hat. Der HP 48 G funktioniert nach dem Prinzip (keine Ahnung, ob der überhaupt noch erhältlich ist, aber ich glaube, der hat einen Nachfolger).