Ich dachte an Grammatiken für indendationssensitive Sprachen und es sieht so aus, als würden CF-Grammatiken in Kombination mit Parametern den Trick machen. Betrachten Sie als Beispiel dieses Fragment für eine vereinfachte Python-Grammatik im ANTLR-ähnlichen Format:
// on top-level the statements have empty indent
program
: statement('')+
;
// let's consider only one compound statement and one simple statement for now
statement(indent)
: ifStatement(indent)
| passStatement(indent)
;
passStatement(indent)
: indent 'pass' NEWLINE
;
// statements under if must have current indent plus 4 spaces
ifStatement(indent)
: indent 'if' expression ':' NEWLINE (statement(indent ' ')+)
;
Meine Frage: Hat diese Art von Grammatik (CFG mit Parametern) einen Namen?
Es sieht so aus, als ob es nicht schwierig wäre, einen rekursiven Abstiegsparser für diese Grammatik zu schreiben (Parameter sollten im Grunde Parser sein). Was könnten die Schwierigkeiten bei diesem Ansatz sein?
Erhöht das Hinzufügen von Parametern die unterstützte Sprachklasse über kontextfrei?
Antworten:
Affix-Grammatiken (parametrisierte kontextfreie Grammatiken) wurden vom angesehenen niederländischen Informatiker Cornelis HA Koster ausgiebig untersucht , beginnend mit seiner 1962 erschienenen Arbeit "Basic English, eine generative Grammatik für einen Teil des Englischen", die gemeinsam mit der LGLT Meertens verfasst wurde. 1970 produzierte er einen Formalismus des Konzepts; Einen nützlichen Überblick bietet sein 1971 erschienener Aufsatz "Affix Grammatics for Programming Languages", dessen Version ich bei Citeseer gefunden habe .
In diesem Aufsatz vergleicht Koster seinen Formalismus (und einen ähnlichen) mit den zweistufigen Grammatiken von Van Wijngaarden und findet, dass sie sehr ähnlich sind.
Dick Grunes wertvolle kommentierte Bibliographie zu Parsing-Techniken enthält eine Vielzahl weiterer nützlicher Referenzen für Affix-Grammatiken und andere nicht-chomskysche Formalismen. (Siehe Abschnitt 18.2.6 der Bibliographie, obwohl es in anderen Abschnitten nützliche Dokumente gibt.) Grune behandelt das kurze Anbringen von Grammatiken in §15.3.2 der zweiten Ausgabe von Parsing Techniques: A Practical Guide (und noch kurz in der ersten Ausgabe) (online verfügbar) unter Hinweis auf die Tatsache, dass es einfach ist, Top-Down- (und andere) Analysetechniken anzupassen.
Koster, der auch Redakteur des Algol 68-Berichts war, war der ursprüngliche Entwickler der Compiler Description Language (CDL) , basierend auf seinen Ideen zu Affix-Grammatiken. Dieses Toolkit und seine späteren Derivate wurden viele Jahre lang in der Produktion eingesetzt. Diese Seite , die ich mit einer Google-Suche gefunden habe und deren Beständigkeit ich nicht garantieren kann, enthält Links zum Handbuch und zur Download-Site für CDL3.
quelle
Nehmen Sie das Pumplemma für CFGs :
Nimm die Grammatik
Dies beschreibt ein Sternendreieck:
Dies bedeutet, dass das Sternendreieck keine kontextfreie Sprache ist.
Oder ein einfacheres Beispiel:
quelle
Ich habe diesen Formalismus noch nie gesehen (auch nicht in Grunes Parsing-Techniken ). Abhängig von den Details, wie Sie genau definieren, "Parameter sollten im Grunde Parser sein", sieht es für van Wijngaardens Grammatiken mit zwei Niveaus, die die gleiche Kraft haben wie aus Uneingeschränkte Phasenstruktur-Grammatik (dh leistungsfähiger als kontextsensitiv, Sie könnten eine VW-Grammatik schreiben, die alle Halteprogramme enthält).
quelle