Ich habe eine Weile Compiler studiert und gesucht, was unter "Kontext" in der Grammatik zu verstehen ist und was es bedeutet, dass die Grammatik "kontextfrei" ist, aber ohne Ergebnis.
Kann mir jemand dabei helfen?
terminology
context-free
formal-grammars
Shady Atef
quelle
quelle
Antworten:
Der Kontext kann im Hinblick auf die Produktionsregeln erklärt werden, die für verschiedene Grammatiken in der Chomsky-Hierarchie zulässig sind.
Wenn Sie kontextfreie Grammatiken berücksichtigen, haben deren Produktionsregeln die folgende Form:
Sie können also feststellen, dass der linke Teil dieser Art von Regeln nur aus einem nicht-terminalen Symbol besteht. somit findet die Ersetzung des nicht-terminalen Symbols statt, ohne seinen "Kontext" zu berücksichtigen, dh die anderen Symbole, von denen es umgeben ist.
Wenn Sie andererseits Produktionsregeln für kontextsensitive Grammatiken berücksichtigen, haben diese die folgende Form:
wobei ein Nicht-Terminal und ist , , sind Sequenzen von Nicht-Terminals und Terminals.α β γEIN α β γ
In diesem Fall beeinflusst der "Kontext" (dh und ) des zu ersetzenden nicht-terminalen Symbols die Wirkung der Ersetzung und ist Teil der Regel selbst.γβ γ
Weitere Details finden Sie in dieser Antwort zur Mathematik und in dieser Antwort zur Softwareentwicklung.
quelle
x:=y+z
f(y+z)
return y+z
quelle
Im Allgemeinen können sogar reguläre Sprachen Kontextabhängigkeiten aufweisen. Dies bedeutet, dass Sie in gewissem Maße festlegen können, wie Symbole in der Nähe anderer Symbole in einer Zeichenfolge, die zu dieser Sprache gehört, angezeigt werden.
Was für kontextfreie Grammatiken spezifisch ist, ist, dass die Wahl der anzuwendenden Regel niemals von wem abhängt, wenn es mehrere Möglichkeiten gibt, ein Nicht-Terminal-Symbol durch Anwenden verschiedener Regeln mit demselben Nicht-Terminal auf der rechten Seite zu ersetzen wird während des Ableitungsprozesses um dieses Symbol herum ausgeführt.
Sie können sie sich als kontextfreie Ableitungssprachen vorstellen, kurz kontextfreie Sprachen.
quelle