Es gibt viele Definitionen online darüber, was eine kontextfreie Grammatik ist, aber nichts, was ich finde, befriedigt meine Hauptprobleme:
Von welchem Kontext ist es frei?
Um das zu untersuchen, googelte ich "kontextsensitive Grammatik", konnte aber immer noch nicht herausfinden, worum es beim "Kontext" ging.
Kann mir bitte jemand erklären, worauf sich der context
Begriff in diesen Namen bezieht?
terminology
context-free
formal-grammars
CodyBugstein
quelle
quelle
override
kann es sich entweder um einen Variablennamen oder ein Schlüsselwort handeln, je nachdem, wo es verwendet wird (dh in welchem Kontext). Bei Verwendung nach einer Methodendeklaration handelt es sich um ein Schlüsselwort. Sonst ist es nicht. Dies ist ein Beispiel für eine kontextsensitive Grammatik.Antworten:
Sie haben recht, es gibt immer einen Zusammenhang in gewissem Sinne. Ich glaube nicht, dass man verstehen kann, was "Kontext" in "kontextfrei" bedeutet, ohne eine Produktion zu verstehen.
Eine Produktion ist eine Substitutionsregel. Es heißt, dass Sie zum Erzeugen von Zeichenfolgen in der Sprache das, was links ist, durch das, was rechts ist, ersetzen können:
Dies bedeutet, dass die abstrakte Folge A durch das Zeichen "x" gefolgt vom Zeichen "y" ersetzt werden kann. Sie können auch komplexere Produktionen haben:
Dies bedeutet, dass das Zeichen "z" gefolgt von der abstrakten Sequenz A durch die Zeichen "x" und "y" ersetzt werden kann.
Eine kontextfreie Produktion bedeutet einfach, dass nur eins auf der linken Seite ist. Das erste Beispiel ist kontextfrei, da A durch "x" und "y" ersetzt werden kann, unabhängig davon, was davor oder danach kommt. Im zweiten Beispiel muss jedoch das Zeichen "z" vor dem A stehen, und dann kann die Kombination durch "x" und "y" ersetzt werden, sodass ein gewisser Zusammenhang besteht.
Eine kontextfreie Grammatik ist dann nur eine Grammatik mit nur kontextfreien Produktionen.
Das zweite Beispiel ist eigentlich ein Beispiel für eine uneingeschränkte Produktion. Es gibt eine andere Kategorie zwischen kontextfrei und uneingeschränkt, die als "kontextsensitiv" bezeichnet wird. Ein Beispiel für eine kontextsensitive Produktion ist:
Der Unterschied besteht darin, dass das, was vor A (und nach A) auf der linken Seite steht, auf der rechten Seite erhalten bleiben muss. Dies bedeutet effektiv, dass nur A substituiert wird, aber nur im richtigen Kontext substituiert werden kann.
quelle
zA -> zxy
: A wird immer noch durch xy ersetzt, aber erst nach z.quelle