Teoreticne osnove raˇ cunalništva Iˇlalg.fri.uni-lj.si/~vilfan/greibach.pdf · Teoreticne osnove...

40
Teoreti ˇ cne osnove ra ˇ cunalništva I Spreminjanje kontekstno-neodvisne gramatike v normalno obliko po Greibachovi Bo ˇ stjan Vilfan Univerza v Ljubljani FRI Pretvorba v NO po Greibachovi – p. 1/15

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