Teoreticne osnove raˇ cunalništva Iˇlalg.fri.uni-lj.si/~vilfan/greibach.pdf · Teoreticne osnove...
Transcript of Teoreticne osnove raˇ cunalništva Iˇlalg.fri.uni-lj.si/~vilfan/greibach.pdf · Teoreticne osnove...
-
Teoretične osnove rǎcunalništva ISpreminjanje kontekstno-neodvisne gramatike v
normalno obliko po Greibachovi
Boštjan Vilfan
Univerza v Ljubljani
FRI
Pretvorba v NO po Greibachovi – p. 1/15
http://zaphod.fri.uni-lj.si/~vilfan/
-
Trditev 1 (krajšanje izpeljav)
A −→ αBγB −→ β1 | β2 . . . βn
Pretvorba v NO po Greibachovi – p. 2/15
-
Trditev 1 (krajšanje izpeljav)
A −→ αBγB −→ β1 | β2 . . . βn
A −→ αβ1γ | αβ2γ . . . | αβnγ
Pretvorba v NO po Greibachovi – p. 2/15
-
Trditev 2 (odpravljanje leve re-kurzije)
A −→ Aα1 | Aα2 | . . . | Aαn
A −→ β1 | β2 | . . . | βm
– p. 3/15
-
Trditev 2 (odpravljanje leve re-kurzije)
A −→ Aα1 | Aα2 | . . . | Aαn
A −→ β1 | β2 | . . . | βm
A −→ β1B | β2B | . . . | βmB ;
B −→ α1 | . . . αn
B −→ α1B | . . . αnB
– p. 3/15
-
Trditev 2 (odpravljanje leve re-kurzije)
A −→ Aα1 | Aα2 | . . . | Aαn
A −→ β1 | β2 | . . . | βm
A −→ β1B | β2B | . . . | βmB ;
B −→ α1 | . . . αn
B −→ α1B | . . . αnB
A
A αi1
αi2A
A αik
βj
S
βjαik . . . αi2αi1 βjαik . . . αi2αi1
S
A
βjB
αik
B
Bαi2
αi1
– p. 3/15
-
Pretvorba v NO po Greibachovi– priprava
G = 〈V, T, P, S〉
Pretvorba v NO po Greibachovi – p. 4/15
-
Pretvorba v NO po Greibachovi– priprava
G = 〈V, T, P, S〉
privzamemo, da jeG v normalni obliki poChomskem (̌ce ni, jo pretvorimo v slednjo obliko)
Pretvorba v NO po Greibachovi – p. 4/15
-
Pretvorba v NO po Greibachovi– priprava
G = 〈V, T, P, S〉
privzamemo, da jeG v normalni obliki poChomskem (̌ce ni, jo pretvorimo v slednjo obliko)
spremenljivke oštevilčimo:V = {S = A1, A2, . . . , An}
Pretvorba v NO po Greibachovi – p. 4/15
-
Pretvorba v NO po Greibachovi– priprava
G = 〈V, T, P, S〉
privzamemo, da jeG v normalni obliki poChomskem (̌ce ni, jo pretvorimo v slednjo obliko)
spremenljivke oštevilčimo:V = {S = A1, A2, . . . , An}
produkcije, ki že imajo predpisano obliko pustimopri miru
Pretvorba v NO po Greibachovi – p. 4/15
-
Pretvorba v NO po Greibachovi– odpravljanje posredne in ne-posredne leve rekurzije – 1
Vse produkcijeAi −→ Ajα želimo spraviti v takoobliko, da veljai < j.
Pretvorba v NO po Greibachovi – p. 5/15
-
Pretvorba v NO po Greibachovi– odpravljanje posredne in ne-posredne leve rekurzije – 1
Vse produkcijeAi −→ Ajα želimo spraviti v takoobliko, da veljai < j.
pri i = 1 je bodisii = j ali i < j. Drugi primer je vredu.
Pretvorba v NO po Greibachovi – p. 5/15
-
Pretvorba v NO po Greibachovi– odpravljanje posredne in ne-posredne leve rekurzije – 1
Vse produkcijeAi −→ Ajα želimo spraviti v takoobliko, da veljai < j.
pri i = 1 je bodisii = j ali i < j. Drugi primer je vredu.
v prvem primeru uporabimo Trditev 2 in posledičnodobimo novo spremenljivkoB1
Pretvorba v NO po Greibachovi – p. 5/15
-
Pretvorba v NO po Greibachovi– odpravljanje posredne in ne-posredne leve rekurzije – 1
Vse produkcijeAi −→ Ajα želimo spraviti v takoobliko, da veljai < j.
pri i = 1 je bodisii = j ali i < j. Drugi primer je vredu.
v prvem primeru uporabimo Trditev 2 in posledičnodobimo novo spremenljivkoB1kot rezultat se desna stran vseh produkcij zA1 nalevi zǎcne bodisi s koňcnim simbolom (takeprodukcije odslej pustimo pri miru) ali pa sspremenljivkoAj pri j > 1.
Pretvorba v NO po Greibachovi – p. 5/15
-
Pretvorba v NO po Greibachovi– odpravljanje posredne in ne-posredne leve rekurzije – 2
naj bodo produkcije z levo stranjo, ki ima indeksmanjši odi, že v želeni obliki. Pri produkcijah, kiimajo na levi straniAi, imamo tri možnosti: (a)i > j, (b) i = j in (c) i < j (primer c je v redu).
Pretvorba v NO po Greibachovi – p. 6/15
-
Pretvorba v NO po Greibachovi– odpravljanje posredne in ne-posredne leve rekurzije – 2
naj bodo produkcije z levo stranjo, ki ima indeksmanjši odi, že v želeni obliki. Pri produkcijah, kiimajo na levi straniAi, imamo tri možnosti: (a)i > j, (b) i = j in (c) i < j (primer c je v redu).
v primeru a uporabimo Trditev 1 in postopnodosežemo, da imamo opravka le s primerom b(morebiti dobimo tudi nekaj produkcij, katerih desnastran se prǐcenja s koňcnim simbolom. Takeprodukcije odslej pustimo pri miru.)
Pretvorba v NO po Greibachovi – p. 6/15
-
Pretvorba v NO po Greibachovi– odpravljanje posredne in ne-posredne leve rekurzije – 2
naj bodo produkcije z levo stranjo, ki ima indeksmanjši odi, že v želeni obliki. Pri produkcijah, kiimajo na levi straniAi, imamo tri možnosti: (a)i > j, (b) i = j in (c) i < j (primer c je v redu).
v primeru a uporabimo Trditev 1 in postopnodosežemo, da imamo opravka le s primerom b(morebiti dobimo tudi nekaj produkcij, katerih desnastran se prǐcenja s koňcnim simbolom. Takeprodukcije odslej pustimo pri miru.)
v primeru b uporabimo Trditev 2, tako kot prii = 1Pretvorba v NO po Greibachovi – p. 6/15
-
Pretvorba v NO po Greibachovi– odpravljanje posredne in ne-posredne leve rekurzije – 3
Na koncu tega postopka imajo tudi produkcijeAn −→ Ajα lastnostn < j. Vendar, ker takegaj ni,smo tako dobili zagotovilo, da se desna stran vsehprodukcijAn −→ α pričenja s koňcnim simbolom
Pretvorba v NO po Greibachovi – p. 7/15
-
Pretvorba v NO po Greibachovi– odpravljanje posredne in ne-posredne leve rekurzije – 3
Na koncu tega postopka imajo tudi produkcijeAn −→ Ajα lastnostn < j. Vendar, ker takegaj ni,smo tako dobili zagotovilo, da se desna stran vsehprodukcijAn −→ α pričenja s koňcnim simbolom
sedaj zagotovimo slednjo lastnost postopno tudi zaprodukcijeAi −→ α pri i = n − 1, n − 2, . . . , 1
Pretvorba v NO po Greibachovi – p. 7/15
-
Pretvorba v NO po Greibachovi– odpravljanje posredne in ne-posredne leve rekurzije – 3
Na koncu tega postopka imajo tudi produkcijeAn −→ Ajα lastnostn < j. Vendar, ker takegaj ni,smo tako dobili zagotovilo, da se desna stran vsehprodukcijAn −→ α pričenja s koňcnim simbolom
sedaj zagotovimo slednjo lastnost postopno tudi zaprodukcijeAi −→ α pri i = n − 1, n − 2, . . . , 1
na vsakem koraku (morebiti večkrat) uporabimoTrditev 1, kar vsakǐc pověca indeks spremenljivkena zǎcetku desne strani produkcije. Na koncu nazǎcetku desne strani dobimo končni simbol.
Pretvorba v NO po Greibachovi – p. 7/15
-
Pretvorba v NO po Greibachovi– odpravljanje posredne in ne-posredne leve rekurzije – 4
Sedaj imajo vse produkcijeAi −→ α lastnost, da seα pričenja s koňcnim simbolom
Pretvorba v NO po Greibachovi – p. 8/15
-
Pretvorba v NO po Greibachovi– odpravljanje posredne in ne-posredne leve rekurzije – 4
Sedaj imajo vse produkcijeAi −→ α lastnost, da seα pričenja s koňcnim simbolom
preostanejo še produkcijeBi −→ β. Zaβ namrěc šenimamo zagotovila, da se prične s koňcnimsimbolom
Pretvorba v NO po Greibachovi – p. 8/15
-
Pretvorba v NO po Greibachovi– odpravljanje posredne in ne-posredne leve rekurzije – 4
Sedaj imajo vse produkcijeAi −→ α lastnost, da seα pričenja s koňcnim simbolom
preostanejo še produkcijeBi −→ β. Zaβ namrěc šenimamo zagotovila, da se prične s koňcnimsimbolom
vendar to dosežemo zopet z (morebiti večkratno)uporabo Trditve 1
Pretvorba v NO po Greibachovi – p. 8/15
-
Pretvorba v NO po Greibachovi– odpravljanje posredne in ne-posredne leve rekurzije – 4
Sedaj imajo vse produkcijeAi −→ α lastnost, da seα pričenja s koňcnim simbolom
preostanejo še produkcijeBi −→ β. Zaβ namrěc šenimamo zagotovila, da se prične s koňcnimsimbolom
vendar to dosežemo zopet z (morebiti večkratno)uporabo Trditve 1
gl. tudi dokumentgreibach-algoritem.pdf
Pretvorba v NO po Greibachovi – p. 8/15
-
Pretvorba v NO po Greibachovi– Primer – 1
G = 〈{A1, A2, A3}, {a, b}, P,A1〉
Pretvorba v NO po Greibachovi – p. 9/15
-
Pretvorba v NO po Greibachovi– Primer – 1
G = 〈{A1, A2, A3}, {a, b}, P,A1〉
P : A1 −→ A2A3A2 −→ A3A1 | b
A3 −→ A1A2 | a
Pretvorba v NO po Greibachovi – p. 9/15
-
Pretvorba v NO po Greibachovi– Primer – 1
G = 〈{A1, A2, A3}, {a, b}, P,A1〉
P : A1 −→ A2A3A2 −→ A3A1 | b
A3 −→ A1A2 | a
G je že v NOC
Pretvorba v NO po Greibachovi – p. 9/15
-
Pretvorba v NO po Greibachovi– Primer – 1
G = 〈{A1, A2, A3}, {a, b}, P,A1〉
P : A1 −→ A2A3A2 −→ A3A1 | b
A3 −→ A1A2 | a
G je že v NOC
produkcijeAi −→ Ajα pri i = 1, 2 že imajo lastnosti < j
Pretvorba v NO po Greibachovi – p. 9/15
-
Pretvorba v NO po Greibachovi– Primer – 1
Po enkratni uporabi Trditve 1 na spremenljivkiA3dobimo:
P : A1 −→ A2A3A2 −→ A3A1 | b
A3 −→ A2A3A2 | a
(spremenjena desna stran rdeča)
Pretvorba v NO po Greibachovi – p. 10/15
-
Pretvorba v NO po Greibachovi– Primer – 1
Po enkratni uporabi Trditve 1 na spremenljivkiA3dobimo:
P : A1 −→ A2A3A2 −→ A3A1 | b
A3 −→ A2A3A2 | a
(spremenjena desna stran rdeča)
po naslednji uporabi Trditve 1 dobimo:
P : A1 −→ A2A3A2 −→ A3A1 | b
A3 −→ A3A1A3A2 | bA3A2 | aPretvorba v NO po Greibachovi – p. 10/15
-
Pretvorba v NO po Greibachovi– Primer – 2
Sedaj zaA3 uporabimo Trditev 2:
Pretvorba v NO po Greibachovi – p. 11/15
-
Pretvorba v NO po Greibachovi– Primer – 2
Sedaj zaA3 uporabimo Trditev 2:
P : A1 −→ A2A3A2 −→ A3A1 | b
A3 −→ bA3A2B3 | aB3 | bA3A2 | a
B3 −→ A1A3A2B3 | A1A3A2
Pretvorba v NO po Greibachovi – p. 11/15
-
Pretvorba v NO po Greibachovi– Primer – 2
Sedaj zaA3 uporabimo Trditev 2:
P : A1 −→ A2A3A2 −→ A3A1 | b
A3 −→ bA3A2B3 | aB3 | bA3A2 | a
B3 −→ A1A3A2B3 | A1A3A2
desna stran vseh produkcij zA3 na levi se zǎcne skončnim simbolom
Pretvorba v NO po Greibachovi – p. 11/15
-
Pretvorba v NO po Greibachovi– Primer – 3
Sedaj dosežemo isto za spremenljivkoA2 tako, dauporabimo Trditev 1 na produkcijiA2 −→ A3A1 inspremenljivkiA3:
Pretvorba v NO po Greibachovi – p. 12/15
-
Pretvorba v NO po Greibachovi– Primer – 3
Sedaj dosežemo isto za spremenljivkoA2 tako, dauporabimo Trditev 1 na produkcijiA2 −→ A3A1 inspremenljivkiA3:
P : A1 −→ A2A3A2 −→ bA3A2B3A1 | aB3A1
| bA3A2A1 | aA1 | b
A3 −→ bA3A2B3 | aB3 | bA3A2 | a
B3 −→ A1A3A2B3 | A1A3A2
Pretvorba v NO po Greibachovi – p. 12/15
-
Pretvorba v NO po Greibachovi– Primer – 3
Podobno postopamo s spremenljivkoA1 oziromaprodukcijA1 −→ A2A3
Pretvorba v NO po Greibachovi – p. 13/15
-
Pretvorba v NO po Greibachovi– Primer – 3
Podobno postopamo s spremenljivkoA1 oziromaprodukcijA1 −→ A2A3po zamenjavi spremenljivkeA2 dobimo
P : A1 −→ bA3A2B3A1A3 | aB3A1A3| bA3A2A1A3 | aA1A3 | bA3
A2 −→ bA3A2B3A1 | aB3A1| bA3A2A1 | aA1 | b
A3 −→ bA3A2B3 | aB3 | bA3A2 | a
B3 −→ A1A3A2B3 | A1A3A2
Pretvorba v NO po Greibachovi – p. 13/15
-
Pretvorba v NO po Greibachovi– Primer – 4
Sedaj uporabimo še Trditev 1 na začetnispremenljivki desnih strani produkcij zB3 na levi
Pretvorba v NO po Greibachovi – p. 14/15
-
Pretvorba v NO po Greibachovi– Primer – 4
Sedaj uporabimo še Trditev 1 na začetnispremenljivki desnih strani produkcij zB3 na levi
P : A1 −→ bA3A2B3A1A3 | aB3A1A3| bA3A2A1A3 | aA1A3 | bA3
A2 −→ bA3A2B3A1 | aB3A1| bA3A2A1 | aA1 | b
A3 −→ bA3A2B3 | aB3 | bA3A2 | a
Pretvorba v NO po Greibachovi – p. 14/15
-
Pretvorba v NO po Greibachovi– Primer – 4
B3 −→ bA3A2B3A1A3A3A2B3 | aB3A1A3A3A2B3| bA3A2A1A3A3A2B3 | aA1A3A3A2B3| bA3A3A2B3 | bA3A2B3A1A3A3A2| aB3A1A3A3A2 | bA3A2A1A3A3A2| aA1A3A3A2 | bA3A3A2
Pretvorba v NO po Greibachovi – p. 15/15
Trditev 1 (kraj"sanje izpeljav)Trditev 1 (kraj"sanje izpeljav)
Trditev 2 (odpravljanje leve rekurzije)Trditev 2 (odpravljanje leve rekurzije)Trditev 2 (odpravljanje leve rekurzije)
Pretvorba v NO po Greibachovi -- pripravaPretvorba v NO po Greibachovi -- pripravaPretvorba v NO po Greibachovi -- pripravaPretvorba v NO po Greibachovi -- priprava
Pretvorba v NO po Greibachovi -- odpravljanje posredne in neposredne leve rekurzije -- 1Pretvorba v NO po Greibachovi -- odpravljanje posredne in neposredne leve rekurzije -- 1Pretvorba v NO po Greibachovi -- odpravljanje posredne in neposredne leve rekurzije -- 1Pretvorba v NO po Greibachovi -- odpravljanje posredne in neposredne leve rekurzije -- 1
Pretvorba v NO po Greibachovi -- odpravljanje posredne in neposredne leve rekurzije -- 2Pretvorba v NO po Greibachovi -- odpravljanje posredne in neposredne leve rekurzije -- 2Pretvorba v NO po Greibachovi -- odpravljanje posredne in neposredne leve rekurzije -- 2
Pretvorba v NO po Greibachovi -- odpravljanje posredne in neposredne leve rekurzije -- 3Pretvorba v NO po Greibachovi -- odpravljanje posredne in neposredne leve rekurzije -- 3Pretvorba v NO po Greibachovi -- odpravljanje posredne in neposredne leve rekurzije -- 3
Pretvorba v NO po Greibachovi -- odpravljanje posredne in neposredne leve rekurzije -- 4Pretvorba v NO po Greibachovi -- odpravljanje posredne in neposredne leve rekurzije -- 4Pretvorba v NO po Greibachovi -- odpravljanje posredne in neposredne leve rekurzije -- 4Pretvorba v NO po Greibachovi -- odpravljanje posredne in neposredne leve rekurzije -- 4
Pretvorba v NO po Greibachovi -- Primer -- 1Pretvorba v NO po Greibachovi -- Primer -- 1Pretvorba v NO po Greibachovi -- Primer -- 1Pretvorba v NO po Greibachovi -- Primer -- 1
Pretvorba v NO po Greibachovi -- Primer -- 1Pretvorba v NO po Greibachovi -- Primer -- 1
Pretvorba v NO po Greibachovi -- Primer -- 2Pretvorba v NO po Greibachovi -- Primer -- 2Pretvorba v NO po Greibachovi -- Primer -- 2
Pretvorba v NO po Greibachovi -- Primer -- 3Pretvorba v NO po Greibachovi -- Primer -- 3
Pretvorba v NO po Greibachovi -- Primer -- 3Pretvorba v NO po Greibachovi -- Primer -- 3
Pretvorba v NO po Greibachovi -- Primer -- 4Pretvorba v NO po Greibachovi -- Primer -- 4
Pretvorba v NO po Greibachovi -- Primer -- 4