Ich lerne für meinen Computersprachtest und es gibt eine Idee, bei der ich Probleme habe, meinen Kopf herumzuwickeln.
Ich habe verstanden, dass reguläre Grammatiken einfacher sind und keine Mehrdeutigkeiten enthalten können, aber nicht viele Aufgaben erledigen können, die für Programmiersprachen erforderlich sind. Ich habe auch verstanden, dass kontextfreie Grammatiken Mehrdeutigkeiten zulassen, aber einige Dinge berücksichtigen, die für Programmiersprachen erforderlich sind (wie Palindrome).
Ich habe Probleme damit zu verstehen, wie ich all das ableiten kann, indem ich weiß, dass reguläre Grammatik-Nichtterminale einem Terminal oder einem Nichtterminal gefolgt von einem Terminal zugeordnet werden können oder dass ein kontextfreies Nichtterminal einer beliebigen Kombination von Terminals und Nichtterminalen zugeordnet werden kann .
Kann mir jemand helfen, das alles zusammenzustellen?
quelle
A-> a | c
undB->b
dann erlaubt diese Grammatik Nicht-Palindrome. Zum Beispiel könnte ich produzieren :S->ABA->aBA->abA->abc
. Das Problem ist, dass wir in der ersten Regel nicht zwei Variablen erzeugen wollen, sondern zwei Terminals. Eine Möglichkeit für eine Grammatik, die Palindrome erlaubt, ist:S -> aSa | bSb | a | b
S -> aSa | e
unda(aa)*a
beide beschreiben eine reguläre Sprache. Dies zeigt, dass eine CFG eine reguläre Sprache beschreiben kann, selbst wenn sie die linke oder rechte Linearität verletzt. Zugegeben, dies ist ein nicht so offensichtliches Palindrom.Ich denke, woran Sie denken möchten, sind die verschiedenen pumpenden Lemmata. Eine reguläre Sprache kann von einem endlichen Automaten erkannt werden. Für eine kontextfreie Sprache ist ein Stapel erforderlich, und für eine kontextsensitive Sprache sind zwei Stapel erforderlich (was bedeutet, dass eine vollständige Turing-Maschine erforderlich ist).
Wenn wir also über das Pump-Lemma für reguläre Sprachen nachdenken , heißt es im Wesentlichen, dass jede reguläre Sprache in drei Teile zerlegt werden kann, x , y und z , wobei alle Instanzen der Sprache in xy * z sind (wobei * Kleene-Wiederholung ist, dh 0 oder mehr Kopien von y .) Sie haben im Grunde ein "Nicht-Terminal", das erweitert werden kann.
Was ist nun mit kontextfreien Sprachen? Es gibt ein analoges Pump-Lemma für kontextfreie Sprachen , das die Zeichenfolgen in der Sprache in fünf Teile aufteilt , uvxyz , und in denen alle Instanzen der Sprache in uv i xy i z für i ≥ 0 sind. Jetzt haben Sie zwei "Nichtterminale" "das kann repliziert oder gepumpt werden, solange Sie die gleiche Nummer haben .
quelle
Der Unterschied zwischen regulärer und kontextfreier Grammatik: (N, Σ, P, S): Terminals, Nicht-Terminals, Produktionen, Startzustand Terminalsymbole
● elementare Symbole der Sprache, die durch eine formale Grammatik definiert sind
● abc
Nichtterminale Symbole (oder syntaktische Variablen)
● ersetzt durch Gruppen von Terminalsymbolen gemäß den Produktionsregeln
● ABC
reguläre Grammatik: rechte oder linke reguläre Grammatik rechte reguläre Grammatik, alle Regeln gehorchen den Formen
links reguläre Grammatik, alle Regeln gehorchen den Formen
kontextfreie Grammatik (CFG)
○ formale Grammatik, in der jede Produktionsregel die Form V → w hat
○ V ist ein einzelnes nichtterminales Symbol
○ w ist eine Folge von Terminals und / oder Nicht-Terminals (w kann leer sein)
quelle
Regelmäßige Grammatik: - Grammatik, die folgende Produktion enthält, ist RG:
wobei V = variabel und T = terminal
RG kann eine linke lineare Grammatik oder eine rechte lineare Grammatik sein, jedoch keine mittlere lineare Grammatik.
Wie wir wissen, sind alle RG lineare Grammatik, aber nur linke lineare oder rechte lineare Grammatik sind RG.
Eine reguläre Grammatik kann mehrdeutig sein.
Mehrdeutige Grammatik: - Für eine Zeichenfolge x gibt es mehr als eine LMD oder mehr als RMD oder mehr als einen Analysebaum oder eine LMD und eine RMD, aber beide erzeugen unterschiedliche Analysebäume.
Diese Grammatik ist mehrdeutige Grammatik, weil zwei Baum analysieren.
CFG: - Eine Grammatik, die als CFG bezeichnet wird, wenn ihre Produktion in Form ist:
DCFL: - Wie wir wissen, sind alle DCFL LL (1) Grammatik und alle LL (1) ist LR (1), also ist es niemals mehrdeutig. DCFG ist also niemals mehrdeutig.
Wir wissen auch, dass alle RL DCFL sind, so dass RL niemals mehrdeutig ist. Beachten Sie, dass RG möglicherweise nicht eindeutig ist, RL jedoch nicht.
CFL: CFl Kann oder kann nicht mehrdeutig sein.
Hinweis: RL ist niemals inhärent mehrdeutig.
quelle
Reguläre Ausdrücke
Kontextfreie Grammatiken
quelle
Eine Grammatik ist kontextfrei, wenn alle Produktionsregeln die Form haben: A (dh die linke Seite einer Regel kann nur eine einzelne Variable sein; die rechte Seite ist uneingeschränkt und kann eine beliebige Folge von Terminals und Variablen sein). Wir können eine Grammatik als 4-Tupel definieren, wobei V eine endliche Menge (Variablen), _ eine endliche Menge (Terminals), S die Startvariable und R eine endliche Menge von Regeln ist, von denen jede eine Abbildung ist Die
reguläre Grammatik ist entweder rechts oder links linear, während die kontextfreie Grammatik grundsätzlich eine beliebige Kombination von Terminals und Nicht-Terminals ist. Daher können wir sagen, dass reguläre Grammatik eine Teilmenge der kontextfreien Grammatik ist. Nach diesen Eigenschaften können wir sagen, dass das Set Context Free Languages auch das Set Regular Languages enthält
quelle
Grundsätzlich ist reguläre Grammatik eine Teilmenge der kontextfreien Grammatik, aber wir können nicht sagen, dass jede kontextfreie Grammatik eine reguläre Grammatik ist. Hauptsächlich kontextfreie Grammatik ist mehrdeutig und reguläre Grammatik kann mehrdeutig sein.
quelle
Ein reguläres Grammatikprogramm ist niemals mehrdeutig, da es entweder linkslinear oder rechtslinear ist. Daher können wir für zwei reguläre Grammatiker keine zwei Entscheidungsbäume erstellen, sodass es immer eindeutig ist. Abgesehen von der regulären Grammatik können alle regulär sein oder nicht
quelle