AW: Projekt zur Erstellung einer Sprachspezifikation gestartet
3. Apr 2022, 17:34
Es hat denn doch länger gedauert als gedacht, aber sei's drum.
Ich habe die Grammatik von EBNF in BNF-Form gebracht, zum einen, weil mein Generator nur BNF versteht, zum anderen, weil das den Anschluß der Funktionen erheblich erleichtert, die die kontext-abhängige Syntax überprüfen sollen. Dabei habe ich mir die Freiheit genommen, Konstruktionen wie "VAR ;" oder "CONST ;" zu entfernen. Möglicherweise hat der Autor eine Obermenge von Delphi definiert, kann sein, daß das für die Entwicklung von Tools besser ist. Er verwendet aber auch Dinge wie "[ ',' <ConstExpr> ]*" neben "( <ConstantDecl> ';' )*". Letzteres steht allgemein für "Kann fehlen oder beliebig oft vorkommen", während die Konstruktion in eckigen Klammern "Einmal oder keinmal" bedeutet und so eigentlich keinen Unterschied bringt. Mir erscheint das suspekt.
Von 968 Zuständen weisen 62 Konflikte auf, 80 Shift-Reduce- und 34 Reduce-Reduce-Konflikte. Mit dem größten Teil der Shift-Reduce-Konflikte kann man wahrscheinlich leben. Auf die Reduce-Reduce-Konflikte trifft das nicht zu, die ändern die Sprache zu sehr.
Fazit: Ich bezweifele, daß die Grammatik als Ausgangspunkt für die Definition einer ordentlichen Sprachreferenz geeignet ist. Jedenfalls ist das nicht ohne sehr viel Arbeit zu schaffen. Erschwerend kommt hinzu, daß auch die Sprachbeschreibung in der Hilfe auf subtile Fragen kaum Antworten hat. Das läßt sich nur durch intensives Testen klären, was einen immensen Aufwand bedeutet. Und niemand garantiert, daß im nächsten Release das alles noch so ist. Beispiele für solche kleinen Änderungen, die einen ratlos werden lassen, findet man auch hier in der Praxis.
Ich zitiere Dich mal: "Ja aber ist das nicht jede Menge Arbeit? Vermutlich weniger als du denkst! ". Nope, es ist viel mehr, als man denkt, leider.
Ich hänge mal die transformierte Grammatik dran, zur gefälligen Selbstbedienung. Selbstverständlich kann ich bei diesem Rewrite Fehler reingebracht haben, mea culpa, also bitte konstruktiv meckern.
|