Gibt es eine brauchbare LALR(1) Grammatik für reST?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Panke
User
Beiträge: 185
Registriert: Sonntag 18. März 2007, 19:26

Weiß einer, ob irgendwo eine brauchbare LALR(1) (oder LL(1)) Grammatik für reStructuredText gibt?
Ich habe bisher keine gefunden.

Danke!
Zuletzt geändert von Panke am Freitag 4. November 2011, 18:25, insgesamt 1-mal geändert.
lunar

Wofür brauchst Du denn eine docutils-Grammatik?
Panke
User
Beiträge: 185
Registriert: Sonntag 18. März 2007, 19:26

Um reST einzulesen. Den Parser aus den docutils kann ich nicht verwenden, da ich kein
Python nehme.
lunar

Ich glaube, in diesem Fall ist es sinnvoller, den Parser von Docutils unmittelbar in eine andere Sprache zu übertragen. Selbst wenn jemand irgendwo eine BNF-Grammatik für Docutils geschrieben hat, ist praktisch dennoch nur der Parser von docutils relevant, da docutils die Referenzimplementierung, genau genommen sogar die einzige Implementierung der ReST-Grammatik ist. Bei einem kurzen Blick auf den Docutils-Quelltext erscheint mir dessen Parser auch nicht allzu kompliziert zu sein. Schwierig sind lediglich die regulären Ausdrücke, doch die lassen sich ja mehr oder weniger unverändert übernehmen.

Eine echte Grammatik kann es für ReST eh nicht geben, da ReST nicht kontextfrei ist, wenn man Direktiven mit einbezieht. Direktiven werden in ReST zum Zeitpunkt des Parsens ausgewertet, und jede Direktive entscheidet selbst, wie ihr Inhalt zu parsen ist. Dasselbe Dokument kann je nach Konfiguration des Parsers mithin in unterschiedlichen Dokumentbäumen resultieren. Du musst also so oder so alle Direktiven und mithin einen Großteil der Funktionalität selbst implementieren.
Panke
User
Beiträge: 185
Registriert: Sonntag 18. März 2007, 19:26

Eine echte Grammatik kann es für ReST eh nicht geben, da ReST nicht kontextfrei ist, wenn man Direktiven mit einbezieht. Direktiven werden in ReST zum Zeitpunkt des Parsens ausgewertet, und jede Direktive entscheidet selbst, wie ihr Inhalt zu parsen ist.
Lies: Für jede Menge an Direktiven braucht es eine eigene Grammatik :-)

Das "kann es eh nicht geben" stört mich da ein bisschen.
Ob ich jetzt Erweiterungen für den Parser implementiere, indem ich irgendwelche Callbacks für Direktiven anbiete, oder indem ich die Grammatik erweitere, ist ja unerheblich. Zugegebenermaßen glänzen die meisten Parser-Generatoren nicht gerade durch einfache
Erweiterbarkeit der Grammatik.

Du hast aber sicher recht, dass per Hand implementieren hier wahrscheinlich einfacher ist.
lunar

@Panke: Man sein, dass es Dich stört, dennoch ist ReST mit Direktiven faktisch nicht kontextfrei, da Direktiven den Zustand des docutils-Parsers beliebig manipulieren können, und das in der Praxis auch tun. Theoretisch ist ReST, die Direktiven einbezogen, also turing-vollständig.

Praktisch glaube ich nicht, dass es ein Parser-Generator gibt, dessen internen Zustand Du soweit gehend manipulieren kannst, um beispielsweise die Bedeutung einer Direktive während des Parsers zu verändern.
Antworten