You are on page 1of 7

Automaadid, keeled ja translaatorid

Translaator programm, mis saab ette lhtekeeles kirjutatud programmi teksti ja tagab selle titmise arvutil. Kompilaator translaator, mis tlgib hest programmeerimiskeelest teise. Liigitatakse Assembler assemblerkoodist masinkoodi Makroassembler makroassemblerkoodist assemblerkoodi Krgtaseme keelest mnda madalama tasemega keelde, mille jaoks on olemas efektiivsed translaatorid.

Viimasel juhul nt krgtasemekeelest C-keelde, tulem antakse ttlemiseks C-kompilaatorile. Interpretaator lhteprogrammi keelele orienteeritud programm, mis teeb seda, mis lhteprogramm tahab. Sobib probleemorienteeritud keelte realiseerimiseks, annab interaktiivsuse. Nt LISP. 1950 Noam Chomsky, generatiivne grammatika Backus Naur form (BNF) metakeel programmeerimiskeelte kirjeldamiseks. Misted eraldajate <, > vahel ::= - definitsiooni kohaselt | - alternatiivsed definitsioonid Muud snad vi mrgid kujutavad keele legaalseid smboleid (reserv- ja vi vtmesnad)

Lekseemid smbolid, millest programmi nhtav tekst koosneb. Reservsnad, nt GOTO; IF; THEN jne Eraldajad nt #; ; ; : ; (); jne Lekseemiklassid, nt #i# (identifikaator); #c# (konstant). Defineeritakse tavaliselt verbaalselt, sh moodustamise reeglid. Thimikud, tabulatsioonid. Ei kasutata lekseemide sees, mujal piirangud puuduvad. ldmarkerite ## vahel (eraldajad) on kogu programmi tekst. Lekseemimarkerid (#c# jt) on kasutusel ainult keele defineerimisel, programmis aga mitte.

Transleerimise (alam)lesanded 1. Tuvastaja jagab programmi teksti viksemateks sntaktilisteks ksusteks kuni lekseemide tuvastamiseni. Tuvastaja on vimeline vastama, kas etteantud (st analsitav) tekst on korrektne vi ei. lesanne pole andmestruktuuride genereerimine. 2. Tehnika valimine a. Konkreetsele keelele teeme mingid sisseehitatud struktuurid, kusjuures optimeerime judlusele ja efektiivsusele, b. ldistele / keele klassile TTS (translaatorite tegemise ssteem). TTS saab ette keele formaalse kirjelduse ja programmi algteksti. 3. Teisendame lhteprogrammi teksti puustruktuuriks. 4. Olles saanud adekvaatse puu

a. Interpretaator b. Kompilaator Kompilaator ldjuhul kiirem, kuid seda enamasti interpretaatori interaktiivsuse tttu (kasutaja reaktsiooniajast sltuv).

Kontekstivabad grammatikad
String suvaliste nhtavate mrkide jada pikkusega 0 . Thja stringi (pikkusega 0) thistame . Thjade stringide hulk, st thisna.

Smbol suvaline string Thestik = ; mingit printsiipi jrgides moodustatud smbolite hulk.

Mitteterminaalne thestik (nonterminalid) - ; defineeritavate mistete hulk. Terminaalne thestik (terminalid) ; smbolite hulk, mida saab kasutada antud grammatikaga defineeritud keele tekstides. Elementideks terminalid ehk lekseemid. , st hulgad ei ole likuvad.

- Terminaalse thestiku baasil moodustatavate snade (st programmide) hulk. - Thestiku baasil moodustavate snade hulk. Kasutatakse mistete defineerimisel.

Nt. Omistamine on miste, mida defineeritakse stringiga

, st keelame ra produktsioonid kujul keerukuse tuntava alanemise. Mistete defineerimine

, tagab programmi puu moodustamise ajal

Formaalses grammatikas tuleb defineerida kik misted. Defineerimiseks kasutatakse tavaliselt Chomsky normaalkuju (CNF):

Klassikaline Chomsky klassifikatsioon Klass 0, kitsenduseta keeled: Reeglid kujul ;

Klass 1, kontekstitundlikud keeled: Reeglid kujul Klass 2, kontekstivabad keeled: Reeglid kujul Klass 3, regulaarsed keeled: Reeglid kujul vi ; ;

Kontekstivabad grammatikad Kontekstivaba grammatika (KVG) nelik ( , , , ), kus

mitteterminaalne (mistete) thestik terminaalne thestik produktsioonide hulk kujul , kus ning - aksioom: fikseeritud tht thestikust , mida ei saa kasutada teiste mistete defineerimiseks, ent mis ise peab olema defineeritud. Programmeerimiskeelte puhul on loomulikuks aksioomiks miste programm.

Generatiivsed grammatikad aksioomist lhtuvalt on vimalik genereerida kik antud grammatikaga defineeritud keele snad. Kui sna on , siis on genereeritavad kik need snad , mida me saame tuletada aksioomist produktsioonide abil. Olgu . ( ), kui ning .

tleme, et -st on vahetult tuletatav , tleme, et snast

on tuletatav ( ) sna , kui leidub snade jada , selline, et ja , ja . derivatsiooniks.

Naturaalarvu k nimetame derivatsiooni pikkuseks ja jada

Kanooniline derivatsioon ( igal sammul asendatakse kige parempoolsem mitteterminal. Alustades tuletamist aksioomist saab derivatsiooni abil genereerida iga antud keele sna. Derivatsioon on lppenud, kui viimases snas pole enam ainsatki mitteterminali. Kanoonilisus tagab, et analsimagasini tipus on alati jrgmist redutseerimissammu loomulikult vimaldav lause vormi baas, st saame magasini tipmisest elemendist alustades leida lause vormi baasi. Lause vorm kui derivatsioon on lause vorm. KVG poolt defineeritud keel

, kus KVG nelikuga ( ,

, siis

) on

, , ) poolt defineeritud keel on hulk

Sntaksianalsi lesande pstitus On antud KVG ja sna : Kas ? Kui kuulub, siis leida sna derivatsioon aksioomist . Alt-les anals, eesmrgiks taastada kanooniline derivatsioon aksioomist on sna derivatsioon aksioomist : ja

snani . , siis jada

Sna x anals Kui on sna anals.

Lause vormi baas mingi produktsiooni parem pool, mis jrgmisel analsisammul asendatakse tolle produktsiooni vasaku poolega. KVG derivatsiooni puu on jrgmiste reeglite kohaselt mrgendatud puu: ksainus tipp mrgendiga (s.o aksioom) on derivatsiooni puu; Kui on derivatsiooni puu ja tema tipp mrgendiga ning saame moodustada uue derivatsiooni puu , asendades tipu mrgendiga ning lisades tipule p alluvat, millede mrgendeiks paneme (vasakult paremale) . , .

Analsi puu Derivatsiooni puu, mille kik mrgendid kuuluvad hulka

Sntaksorienteeritud transleerimine Etteantud programmi tekstist taastatakse ta kanooniline derivatsioon aksioomist S ja ehitatakse analsi puu. hene grammatika Grammatika on hene, kui igale tema poolt defineeritud keele snani leidub parajasti ks kanooniline derivatsioon. Mitmene, kui mitu. Oluliselt mitmene, kui grammatikast ei leidu hest varianti. hesuse saavutamiseks, ei tohi produktsioonide hulk sisaldada tskleid ega produktsioone, mille parempool on thisna. Aitab saavutada lineaarse ajalise keerukusega analsi.

Eelnevusgrammatikad
Analsaatori teoreetilise ajalise keerukuse hinnang hene grammatika eelnevusgrammatikad

Detekteerimine lause vormi baasi otsimine. Redutseerimine detekteeritud baasi asendamine mingi produktsiooni vasema poolega. Eelnevusrelatsioonid thestiku V elementide vahel fikseeritud, lhtuvalt smbolite paiknemisest produktsioonide paremates pooltes, eelnevus-jrgnevus tingimused. Et analsi eesmrgiks on taastada kanooniline derivatsioon mingist snast, siis eelnevusrelatsioonid vimaldavad tuvastada produktsioonide paremaid pooli, . Mitteterminalist tuletatavate snade algus- ja lpusmbolite hulgad [ [ Eelnevusrelatsioonid ] ]

< >

ajastub eelneb jrgneb [ [ X ja Y vahel puudub relatsioon ] ]

Eelnevusgrammatika KVG on Eelnevusgrammatika, kui suvalise paari kehtib limalt ks eelnevusrelatsioon.

ja

vahel thestikust

Eelnevusmaatriks - | | | | maatriks, mille esimesed read ja veerud on terminaalsetele ja lejnud mitteterminaalsetele smbolitele. (Ksitsi leidmisel, leida relatsioonid jrjekorras ajastub, eelneb, jrgneb) Eelnevuskonflikt Situatsiooni, kus mis tahes kahe elemendi vahel thestikust V kehtib samal ajal rohkem kui ks eelnevusrelatsioon, nimetatakse eelnevuskonfliktiks. Vrdsed keeled Keeled snade hulga. ja on vrdsed, kui nende grammatikad genereerivad sama

P1-konflikt (krvaldamiseks asendatakse esimene pool) situatsioon, kus

> , <> , <>


P2-konflikt (krvaldamiseks asendatakse teine pool) situatsioon, kus

<
Konfliktide likvideerimine Kuivrd P2-konfliktide krvaldamise kigus vib lisanduda uusi P1-konfliktide allikaid siis likvideeritakse esmalt P2-konfliktid. Modifitseerime konflikti phjustanud produktsiooni, lisame uusi mitteterminale ja nende definitsioone o P1 allikas vi , kus , asendame vi ning lisame . o P2 allikas , asendame , lisame . Prast P2-konfliktide likvideerimist, leiame uue (avastamaks uusi P1 konflikte) ja likvideerime P1-konfliktid. Teeme uued lpu- ja algussmbolite hulgad ning leiame eelnevusmaatriksi. ja )

Pratav eelnevusgrammatika -

Pratavate eelnevusgrammatikate analsaator Toimub LIFO magasini abil ning seda juhivad eelnevusrelatsioonid Magasin kolmetraktiline: o Smbol, lekseem vi redutseeritud miste o Relatsioon magasinis eelneva ja antud elemendi vahel o Viit ehitatava analsi puu tipule (kui lesandeks on puu ehitamine) FIFO magasin lause vormi baasi kogumiseks. Loeme sna smbol haaval, kui magasini tipmise elemendi ja sisendreal ootava smboli vahel on relatsioon eelneb vi ajastub, lisame smboli magasini. Kui relatsioon on jrgneb, siis eemaldame LIFO magasinist elemente ning lisame nad FIFO magasini, kuni eemaldatava elemendi relatsiooniks on eelneb. FIFO magasinis on lause vormi baas. Otsime relatsiooni redutseerimiseks. o Kui relatsioon leidub, redutseerime.

o Kui ei, viga. Kui relatsioon FIFO magasini tipmise elemendi ja sisendreal ootava smboli vahel on eelneb ning smbol on #, siis lpp.

Analsi (tis) puu moodustamine Praktilises analsi puus (st saame ehitada interpretaatori vi kompilaatori) mrgendame mitterippuvaid tippe produktsioonide asemel nende vasemate pooltega, st mitteterminaalsete smbolitega. Tipu esitamiseks sobib struktuur, milles on mrgend, lesviit (vimaldab puud lbida lppjrjestuses ilma magasini ja rekursioonita; vrtustatud ainult viimases naabri tipus, kus viit naabrile on thiviit), viit naabrile, viit jrgmisele tipule. 1. Iga smboli kandmisel magasini kaasneb puu uue tipu loomine, viit sellele kirjutatakse magasini 3. trakti. 2. Prast detekteerimist hendame lause vormi baasi moodustavad tipud ahelasse, kusjuures viimase ahela tipu lesviidaks kirjutame asendatava mitteterminaliga mrgendatud tipu viida. 3. Asendatava mitteterminaliga mrgendatud tipu viida kirjutame magasini kolmandasse trakti, kohale kus asendatav mitteterminal asub.

Semantika Liiase mra eemaldamiseks tispuust, ehitatakse produktsioonide ja / vi terminaalse thestikuga seotud naturaalarvuliste semantikamuutujate ( abil nn hre puu. tleme, et produktsioonil vi smbolil on semantika, kui temaga seotud semantikamuutuja vrtus . Hreda puu moodustamine Analoogne tis puu moodustamisega Iga smboli kandmisel magasini moodustatakse tipp ksnes siis, kui tal on semantika. Prast detekteerimist hendame lause vormi baasi moodustavad tipud ahelasse (tipud, milles viit on thiviit, st eelmises sammus neile tippu ei moodustatud, jtame vlja). Redutseerimise kigus, kui lause vormi baas asendatakse mitteterminaliga , o loome -le tipu parajasti siis, kui tal on semantika. Lisame magasini 3. trakti (kohal, kus on smbol ) viida tipule . Seejrel anname eelnevalt moodustaud ahela (kui see eksisteerib) tema alluvusse, kusjuures ahela viimase tipu lesviidaks saab viit tipule . o Kui aga semantika puudub, siis lisame magasini 3. trakti (kohal, kus on smbol ) viida ahelale (kui see eksisteerib).

Konteksti kasutav anals


Eelnevalt toodud anals tugineb eeldusele, et grammatika on pratav. Vime grammatika kll defineerida pratavana, ent tingimata mitte nii, et grammatika oleks eelnevusgrammatika. Viimasest johtuvalt vib eelnevusteisenduste kigus juhtuda, et produktsioonide paremad pooled ei ole enam unikaalsed. Sltumatu kontekst Vasak kontekst on magasinis ning parem kontekst sisendrea vasakpoolseim smbol. Saame leida mitteterminali vasaku ja parema konteksti hulgad [ [

< <

] >

| |

sltumatu kanooniline kontekst Hulk

. , ning on |

(ks-kriips-ks) redutseeritav eelnevusgrammatika Kui ja , siis tleme, derivatsioonist sltumatud kontekstid eristuvad ning | | redutseeritav eelnevusgrammatika. Kui sltumatu kontekst ei eristu, siis leiame sltuva konteksti. Mitteterminali derivatsioonist sltuv kontekst , kus [
Kui on mitteterminal, siis saame hulga kigi

]
elemendi baasil paari.

Sltumatu konteksti

kigi

elemendi baasil saame

paari.

[
Kui | | ja | | , siis m vi m * n paari.

On vimalik, et leidmisel vajame mne teise miste sltuva konteksti leidmist jne kuni juame taas A sltuva konteksti leidmiseni, st tekib nn surmahaarde situatsioon.

(ks-koma-ks) redutseeritav eelnevusgrammatika - Kui ja , ning , siis tleme, et derivatsioonist sltuvad kontekstid eristuvad ning on redutseeritav eelnevusgrammatika.

TTS
Translaatorite tegemise ssteem ldistatud programmide pakett, mille sisendiks on programmeerimiskeele sntaksireeglite kogum (kas BNF notatsioonis vi niteks produktsioonide keeles esitatuna) ning vljundiks ideaalis tolle keele translaator (s.o ttav programm) vi keeles kirjutatud programmi(de) analsi puud. TTS-i 3 phikomponenti 1. Konstruktor Saades ette grammatika produktsioonide hulga (vimalik, et ka semantika faili), testib etteantud grammatikat (Kas on eelnevusgrammatika, pratav, BRCredutseeritav?) ning vljastab asjakohased tabelid. 2. Analsaator Sisendiks konstruktori poolt genereeritud tabelid ja lhtekeeles kirjutatud programmi (sna) , vljundiks veateated vi andmestruktuurid: analsi (hre) puu ja konstantide ning identifikaatorite tabelid. 3. Tuleb programmeerida, interpretaator / kompilaator.

Vt lisaks Optimeerimine, TTSi komponendid ja nende lesehitus, Automaadi miste.

You might also like