Was mir grad noch auffällt:
Delphi-Quellcode:
Const
DEA : Array [symDigit..symTerminal, stStart..stDecimals] =
// symDigit , symKomma, symTerminal
{stStart } (stDigits , stError , stError),
{stDigits} (stDigits , stComma , stStop),
{stComma} (stDecimals, stError , stError),
{stDecimals}(stDecimals, stError , stStop)
);
Du musst deine Eingabe (wir gehen davon aus, dass wir sie als String bekommen) erst einmal in deine Token/Symbole umwandeln.
Spricht du brauchst einen Scanner/Lexer -> dann kommst du ja auch nicht um deine Case-Anweisung.
Das war der Grund, warum meine Tabelle so riesig geworden ist (zwar groß, aber schnell).
Es bleibt natürlich immernoch Geschmackssache.
Ich für meinen Teil, bastle mir meine Parser (TopDown) ohne Generatoren -> Ich bin an die Cases gewöhnt.
Die Tabellenlösung kommt aus der "BottomUp-Ecke".
PS: die Quellcodes tun das, was ich von ihnen verlangt habe (Delphi 7
PE)