Automaadid, keeled ja translaatorid konspekt

30
Automaadid, keeled ja translaatorid (MTAT.05.085) Rein Raudjärv GENERATIIVSED GRAMMATIKAD TTS BAASIL Sisukord TTSist........................................................... 2 Tähistus......................................................... 2 1. Kontekstivaba grammatika......................................3 Grammatika metakeel........................................... 3 TTS grammatika metakeel....................................... 4 2. Derivatsioon, keel............................................ 5 3. Analüüsi puu, kanooniline derivatsioon........................6 4. Süntaksi analüüsi ülesanne....................................8 5. Eelnevusrelatsioonid, eelnevusgrammatika (EG). KVG teisendamine eelnevusgrammatikaks............................................. 9 Eelnevusrelatsioonide arvutamiseeskiri........................9 Eelnevuskonfliktid........................................... 10 Eelnevusteisendused.......................................... 10 6. Pööratava eelnevusgrammatika analüsaator.....................11 Lausevormi baas.............................................. 11 Pööratavate eelnevusgrammatikate analüsaator.................11 7. Konteksti kasutamine redutseerimiseks ja vastav analüsaator. .12 Sõltumatu kontekst........................................... 12 BRC(1,1) analüsaator......................................... 13 8. Derivatsioonist sõltuv kontekst..............................14 9. Konteksti juurdetoomine......................................16 10. Analüüsi puu moodustamise juhtimine. Analüsaatori lõplik algoritm........................................................ 17 Analüüsi puu liiasus......................................... 17 TTSi semantilised muutujad...................................18 Analüsaatori lõplik algoritm.................................19

description

Automaadid, keeled ja translaatorid (MTAT.05.085)Generatiivsed grammatikad TTS baasil

Transcript of Automaadid, keeled ja translaatorid konspekt

Page 1: Automaadid, keeled ja translaatorid konspekt

Automaadid, keeled ja translaatorid (MTAT.05.085) Rein Raudjärv

GENERATIIVSED GRAMMATIKAD TTS BAASIL

SisukordTTSist...................................................................................................................................2

Tähistus................................................................................................................................2

1. Kontekstivaba grammatika...............................................................................................3

Grammatika metakeel...................................................................................................3

TTS grammatika metakeel............................................................................................4

2. Derivatsioon, keel.............................................................................................................5

3. Analüüsi puu, kanooniline derivatsioon............................................................................6

4. Süntaksi analüüsi ülesanne..............................................................................................8

5. Eelnevusrelatsioonid, eelnevusgrammatika (EG). KVG teisendamine

eelnevusgrammatikaks.........................................................................................................9

Eelnevusrelatsioonide arvutamiseeskiri........................................................................9

Eelnevuskonfliktid........................................................................................................10

Eelnevusteisendused..................................................................................................10

6. Pööratava eelnevusgrammatika analüsaator.................................................................11

Lausevormi baas.........................................................................................................11

Pööratavate eelnevusgrammatikate analüsaator........................................................11

7. Konteksti kasutamine redutseerimiseks ja vastav analüsaator......................................12

Sõltumatu kontekst......................................................................................................12

BRC(1,1) analüsaator..................................................................................................13

8. Derivatsioonist sõltuv kontekst.......................................................................................14

9. Konteksti juurdetoomine.................................................................................................16

10. Analüüsi puu moodustamise juhtimine. Analüsaatori lõplik algoritm............................17

Analüüsi puu liiasus.....................................................................................................17

TTSi semantilised muutujad........................................................................................18

Analüsaatori lõplik algoritm..........................................................................................19

11. TTS Konstruktori üldine skeem....................................................................................20

Lisa 1. Trigoli keele grammatika.........................................................................................21

Page 2: Automaadid, keeled ja translaatorid konspekt

Automaadid, keeled ja translaatorid (MTAT.05.085) Rein Raudjärv

TTSistTranslaatorite tegemise süsteem (TTS) – eeskätt loengukursuse "Automaadid, keeled ja translaatorid" (MTAT.05.085) omandamise hõlbustamiseks loodud programm, mis võimaldab töötada kontekstivabade grammatikatega (KVG): teha Konstruktori tabeleid ja analüüsida antud grammatikale vastava keele sõnu. TTS on realiseeritud Windows95/NT/2000 keskkonnas, programmeerimiskeeled on C ja C++.

Trigol – TTS jaoks loodud primitiivne programmeerimiskeel.

TTS kodulehekülg: http://www.cs.ut.ee/~isotamm/tts/HELP.HTM

Tähistusgrammatikakontekstivaba grammatikaeelnevusgrammatikatähestik ( )mitteterminaalne e. mõistete tähestik ( )terminaalne e. lekseemide tähestik (leksika) ( )produktsioon ( )aksioomprodutseerib (produces)on vahetult tuletatavon tuletatav?

?eelnebajastubjärgneb

Konstruktor(Constructor)

xxx.grm[xxx.sem]

xxx.prmxxx.vxxx.htxxx.pmxxx.txxx.ttxxx.sm[xxx.lc][xxx.rc][xxx.dc]

Analüsaator(Parser)

yyy.xxx

yyy.prmyyy.ptyyy.t[yyy.it][yyy.kt]

Interpretaator(Interpreter)

Lahendamistulemused

Kompilaator(Compiler)

yyy.asmyyy.exe

TTSi üldine skeem

2

Page 3: Automaadid, keeled ja translaatorid konspekt

Automaadid, keeled ja translaatorid (MTAT.05.085) Rein Raudjärv

1. Kontekstivaba grammatika

Def. Generatiivseks grammatikaks nimetatakse järjestatud nelikut , kus

on mitteterminaalne tähestik (non-terminal vocabulary),

on terminaalne tähestik (terminal vocabulary),

on produktsioonide hulk kujul ,

on aksioom – fikseeritud täht tähestikust , mida ei saa kasutada teiste mõistete defineerimisel (produktsiooni paremas pooles).

Mitteterminaalse tähestiku sümboleid nimetatakse mõisteteks (nt. ).

Terminaalse tähestiku (leksika) sümboleid nimetatakse lekseemideks (nt. ).

Hulka nimetatakse antud grammatika tähestikuks.

Def. Tähestiku sümbolite järjendit nimetatakse antud tähestiku sõnaks.

on tähestiku baasil moodustavate kõigi sõnade hulk.

on tähestiku baasil moodustavate kõigi positiivse pikkusega sõnade hulk.

Def. Kontekstivabaks grammatikaks (KVG) nimetatakse generatiivset grammatikat , kus on produktsioonide hulk kujul .

Süntaks – reeglite kogu, mis määrab, kuidas antud keeles kirjutada semantiliselt õigeid lauseid?. Semantilised õiged laused määrab produktsioonide hulk.

Interpretaator on programm, mis jooksutab (executes) teisi programme.

Kompilaator on programm, mis tõlgib teksti ühest arvutikeelest teise.

TTSis koostatakse kõige pealt algkeelsest tekstist nn. analüüsipuu (Analüsaatori ülesanne). TTS Interpretaator läbib analüüsipuu ja „täidab selle käske”. TTS Kompilaator tõlgib analüüsipuu Assembleri keelde.

Transleerimise? käigus muutub grammatika süntaks ja leksika, aga säilib semantika.

Süntaks-orienteeritud transleerimine?.

Grammatika metakeel

Kõige lihtsam on programmides kasutada produktsioonide keelt?.

Algol 60 grammatika pandi kirja BNF meetodil. BNF (Backus Normal Form või Backus-Naur Form) – nagu produktsioonide keel, aga esitus teine: <Mõiste> := <Definitsioon>.

Tundmatu keele kirjeldamiseks on hõlpsasti loetav Pascali grammatika. Näide:

3

Page 4: Automaadid, keeled ja translaatorid konspekt

Automaadid, keeled ja translaatorid (MTAT.05.085) Rein Raudjärv

TTS grammatika metakeel

Näiteks g1.grm. Siin .

Tabel 1. G1.GRM`S'->#`A'#`A'->`B'`C'`B'->a`B'->`B'a`C'->b

Aksioom on nt. programm.

Terminaalse tähestiku elemendid e. lekseemid on programmides need komponendid, millest saab (võib) koosneda süntaktiliselt õige programm:

reserveeritud sõnad – näiteks IF, THEN, GOTO jne;

eraldajad – näiteks (tühik) ; + ( := ;

lekseemiklassid:

o identifikaatorid (TTSis #i#) – objektide, muutujate, protseduuride nimed, harilikult algab tähega, ülejäänud kohtadel on tähed, numbrid või alakriips, pikkuse kitsendused, tõstutundlikkus;

o konstandid (TTSis #c#);

o sõned (TTSis realiseerimata);

o kommentaarid (TTSis realiseerimata).

Grammatikast antakse TTS Konstruktorile ette ainult produktsioonide hulk , tavalise ASCII-failina. Õppegrammatika nimi peab algama g-tähega. Kõikide grammatikate nime laiend on grm. Produktsioonide esitamise metakeel on järgmine:

Mõisted (mitteterminalid) on markerite ` ja ' vahel;

Lekseemid kirjutatakse ilma markeriteta. Kahe järjestikuse lekseemi vahele tuleb panna tühik;

Produktsiooni vasaku ja parema poole vahel on miinusest ja paremast nurksulust moodustatud "nool": ->;

Kui ühte mõistet defineeritakse järjestikustel ridadel korduvalt, siis pole vasemat poolt vaja kirjutada. Soovitav on kasutada tabulatsiooni.

Vt Lisa 1. TTS Konstruktor teeb produktsioonide hulga baasil hulgad ja .

4

Page 5: Automaadid, keeled ja translaatorid konspekt

Automaadid, keeled ja translaatorid (MTAT.05.085) Rein Raudjärv

2. Derivatsioon, keelDef. Olgu antud sõnad . Me ütleme, et sõnast on vahetult tuletatav sõna (tähistame ), kui , ja .

Def. Olgu antud sõnad . Me ütleme, et sõnast on tuletatav sõna (tähistame ), kui leidub selline sõnade jada , et , ja

.

Naturaalarvu nimetame derivatsiooni pikkuseks ja jada derivatsiooniks.

Def. Grammatika poolt defineeritud keeleks nimetatakse kõigi antud

grammatika poolt moodustavate sõnade hulka .

5

Page 6: Automaadid, keeled ja translaatorid konspekt

Automaadid, keeled ja translaatorid (MTAT.05.085) Rein Raudjärv

3. Analüüsi puu, kanooniline derivatsioon

Def. Olgu antud grammatika ja derivatsioon . Siis

jada nimetatakse sõna analüüsiks.

Def. Derivatsioonijada , kus , igat liiget nimetatakse lause vormiks.

Def. Derivatsiooni käigus viimasena toimunud resultaati (mingi produktsiooni paremat poolt) nimetatakse lausevormi baasiks.

Def. Olgu antud grammatika . Antud grammatika derivatsioonipuuks nimetatakse märgendatud tippudega puud:

Üksainus tipp märgendiga on derivatsiooni puu;

Kui on derivatsiooni puu ja tema tipp märgendiga ja , saame moodustada uue derivatsiooni puu , märgendades tipu märgendiga

ja lisades tipule alluvat, mille märgendeiks paneme vasakult paremale .

Def. Derivatsioonipuu, mille märgendid kuuluvad hulka on analüüsipuu.

Def. Kanooniliseks derivatsiooniks nimetatakse sellist derivatsiooni, kus igal derivatsioonisammul asendatakse kõige parempoolsem mitteterminal.

Def. Kontekstivaba grammatikat nimetatakse üheseks (mitmeseks), kui iga sõna jaoks leidub (vastavalt ei leidu) täpselt üks kanooniline derivatsioon ja analüüsi puu.

Pole olemas algoritmi, mis teeks kindlaks, kas grammatika on ühene või mitte.

Kõik grammatikad, mille produktsioonide hulk sisaldab tsüklit kujul või produktsiooni kujul või mille keeles leidub tühisõna, on mitmesed.

Def. Keelt nimetatakse üheseks (mitmeseks), kui talle vastav grammatika on ühene (vastavalt mitmene).

Def. Keelt nimetatakse oluliselt mitmeseks, kui tal ei leidu ühest varianti.

6

Page 7: Automaadid, keeled ja translaatorid konspekt

Automaadid, keeled ja translaatorid (MTAT.05.085) Rein Raudjärv

Näiteid:

1. Kanooniline derivatsioon (g5.grm baasil):

T#S##UV##UcV##Ucc##abcc#

Tabel 2. G5.GRM`T'->#`S'#`S'->`U'`V'`U'->a b`V'->c`V'`V'->c

2. Ühene grammatika:

:

SaSSa

Derivatsioonid:

SaSaaSaSaaSaaa

Ilmselt on ühene.

3. Mitmene grammatika:

:

SSSaSSa

Derivatsioonid:

SaSaaSSaSaa

Kõik derivatsioonid on kanoonilised, ent analüüsipuud on erinevad: on mitmene (aga mitte oluliselt mitmene).

7

Page 8: Automaadid, keeled ja translaatorid konspekt

Automaadid, keeled ja translaatorid (MTAT.05.085) Rein Raudjärv

4. Süntaksi analüüsi ülesanneSüntaksi analüüsi ülesanne on püstitatud nii: on antud grammatika ja sõna . Tuleb välja selgitada,

1) kas antud sõna kuulub sellesse keelde ( );

2) kui kuulub, siis leida sõna derivatsioon.

Olgu sõna pikkus (lekseemide arv) .

1) Kui analüüsimiseks kasutada strateegiat, kus alustame aksioomist ja teeme läbi kõik derivatsioonid jõudmaks -ni ning on mitmene, on parim kiirushinnang .

2) Kui grammatika on ühene, siis garanteerib see strateegia kiirushinnangu .

3) Kui grammatika on eelnevusgrammatikad (EG; EGKVG), siis on kiirushinnang .

Eelnevusgrammatika süntaksi analüüsi samm (derivatsiooni vastand-samm):

1) Detekteerimine – lausevormist baasi ülesleidmine;

2) Redutseerimine – produktsiooni tagurpidi rakendamine (uue lause vormi genereerimine)

8

Page 9: Automaadid, keeled ja translaatorid konspekt

Automaadid, keeled ja translaatorid (MTAT.05.085) Rein Raudjärv

5. Eelnevusrelatsioonid, eelnevusgrammatika (EG).KVG teisendamine eelnevusgrammatikaks

Eelnevusrelatsioonide arvutamiseeskiri

Eelnevusrelatsioonide arvutamiseks leitakse kõigepealt mitteterminalist tuletatavate kõigi sõnade algus- (Leftmost) ja lõppsümbolite (Rightmost) hulgad ja

:

Defineeritakse järgmised eelnevusrelatsioonid:

(loe: ajastub -ga)

(loe: eelneb -ile)

(loe: järgneb -ile)

Siin .

Def. Grammatika eelnevusmaatriksiks nimetatakse -mõõtmelist ruutmaatriksit , kus iga eelnevusrelatsiooni korral on lisatud kõigisse lahtritesse

sümbol , kui .

Füüsilisel tasemel kodeeritakse eelnevusrelatsioone järgmiselt (binary):

000 001 010 100

011 101 110 111

Def. Kontekstivaba grammatikat nimetatakse eelnevusgrammatikaks parajasti siis, kui suvalise kahe sümboli vahel tähestikust kehtib ülimalt üks eelnevusrelatsioon.

Eelnevusgrammatika võimaldab kiiresti ja väikese vaevaga tekstist leida analüüsipuu.

Näiteid

Eelnevusgrammatika on näiteks Tabel 1. G1.GRM ning Lisa 1. Trigoli keele grammatika.

Eelnevusgrammatika ei ole näiteks Tabel 3. G4.GRM.

Tabel 3. G4.GRM`T'->#`S'#`S'->a`A'`S'->b`B'`A'->0`A'1`A'->0 1`B'->0`B'1 1`B'->0 1 1

Iga kontekstivaba grammatika saab teisendada eelnevusgrammatikaks. TTS Konstruktor teeb selle teisenduse automaatselt. teisendatakse , kus

.

9

Page 10: Automaadid, keeled ja translaatorid konspekt

Automaadid, keeled ja translaatorid (MTAT.05.085) Rein Raudjärv

Eelnevuskonfliktid

Def. Situatsiooni, kus ja vahel kehtib üle ühe eelnevusrelatsiooni, nimetatakse eelnevuskonfliktiks.

Eelnevuskonflikte on kaht tüüpi: ja .-konfliktiks nimetatakse situatsiooni, kus , või .-konfliktiks nimetatakse situatsiooni, kus .

Eelnevusteisendused

Konfliktide likvideerimiseks on olemas iteratiivne algoritm:

Tabel 4. Eelnevuskonfliktide likvideerimise algoritm

S1: Kui -konflikte pole, mine S2;

Iga -konflikti jaoks :

o Leia ;o Asenda leitud produktsioon produktsiooniga ;o Lisa uus produktsioon ;

Tee uus eelnevusmaatriks ja mine S1;

S2: Kui -konflikte pole, STOPP;

Iga -konflikti jaoks :

o Leia või ;o Asenda leitud produktsioon produktsiooniga (vastavalt );o Lisa uus produktsioon ;

Tee uus eelnevusmaatriks ja konfliktide korral mine S1, muidu STOPP.

Eelnevuskonfliktide eemaldamist nimetatakse ka vasakfaktoriseerimiseks.

Produktsiooni parema poole lõhkumist nimetatakse stratifikatsiooniks.

10

Page 11: Automaadid, keeled ja translaatorid konspekt

Automaadid, keeled ja translaatorid (MTAT.05.085) Rein Raudjärv

6. Pööratava eelnevusgrammatika analüsaator

Lausevormi baas

Väide. Kui on eelnevusgrammatika ja

, kus , siis

jada on lausevormi baas (viimasena toimis produktsioon ) ja kehtivad relatsioonid:

; ; ; .Siin .

Lausevormi baasile eelneb tema vasak naaber ning järgneb tema ajastatud naaber.

Def. Kui kontekstivaba grammatika produktsioonide hulgas ei leidu ühesuguse parema poolega produktsioone, siis nimetatakse grammatikat pööratavaks grammatikaks.

Pööratavate eelnevusgrammatikate analüsaatorTabel 5. Pööratava eelnevusgrammatika analüsaatori algoritm. Tulemuseks on antud sõna analüüsipuu.

Antud analüüsitav sõna on lekseemide massiiv .

Olgu kolmetraktiline magasin (LIFO-tüüpi), mille esimene trakt on sümbolite, teine relatsioonide ja kolmas analüüsipuu viitade jaoks.

S1: ;

S2: Kui relatsioon sümbolite ja vahel

o puudub, on viga: STOPP;

o :

S3: uus analüüsipuu tipp; Lisa magasini ; ; mine S2;

o :

Kui , siis STOPP; muidu mine S3;

o :

Detekteerimine (lausevormist baasi leidmine):lausevormi baas ( sisu tipust kuni relatsioonini );

Redutseerimine (produktsiooni tagurpidi rakendamine):kui leidub produktsioon , jätka; muidu viga: STOPP;

Tee analüüsipuu uus tipp , ühenda -i kuuluvate tippude viidad ahelasse ja ahela esimene lüli tee alluvaks;

Eemalda magasinist ( tipus on -le eelnev sümbol);

Lisa magasini , siin on relatsioon ja vahel;

Mine S2.

Vaata ka sõna A1.G1 analüüsi.

11

Page 12: Automaadid, keeled ja translaatorid konspekt

Automaadid, keeled ja translaatorid (MTAT.05.085) Rein Raudjärv

7. Konteksti kasutamine redutseerimiseks ja vastav analüsaator

Sõltumatu kontekst

Kui produktsioonide hulgas on kaks produktsiooni kujul ja , siis tekkib redutseerimisprobleem: kas analüüsil tuleb asendada lausevormi baas mitteterminali

või -ga. Sel juhul tuleb kasutada mitteterminali piiratud kanoonilist konteksti (i.k. Bounded Right Context) e. mitteterminali piiratud sõltumatut konteksti:

analüüsisammu määravad siis üheselt lausevormi baas , üks sümbol vasakult ja üks sümbol paremalt.

Üldjuhul: on piiratud kanooniline kontekst, sümboliga vasakult ning sümboliga paremalt.

Väide. Kui ,

siis kehtivad relatsioonid:

;

.

Moodustatakse mitteterminali vasaku (left context) ja parema sõltumatu konteksti (right context) hulgad ja :

Vasaku konteksti moodustavad eelnevusmaatriksis mitteterminalile vastavas veerus mittetühjadele lahtritele (loevad ainult ja , mitte ) vastavate ridade sümbolid.

Parema konteksti moodustavad eelnevusmaatriksis mitteterminalile vastavas reas mittetühjadele lahtritele vastavate veergude lekseemid.

Def. Hulka nimetatakse mitteterminali -sõltumatuks kanooniliseks kontekstiks.

Def. Kui ning kehtib , siis ütleme, et mitteterminalide ja sõltumatud kontekstid eristuvad ning on -redutseeritav eelnevusgrammatika.

12

Page 13: Automaadid, keeled ja translaatorid konspekt

Automaadid, keeled ja translaatorid (MTAT.05.085) Rein Raudjärv

BRC(1,1) analüsaatorTabel 6. BRC(1,1) analüsaatori algoritm (Markeeritud on erinevused võrreldes pööratava EG analüsaatoriga)

Antud analüüsitav sõna on lekseemide massiiv .

Olgu kolmetraktiline magasin (LIFO-tüüpi), mille esimene trakt on sümbolite, teine relatsioonide ja kolmas analüüsipuu viitade jaoks.

S1: ;

S2: Kui relatsioon sümbolite ja vahel

o puudub, on viga: STOPP;

o :

uus analüüsipuu tipp; Lisa magasini ; ; mine S2;

o :

Kui , siis STOPP; muidu mine S3;

o :

S3: Detekteerimine (lausevormist baasi leidmine):lausevormi baas ( sisu tipust kuni relatsioonini );

Redutseerimine (produktsiooni tagurpidi rakendamine):kui leidub produktsioon , jätka; muidu viga: STOPP;

Kui on ainult üks selline produktsioon, mine S4;

; kas on mitu mitteterminali , kus ?

Ei: mine S4;

Jah: see , mille ;

S4: Tee analüüsipuu uus tipp , ühenda -i kuuluvate tippude viidad ahelasse ja ahela esimene lüli tee alluvaks;

Eemalda magasinist ( tipus on -le eelnev sümbol);

Lisa magasini , siin on relatsioon ja vahel;

Mine S2.

Pööratava analüsaatori algoritm on analüsaatori algoritmi erijuht, kui redutseerimisel leidub alati ainult üks produktsioon .

13

Page 14: Automaadid, keeled ja translaatorid konspekt

Automaadid, keeled ja translaatorid (MTAT.05.085) Rein Raudjärv

8. Derivatsioonist sõltuv kontekstKui produktsioonide hulgas on kaks produktsiooni kujul ja ning kehtib

, siis pole -redutseeritav eelnevusgrammatika. Paljudel sellistel juhtudel aitab derivatsioonist sõltuv kontekst ( nim. ka sõltumatuks kontekstiks, kuivõrd kontekst leitakse eelnevusmaatriksist sõltumatult derivatsioonist.)

Derivatsioonist sõltuva konteksti autor on Mati Tombak.

Moodustatakse mitteterminali vasaku (left context) ja parema sõltuva konteksti (right context) hulgad ja :

Siin: .

Def. Hulka nimetatakse mitteterminali

derivatsioonist sõltuvaks kontekstiks.

Väide. arvutuseeskiri on järgmine:

Def. Kui ning kehtib , siis ütleme, et mitteterminalide ja derivatsioonist sõltuvad kontekstid eristuvad ning on -redutseeritav eelnevusgrammatika.

Derivatsioonist sõltuva konteksti arvutuseeskiri võib tekitada lõpmatu tsükli e. ringsõltuvuse (nn „surmahaare”). Sellisel juhul sõltuv kontekst ei eristu.

Analüüsi põhimõtteline algoritm on sama, mis -redutseeritava grammatika jaoks.

14

Page 15: Automaadid, keeled ja translaatorid konspekt

Automaadid, keeled ja translaatorid (MTAT.05.085) Rein Raudjärv

Sõltuva kontekstiga grammatika näide

Tabel 7. G8.GRM`T'->#`S'#`S'->a`A'a`S'->b`A'b`S'->a`B'b`S'->b`B'a`A'->1`B'->1

Näiteks Tabel 7. G8.GRM puhul mitteterminalide ja sõltumatu kontekst kattub täielikult: .

Keeles on ainult 4 sõna:

ja näeme, et kontekst on ning kontekst on .

Vaata ka sõna Y.G8 analüüsi.

Mitteredutseeritava grammatika näide

Grammatika Tabel 3. G4.GRM pole redutseeritav.

15

Page 16: Automaadid, keeled ja translaatorid konspekt

Automaadid, keeled ja translaatorid (MTAT.05.085) Rein Raudjärv

9. Konteksti juurdetoomineKui sõltuv kontekst ei eristu, siis on paratamatu inimese sekkumine: pole teada algoritmi, millega saaks garanteeritult grammatikat nii teisendada, et ta oleks redutseeritav. Translaatori tegijale soovitatakse võimaluse korral juurde tuua vasakut konteksti ja kui see pole võimalik, siis tuleb muuta keelt.

Näide

Vaatame, millest on tingitud grammatika Tabel 3. G4.GRM konteksti eristamatus.

Teeme kaks derivatsiooni:

Püüame juurde tuua erineva vasaku konteksti, asendades kaks produktsiooni:

produktsioon produktsiooniga ja

produktsioon produktsiooniga

ja lisades kaks uut produktsiooni:

Selliselt parandatud grammatika on Tabel 8. G41.GRM.

Tabel 8. G41.GRM`T'->#`S'#`S'->a`A'`S'->b`B'`A'->`C'`A'1`A'->0 1`B'->`D'`B'1 1`B'->0 1 1`C'->0`D'->0

16

Page 17: Automaadid, keeled ja translaatorid konspekt

Automaadid, keeled ja translaatorid (MTAT.05.085) Rein Raudjärv

10. Analüüsi puu moodustamise juhtimine. Analüsaatori lõplik algoritm

Analüüsi puu liiasus

Vajadus analüüsi puu moodustamise juhtimiseks tuleneb sellest, et analüsaator teeb liiase puu.

Näiteks Lisa 1. Trigoli keele grammatika teeb derivatsiooni sõnani järgmiselt (loobume mitteterminalide apostroofidest ja sõna ümbritsevatest markeritest):

programm programm12 operaatorid operaator omistamine muutuja:=omistamine1 muutuja:=aritmav muutuja:=aritmav+aritmav2 muutuja:=aritmav+yksliige muutuja:=aritmav+tegur muutuja:=aritmav+1 muutuja:=yksliige+1 muutuja:=tegur+1 muutuja:=a+1 y:=a+1

Analüüsi puu (esitame keskjärjekorras läbituna) on järgmine:

programm(programm12)programm12(operaatorid)operaatorid(operaator)operaator(omistamine)omistamine(muutuja := omistamine1)muutuja(y)y( )omistamine1(aritmav)aritmav(yksliige)aritmav(aritmav + aritmav2)yksliige(tegur)tegur(a)a( )aritmav2(yksliige)yksliige(tegur)tegur(1)1( )

Vaja on aga sellist puud:

programm(omistamine)omistamine(y aritmav)y( )aritmav(a 1)a( )1( )

17

Page 18: Automaadid, keeled ja translaatorid konspekt

Automaadid, keeled ja translaatorid (MTAT.05.085) Rein Raudjärv

TTSi semantilised muutujad

Puu moodustamist juhitakse semantiliste muutujate abil – need on naturaalarvud , mis seotakse lihtsa keele abil kas produktsioonide või terminaalse tähestiku sümbolitega.

TTSis esitatakse semantika lihtsa ASCII-failina, mille nimeks on xxx.sem (grammatikale xxx.grm). Näiteks Trigoli keele semantika on järgmine:

Tabel 9. TRI.SEM4=1 $ #i#11=2 $ #c#p32=3 $ <p33=4 $ >p34=5 $ <=p35=6 $ >=p36=7 $ /=p37=8 $ =p13=10 $ omistamine->muutuja:=omistamine1p26=11 $ yksliige->yksliige/tegurp25=12 $ yksliige->yksliige*yksliige4p21=13 $ aritmav->aritmav-aritmav3p20=14 $ aritmav->aritmav+aritmav2p12=15 $ label->#i#p18=16 $ suunamine->GOTO labelp44=18 $ tingimus->IF loogilav THEN$ p17=19 iflause->tingimus operaatorp45=20 $ lugemine->READ #i#p46=21 $ kirjutamine->WRITE #i#

Vaatame siit nt. kahte rida:

4=1 $ #i#p13=10 $ omistamine->muutuja:=omistamine1

järjekorranumber tähestikus on 4 (seda on hõlpus leida Trigoli grammatika terminaalsest sõnastikust (vt. Konstruktori protokolli Tri.htm osa „Terminal alphabet”)) ning identifikaatorite semantika .

Märgiga „$” algav reaosa on fakultatiivne; see on mõeldud semantikafaili lugemise hõlbustamiseks.

Produktsiooni „omistamine->muutuja:=omistamine1” järjekorranumber produkt-sioonide hulgas on 13 (vt. Konstruktori protokolli Tri.htm osa „Productions”) ja tema semantika .

Semantikafaili töötleb Konstruktor. Kui xxx.sem pole ette antud, siis Konstruktor genereerib selle ise, omistades semantika kõigile terminalidele ja kõigile produktsioonidele (soovitada võibki uue grammatika puhul nii teha – Konstruktor teeb veatu ja kommenteeritud tekstifaili ja sellega on lihtne manipuleerida, elimineerides mittevajaliku semantika vastava rea kommentaariks muutmisega, lisades rea algusse „$”).

18

Page 19: Automaadid, keeled ja translaatorid konspekt

Automaadid, keeled ja translaatorid (MTAT.05.085) Rein Raudjärv

Analüsaatori lõplik algoritmTabel 10. Analüsaatori lõplik algoritm (Markeeritud on erinevused võrreldes BRC(1,1) analüsaatoriga)

Antud analüüsitav sõna on lekseemide massiiv .

Olgu kolmetraktiline magasin (LIFO-tüüpi): trakt on sümbolite, relatsioonide ja analüüsipuu viitade jaoks.

S1: ;

S2: Kui relatsioon sümbolite ja vahel

o puudub, on viga: STOPP;

o :

Kui : uus analüüsipuu tipp; muidu ;

; ; mine S2;

o :

Kui , siis STOPP; muidu mine S3;

o :

Detekteerimine (lausevormist baasi leidmine):lausevormi baas ( sisu tipust kuni relatsioonini );

Redutseerimine (produktsiooni tagurpidi rakendamine):kui leidub produktsioon , jätka; muidu viga: STOPP;

Kui on ainult üks selline produktsioon, mine S4;

; kas on mitu mitteterminali , kus ?

Ei: mine S4;

Jah: see , mille ;

S4: Läbi lausevormi baasile vastav osa -st vasakult paremale ja ühenda viidatud tipud omavahel ahelasse (kui tipul on naabrid, siis ühenda ka need),

viit ahela esimesele lülile. Võib juhtuda, et .

Eemalda magasinist;

. , kus on relatsioon ja vahel.

Kui , siis uus analüüsi puu tipp; ; -i alluv .

Kui , siis ;

S3: ; kui , siis mine S2.

19

Page 20: Automaadid, keeled ja translaatorid konspekt

Automaadid, keeled ja translaatorid (MTAT.05.085) Rein Raudjärv

11. TTS Konstruktori üldine skeemTabel 11. TTS Konstruktori üldine skeem

Konstruktori lähteandmeteks on keele xxx produktsioonide hulk xxx.grm ja fakultatiivselt xxx semantikafail xxx.sem.

Käsurealt käivitatuna: wcr32 xxx

S1: Moodusta KVG xxx.grm baasil terminaalne ja mitteterminaalne tähestik ja ;

S2: Moodusta jaoks hulgad ja .

Koosta -maatriks ( ) ja kanna sinna kõik sümbolite vahelised eelnevusrelatsioonid. on eelnevusmaatriks

Kas xxx on eelnevusgrammatika?

o Kui ei, siis tee eelnevusteisendused ja mine S2;

Kas xxx on pööratav eelnevusgrammatika?

o Kui jah, siis mine S3;

Moodusta sõltumatu konteksti hulgad maatriksitena -maatriks ja -maatriks ( );

Kas sõltumatu kontekst eristub?

o Kui jah, siis kirjuta kettale xxx.lc ja xxx.rc; mine S3;

Moodusta derivatsioonist sõltuva konteksti hulgad nende mitteterminalide jaoks, mille sõltumatu kontekst ei eristu;

Kas sõltuv kontekst eristub?

o Kui jah, siis kirjuta kettale xxx.lc, xxx.rc ja xxx.dc; mine S3;

Kirjuta kettale xxx.htm (Konstruktori logi) ja välju Konstruktorist.

Püüa käsitsi juurde tuua vasakut konteksti (so. paranda grammatikat) ja mine S1;

S3: Kas kettal on semantikafail xxx.sem?

o Kui ei, siis genereeri tekstifail xxx.sem;

Tee parameetrite tabel xxx.prm ja semantikatabel xxx.sm; kirjuta kettale xxx.prm, xxx.sm, xxx.v (tähestiku puu), xxx.ht (redutseerimistabel), xxx.t (tähestik ), xxx.tt (skanneri tabel), xxx.htm (Konstruktori logi) ja xxxrd.htm (Konstruktori tabelid – vt. nt. g8rd.htm). Välju Konstruktorist.

20

Page 21: Automaadid, keeled ja translaatorid konspekt

Automaadid, keeled ja translaatorid (MTAT.05.085) Rein Raudjärv

Lisa 1. Trigoli keele grammatikaTRI.GRM`programm' -> `programm12'#`programm12' -> #`operaatorid'`operaatorid' -> `operaator'

-> `operaatorid13';`operaatorid'`operaatorid13' -> `operaator'`operaator' -> `label':`operaator'

-> `omistamine'-> `iflause'-> `suunamine'-> `lugemine'-> `kirjutamine'

`label' -> #i#`omistamine' -> `muutuja':=`omistamine1'

-> `muutuja':=`loogilav'`omistamine1' -> `aritmav'`muutuja' -> #i#`iflause' -> `tingimus'`operaator'`suunamine' -> GOTO`label'`aritmav' -> `yksliige'

-> `aritmav'+`aritmav2'-> `aritmav'-`aritmav3'

`aritmav2' -> `yksliige'`aritmav3' -> `yksliige'`yksliige' -> `tegur'

-> `yksliige'*`yksliige4'-> `yksliige'/`tegur'

`yksliige4' -> `tegur'`tegur' -> #i#

-> #c#-> (`tegur5'

`tegur5' -> `aritmav')`loogilav' -> `aritmav'<`loogilav6'

-> `aritmav'>`loogilav7'-> `aritmav'<=`loogilav8'-> `aritmav'>=`loogilav9'-> `aritmav'/=`loogilav10'-> `aritmav'=`loogilav11'

`loogilav6' -> `aritmav'`loogilav7' -> `aritmav'`loogilav8' -> `aritmav'`loogilav9' -> `aritmav'`loogilav10' -> `aritmav'`loogilav11' -> `aritmav'`tingimus' -> IF`loogilav'THEN`lugemine' -> READ #i#`kirjutamine' -> WRITE #i#

21