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:
a @@ b @@ c ## d ## e
es sei denn, Sie haben die Prioritäts- / Assoziativitätserklärungen für @@
und bereits analysiert ##
:
infixr 8 @@
infixr 6 ##
Ein zweites Beispiel ist Bencode , eine Datensprache , die dem Inhalt seine Länge voranstellt :
<length>:<contents>
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:
<hi>
<bye>
the closing tag has to match bye
</bye>
</hi> <!-- has to match "hi" -->