Ich hatte in letzter Zeit ein bisschen Spaß daran, die Entwicklung von Sprachparsern im Zusammenhang damit zu untersuchen, wie sie in die Chomsky-Hierarchie passen.
Was ist ein gutes reales (dh nicht theoretisches) Beispiel für eine kontextsensitive Grammatik?
language-design
parsing
grammar
Evan Scholle
quelle
quelle
Antworten:
Gute Frage. Obwohl, wie in den Kommentaren erwähnt, sehr viele Programmiersprachen kontextsensitiv sind, wird diese Kontextsensitivität häufig nicht in der Analysephase, sondern in späteren Phasen aufgelöst - das heißt, eine Obermenge der Sprache wird mithilfe einer kontextfreien Grammatik analysiert. und einige dieser Analysebäume werden später herausgefiltert.
Dies bedeutet jedoch nicht, dass diese Sprachen nicht kontextsensitiv sind. Hier einige Beispiele:
Mit Haskell können Sie Funktionen definieren, die als Operatoren verwendet werden, und auch die Priorität und Assoziativität dieser Operatoren definieren. Mit anderen Worten, Sie können nicht den richtigen Analysebaum für einen Operatorausdruck wie den folgenden erstellen:
es sei denn, Sie haben die Prioritäts- / Assoziativitätserklärungen für
@@
und bereits analysiert##
:Ein zweites Beispiel ist Bencode , eine Datensprache , die dem Inhalt seine Länge voranstellt :
Das Problem bei diesem Format ist, dass es so gut wie unmöglich ist, ohne etwas Kontextsensitives zu analysieren, da die einzige Möglichkeit, die "Feld" -Größen herauszufinden, darin besteht, ... die Zeichenfolge zu analysieren.
Ein drittes Beispiel ist XML, vorausgesetzt, beliebige Tag-Namen sind zulässig: Öffnende Tag-Namen müssen übereinstimmende Close-Tags haben:
quelle
Solange ich weiß, kontextsensitive Grammatiken werden in der Verarbeitung natürlicher Sprache verwendet wird , nur . Interpreten und Compiler von Programmiersprachen versuchen aufgrund der Komplexität nicht, eine kontextfreie Grammatik zu analysieren (selbst wenn in der Vergangenheit einige Versuche unternommen wurden).
Vielleicht finden Sie in einer dieser Bibliotheken ein Beispiel für die tatsächliche Verwendung:
http://en.wikipedia.org/wiki/List_of_natural_language_processing_toolkits
http://opennlp.sourceforge.net/projects.html
http://nltk.org/
http://nlp.stanford.edu/nlp/javadoc/javanlp/
quelle
Kontextsensitive Grammatiken werden manchmal in Beschreibungen der Semantik von Programmiersprachen verwendet. Die vielleicht umfassendste Verwendung kontextsensitiver Grammatiken war die Algol68-Sprachdefinition. Es wurde ein kontextfreies Grammatikprogramm mit zwei Ebenen verwendet (siehe http://en.wikipedia.org/wiki/Two-level_grammar ), um sowohl die Syntax als auch die Semantik von Algol68-Programmen zu beschreiben.
Einige meiner Kollegen verwendeten die Van-Wijngaarden-Grammatik, um die Implementierung von Algol68 zu steuern (siehe http://en.wikipedia.org/wiki/FLACC ).
quelle