2 - Grammatiken und Chomsky-Hierarchie

Werbung
Theoretische Informatik – Mitschrift
2. Grammatiken und die Chomsky-Hierarchie
Beispiel: Syntaxdefinition in BNF
<anweisung>
→ <wertzuweisung>
| <while-anweisung>
<wertzuweisung>
→ <variable> := <ausdruck>
<variable>
→ A | B | C
<ausdruck>
→ <Zahl> | <variable> |
<ausdruck> <op> <ausdruck>
<Zahl>
→ 1 | ... | 9
<op>
→ + | - | *
<while-anweisung> → while <bedingung> do <anweisung>
...
Struktur solcher Regelsysteme:
● Nonterminalsymbole (Variablen)
○ Hilfssymbole zur Herleitung von Wörtern
○ in BNF: <...>
● Terminalsymbole = Elemente aus Σ
im Bsp.: A, B, C, :=, 1, ..., 9, +, -, *, while, do
● Startsymbol S = spezielles Nonterminalsymbol
im Bsp.: <anweisung>
● Regeln/Produktionen = Ersetzung von Teilwörtern durch andere
Definition 2.1 (Noam Chomsky, 1956, Linguist):
Eine Grammatik (Chomsky-Grammatik, Phrasenstrukturgrammatik) ist ein Quadrupel
⟨ N ,  , P , S ⟩ mit
- N ist Alphabet mit Terminalsymbolen
-  ist Alphabet mit Terminalsymbolen
Es gilt: N ∩=∅
- P ist endliche Menge von Produktionen (Regeln)
Sei X :=∪N.
P⊆ 
X *⋅N⋅X * × 
X*
(linke Regelseite mit
min. einem Nonterminal)
rechte Regelseite
- S ∈N ist Startsymbol
Schreibweise für Regeln:
 1  2
 1  g 2 , falls 1 , 2 ∈ P
Definition 2.2: Sei G=⟨N ,  , P , S ⟩ Grammatik, X :=∪N.
a) Die Ableitungsrelation ⇒g ⊆ X *× X * wird definiert durch:
⇒ g  ' : ⇔∃  , ∈ X * ,∃ 1 2 ∈ P : = 1 ∧'= 2 .
Sprechweise:  ist in einem Schritt zu ' ableitbar.
∗
⇒g bezeichnet die reflexive transitive Hülle von ⇒g .
∗
Falls  ⇒g , sagt man:  ist aus  ableitbar.
∗
b) Die von G erzeugte Sprache ist LG={w ∈∣S ⇒g w}.
c) Äquivalenz von Grammatiken: G1≈G 2 ⇔ LG 1 =L G 2 
Bezeichnungskonventionen:
∋a ,b , c , ...,0 ,1 ,2 ,... Terminale
N ∋ A , B , C , ... , S
Nonterminale ( S Startsymbol)
X =∪ N ∋u , v , w , ...
X *∋ ,  ,  , ...
Satzformen
∋u , v , w ,...
Terminalwörter
Beispiel:
G0 =⟨{S , M , A , B}, {a , b}, P 0 , S ⟩ mit P 0 :
S → aMb
M → A | B
A → aA | ε
B → bB | ε
S ⇒ g aMb ⇒ g aAb⇒ g ab
L G 0 ={awb∣w∈{a}*∪{b }*}
G=⟨ N ,  , P , S ⟩
N ,  disjunkte Alphabete
N ∋ A , B , C ,... Nonterminale, Variablen
∋a , b , c ,... Terminale
P⊆ ∪N *⋅N⋅∪ N  *×∪N *
∪ N  *∋ ,  ,  ... Satzformen
 *∋u , v , w ... Terminalwörter
 , ∈ P wird geschrieben als  .
Ableitungsdefinition: ⇒g ⊆∪ N *× ∪N *
S ∈ N Startsymbol
Sprache von G : L G :={w∈ *∣S ⇒g * w }
Beispiel:
Finde G mit L G ={an b n c n∣n≥1} .
={a , b , c }, N ={S , B , C }
P:
S aBC∣aSBC
aB ab
bB bb
bC bc
cc cc
CB  BC
Beispielableitung:
S ⇒ aSBC ⇒aaSBCBC ⇒ aaSBBCC ⇒ aaaBCBBCC ⇒ aaaBBCBCC ⇒ aaaBBBCCC ⇒6 a 3 b3 c 3
S ⇒ aSBC ⇒ aaSBCBC ⇒ aaSBBCC ⇒ aaaBCBBCC ⇒ a 3 bCB 2 C 2 ⇒ a 3 bcB2 C 2 (Sackgasse)
z.z.:
(i)
(ii)
L G ⊆{a n b n c n∣n≥1}
{an bn c n∣n≥1 }⊆L G 
Chomsky-Hierarchie: Einteilung von Grammatiken in Typen 0 – 3.
Definition 2.3:
Sei G=⟨N ,  , P , S ⟩ , i∈{0,1, 2, 3}
G heißt vom Typ i oder Typ-i -Grammatik, falls: G die Eigenschaft ( i ) besitzt:
(0) "rekursiv aufzählbar" (keine Einschränkung)
(1) "kontextsensitiv": für jede Regel 1 2 ∈P gilt:∣1∣≤∣2∣∨1=S , 2= und, falls S ∈P ,
darf S nicht auf der rechten Regelseite einer Regel in P auftreten.
(2) "kontextfrei": ∀ 1  2∈ P : 1∈ N , d.h. nur Regeln der Form A.
(3) "regulär" oder "einseitig linear": ∀ 1 2 ∈P : 1 ∈N ,2 ∈ *⋅N ∪ *
d.h. rechtslineare Regeln der Form A wB bzw. A w
oder ∀ 1 2 ∈P : 1 ∈N , 2 ∈ N  *∪ *
d.h. linkslineare Regeln der Form A Bw bzw. A w
Beispiel:
G0 =⟨{S , M , A , B}, {a , b}, P 0 , S ⟩
P0:
S aMb
M  A∣B
AaA∣
B bB∣
Typ-2-Grammatik mit
LG0 ={awb∣w∈{a }*∪{b}*}
S ⇒G aMb ⇒G aAb⇒G aaAb⇒G ... ⇒G aa...aAb⇒G a...ab
0
0
0
0
0
0
als rechtslineare Typ-3-Grammatik:
P0:
S aM
M  A∣B
A aA∣b
B bB∣b
S ⇒G ' aM ⇒G ' aA ⇒G ' ... aa...aA ⇒G ' aa...ab
0
0
0
0
Jede Typ-3-Grammatik ist auch Typ-2-Grammatik, aber nicht jede Typ-2-Grammatik ist auch Typ1-Grammatik.
Problem: In Typ-2-Grammatiken sind beliebige ε-Regeln, d.h. Regeln der Form A → ε erlaubt, in
Typ-1-Grammatiken aber nicht.
Definition 2.4:
Eine formale Sprache L⊆ * heißt vom Typ i bzw. Typ-i-Sprache, falls es eine Typ-i-Grammatik
gibt, die L erzeugt, d.h. mit L = L(G).
Sei ℒ i  :={L⊆ *∣L vom Typ i}.
Definition 2.5:
Eine Typ-2-Grammatik G=⟨ N ,  , P , S ⟩ heißt ε-frei, falls für jede Regel A ∈P gilt:
∈ N ∪ + oder A = S und α = ε und S tritt auf keiner rechten Regelseite in P auf.
Es folgt: ε-freie Typ-2-Grammatiken sind auch vom Typ 1.
Satz 2.1:
Jede kontextfreie Grammatik G=⟨N ,  , P , S ⟩ lässt sich in eine äquivalente, ε-freie kontextfreie
Grammatik G'=⟨N ' ,  , P' , S '⟩ transformieren.
Beweis:
Sei N  :={A∈ N∣A⇒ g *}. Zeige zunächst, dass N  in endlich vielen Schritten berechnet
werden kann.
N 1 :={A∈N∣A∈P}
Mit
gilt offensichtlich:
N k1 :=N k ∪{A∈ N∣A B1 ... Bl ∈ P und ∀ j: B j ∈N k }
1) N  = ∪ N k =N n
k≥1
2) ∀ k : N k ⊆ N k1⊆ N
3) Mit n=∣N∣ gilt: N n= N nk für alle k ≥1
4) ∈ LG⇔ S ∈N  .
Definieren nun G ' =⟨ N ' ,  , P ' , S ' ⟩ durch
N '=N ∪{S ' }
P ' :=P ∖ {A ∣∈P }∪{S '  ∣S ∈ N  }∪{S '  S }
{
∣
∪ B 1 ... k 1
B  1 A1  2 A2 ...  k Ak  k1∈P ,
{A1 ,... , Ak }⊆N  ,
1 ... k1∈ N ∪ *
}
Es folgt L(G) = L(G'), denn in G' wird die Möglichkeit ε herzuleiten durch die zusätzlichen Regeln
vorweggenommen. Formal erfolgt der Beweis induktiv über die Ableitungslänge.
Klassifikation von Grammatiken
Typ-3: - rechtslinear der Form A wB , A w
- linkslinear der Form A  Bw, A  w
Typ-2: kontextfrei: A 
Typ-1: kontextsensitiv: 1 2 mit ∣1∣≤∣2∣ oder 1 =S 1 2 =
und falls S  existiert, darf S auf keiner rechten Regelseite auftreten.
Typ-0: rekursiv aufzählbaren: 1  2 beliebig
Sprachklassen:
ℒ i :={L⊆ *∣∃G vom Typ i mit L= LG}
Es gilt:
ℒ 3  ⊆ℒ 2  ⊆ℒ 1  ⊆ℒ 0  
– Jede Typ-3-Grammatik ist auch vom Typ 2.
– Jede Typ-2-Grammatik ist in äquivalente ε-freie Typ-2-Grammatik transformierbar.
– Jede ε-freie Typ-2-Grammatik ist vom Typ 1.
– Jede Grammatik ist vom Typ 0.
Falls ∣∣1 , gilt sogar:
ℒ 3  ⊂ℒ 2  ⊂ℒ 1  ⊂ℒ 0  
{a n bn∣n≥1}∈ ℒ 2  ∖ 
ℒ 3  
Beweis später
S aSb∣ab
{a n b n c n∣n≥1}

∈ ℒ 1  ∖ ℒ 2 
Falls ∣∣=1 , gilt:
ℒ 3  =ℒ 2   (ohne Beweis)
Es gilt:
ℒ  

0
Menge aller Sprachen
die durch Grammatiken
erzeugbar ist

abzählbare Menge
⊂
℘
*

Menge aller
formalen Sprachen

nicht abzählbare Menge
Abzählbare und nicht-abzählbare Mengen
Definition 2.6:
Eine Menge M heißt abzählbar, falls sie endlich ist oder falls es eine totale, bijektive Abbildung
f : ℕ M gibt, d.h. jedem m∈M wird eine eindeutige natürliche Zahl zugeordnet und jede
Zahl tritt als Nummer auf.
M ={ f i∣i≥0}={ f 0 , f 1 , f 2 , ...}
Nicht abzählbare Mengen nennt man überabzählbar.
Es gilt:
– Jede Teilmenge einer abzählbaren Menge ist abzählbar.
– Jede Obermenge einer überabzählbaren Menge ist überabzählbar.
Beispiele:
abzählbare Mengen:
{2 n∣n≥0} , ℤ , ℚ ,  *
(lexikographische Aufzählung)
 ℒ 0  
überabzählbar:
ℝ
℘  *
Lemma:
℘  * ist überabzählbar.
Beweis (Diagonalisierungsprinzip nach Cantor):
Annahme, ℘  * sei abzählbar, d.h. ℘  *={L0 , L 1 , L2 ,...} .
Sei  *={w 0 , w 1 , w 2 , ...} eine Aufzählung von  *.
Stelle folgende Tabelle auf:
w0
w1
w2
L0
b00
b01
b02
L1
b10
b11
...
L2
b20
...
...
...
w3
...
b03
...
Mithilfe der Diagonalen der obigen Tabelle definieren wir LD ={w j∣w j ∉L j b jj =0 }∈℘  * .
D.h. es muss ein k geben mit LD = Lk .
Für wk folgt: w k ∈ L D =L k ⇔ w k ∉ Lk =L D q.e.d.
Wortproblem:
Gegeben: Sprache
nicht?
L⊆ * (z.B. durch Grammatik). Gegeben: w ∈ * . Ist w ∈L oder
Frage:
Für welche Sprachklassen ist das Wortproblem entscheidbar, d.h. kann das Problem effektiv gelöst
werden?
Entscheidbare Mengen:
Eine Menge M ⊆U heißt entscheidbar, falls ein Algorithmus angegeben werden kann, der zu
einem o∈U in endlicher Zeit feststellt, ob o∈ M oder o∉M.
Satz 2.2:
Das Wortproblem für Typ-1-Sprachen (und damit auch für Typ-2- und Typ-3-Sprachen) ist
entscheidbar, d.h. es gibt einen Algorithmus, der immer terminiert und zu einer Typ-1-Grammatik G
und einem Wort w ∈ * entscheidet, ob w ∈LG.
Beweisidee:
Für w = ε ist nichts zu zeigen.
Sei w ∈ + . Für jede Ableitung S ⇒ 1 ⇒ 2 ⇒ 3 ⇒ ...⇒  n=v∈ + gilt:
1≤∣1∣≤∣ 2∣≤∣3∣≤...≤∣ n∣=∣v∣ .
Da es nur endlich viele Satzformen ∈ ∪N * der Länge ≤v gibt, kann man durch
systematisches Durchprobieren feststellen, ob w ∈LG oder nicht q.e.d.
Damit folgt:
ℒ 1   Beweis⊂der
echten Inklusion
später
{L∣L entscheidbar}
⊂
Halteproblem
ℒ 0  .
Herunterladen