# Lõputöö analüsaator

# Tekstianalüüsi tulemused

Lausete arv: 297 - Sõnade arv: 5121

Analüüsiks kulunud aeg: 194.483 sekundit

Uus analüüs

##### Järgnevates lausetes leidub mina- või meie-vormi:

meil
3.1 OperaatoriforalltingimusedOlgu meil lausearvutusvalem, mille mingi alamosa koosneb järgnevatest osadest javõtmesõnadest:1.&#34;\forall&#34;, mis on märgend makro alustamiseks;2.rada1jarada2metamuutujate väärtuste ülemise ja alumise piiri määramiseks;3.op1jaop2, mida kasutatakse metamuutujate väärtuse rajade piiride täpsustamiseks\leqvõi

meil
Ehk kui meil onantud1.graafG= (V ; E), kusVjaEon vastavalt tippude ja servade hulk,2.positiivne täisarvK jVj,siis kas kehtib järgmine lause:9V=V1[:::[Vk; kK;81ik:Vion täisgraaf?

meil
Kui meil onkaks tõeväärtustAjaB, millest ülimalt üks võib tõene olla, siis seda võib väljendada kui:(A^B), mis on väär vaid siis, kui niiAkui kaBon tõesed.

meil
Näiteks, olgu meil valem 1, kusion metamuutuja.

##### Järgnevaid lauseid võib pidada liiga pikaks:

See tähendab, et näiteksnmetamuutuja, mille alumine ja ülemine rada on vastavalt 1 kuni 5, konjunktsioonikujutamiseks tuleks lausearvutusvalem panna kirja valemina 3, kus sulgude sees olev10 sisu on ülejäänud lausearvutusvalemi osa, mida hakatakse tsüklina läbi käima5nkorda.

^1a15^1a25:::^1an5(:::)(3)Iga operaator võimaldab parajasti ainult ühe metamuutuja kasutamist tsükli koosta-miseks, kuid metamuutujaid võib operaatoris veel esineda, näiteks operaatori raja järellisatingimustes.

See tähendab, et translaatorile saaks anda sisendiks valemi 4,8(a1; a2; :::; an5)^(:::)(4)mis teisendatakse samale laiendatud kujule kui valem 3.

Valemite 5 kirjeldus lippude mittetules olemiseks on järgmine:1.valemitef1jaf6järgi võib malelaua igas veerus ja reas olla ülimalt üks lipp;2.valemitef2jaf3järgi võib malelaua igal alam- ja peadiagonaalil olla ülimalt ükslipp;3.valemitef4jaf5järgi võib malelaua igal kõrvalisel alam- ja peadiagonaalil ollaülimalt üks lipp;13 f1&amp;f2&amp;f3&amp;f4&amp;f5&amp;f6, kusf1^1in(exactlyone(xi;j: 1jn));f2^1kn(atmostone(xi;ik+1:kin));f3^1kn(atmostone(xi;k+i1: 1ink+ 1));f4^1kn(atmostone(xi;nki+2: 1ink+ 1));f5^1kn(atmostone(xi;ni+k:kin));f6^1in(exactlyone(xj;i: 1jn)):(5)Valemite pere 5 osade kompaktsemaks ja arusaadavamaks esitamiseks on kasutatudoperaatoreidexactlyonejaatmostone, mille laiendatud kujud on esitatud valemitena 6ja 7 [2].

exactlyone(xi: 1in)_1inxi&amp;^1i;jn;i

See tähendab, etmetamuutuja ei tohi sisaldada identikaatorsümbolit, aga piiritleja koos rajadega võib20 Sisend:valem - läbitav lausearvutusvalem1if&#34;forall&#34; in valemthen2ASENDA_ESIMENE (valem, &#34;forall&#34;,&#34;&#34;)3forall_sisu := &#34;forall&#34;sulgude sees komaga eraldatud elemendid4alumine_piir := &#34;1<&#34;5ülemine_piir := &#34;&#34;6piiritleja_identikaatorid := [&#39;\&#39;, &#39;<&#39;]7foreachmetamuutuja in forall_sisudo8ifmetamuutuja on esimene elementthen9piiritleja_identikaator =KONTROLLI_PIIRITLEJA_OLEMASOLU (0,len(piiritleja_identikaatorid), metamuutuja,piiritleja_identikaatorid)10ifleidub piiritleja identikaatorthen11alumine_piir := LEIA ALUMINE PIIRITLEJA(piiritleja_identikaator, metamuutuja)12else ifmetamuutuja on viimane elementthen13piiritleja_identikaator =KONTROLLI_PIIRITLEJA_OLEMASOLU (0,len(piiritleja_identikaatorid) metamuutuja,piiritleja_identikaatorid)14ifleidub piiritleja identikaatorthen15ülemine_piir := LEIA_ULEMINE_PIIRITLEJA(piiritleja_identikaator, metamuutuja)16ifforall järel ei leidu topeltkaldkriipsuthenkorrutatav := &#34;bigwedge&#34;17elsekorrutatav := forall järel olev operaator21 1819korrutatava_sisu = korrutatava järel sulgude sees olev sisu20laiendatud = korrutatava_sisu21foreachmetamuutuja in forall sisudo22uus_rada = alumine_piir + metamuutuja + ülemine_piir23laiendatud_operaator = korrutatav + &#34;_{&#34;+ uus_rada + &#34;}&#34;24laiendatud= laiendatud_operaator + &#34;(&#34;+ laiendatud + &#34;)&#34;25else26Algoritm lõpetab tööJoonis 7.

26 1tipp := analüüsipuu tipp, mis sisaldab märksõnaganotinseostuvat alamosa2mõõde := -13graaf = ANNA_GRAAF(tipp)4foreach(algtipp, lõpptipp) in graafdo5ifmõõde < algtippthenmõõde = algtipp6ifmõõde < lõpptippthenmõõde = lõpptipp7täisgraaf := LOO_GRAAF_SUURUSEGA(mõõde)8foreach(algtipp, lõpptipp) in graafdo9foreach(täis_algtipp, täis_lõpptipp) in täisgraafdo10ifalgtipp == täis_algtipp &amp;&amp; lõpptipp==täis_lõpptippthen11eemalda täisgraast serv tippudega (täis_algtipp, täis_lõpptipp)12a_tipp := läbimata serva esimene otstipp13l_tipp := läbimata serva teine otstipp14LISA_MUUTUJATESSE(a_tipp)15LISA_MUUTUJATESSE(l_tipp)16tingimused := tingimused, mis kaasnevad koos valemi tsüklimuutujatega17v := ülejäänud valemi tipp, mida saab läbida funktsiooniga LABI_VALEM18foreach(algtipp, lõpptipp) in täisgraafdo19PANE_UUS_VAARTUS(algtipp, a_tipp)20PANE_UUS_VAARTUS(lõpptipp, l_tipp)21ifKAS_TINGIMUSED(tingimused)thenLABI_VALEM(v)22KUSTUTA_MUUTUJATEST(a_tipp)23KUSTUTA_MUUTUJATEST(l_tipp)Joonis 10.

Tänapäevased tarkvarava-hendid küll hõlbustavad koodi kirjutamist ning aitavad märgata juba kompileerimiseelseidvigu, kuid kasutades neid teadaolevalt töötavaid vahendeid, millega esialgne programmoli loodud, saab kindluse, et arenduse käigus tekib vähem just arendusega seotud vigu.

X=f[v; i]jv2V ;1iKgF=^v2V(G)(exactly_onef[v; i] : 1iKg)^^1iK^fu;vg=2E;u6=vat_most_onef[u; i];[v; i]g(8)Enne, kui valemi saab anda translaatorile töötlemiseks ette, tuleb enne teha veelüks teisendus.

Kui meil onkaks tõeväärtustAjaB, millest ülimalt üks võib tõene olla, siis seda võib väljendada kui:(A^B), mis on väär vaid siis, kui niiAkui kaBon tõesed.

f1=^v2V(G)(exactly_one(xv;i: 1iK))f2=^1iK^fu;vg=2E(G);u6=v:(xu;i^xv;i)(9)Seega, selle muutuse sisseviimisel hakkab translaator töötlema teisendatud valemit 9,kus paarid[u; i]ja[v; i]on asendatud vastavalt muutujategaxu;ijaxv;iningat_most_oneasemel on nende kahe muutuja konjunktsiooni eitus.

Kui aga vaadeldakse sellist alamgraade komplekti, kus leidub üksvõi rohkem tühja alamgraa, siis kehtestaja ei kajasta seda lausearvutusmuutujate jadas,kuna puudub selline paar[u; i], mille jaoks oleks tippudeneeritud.

Esimesel juhul,kus tipp 4 on samas komponendis kui tipp 1, on kaks võimalust luua kolm alamgraa-:(f1;4g;f2g;f3g)ja(f1;4g;f2;3g;;), kus;on tühi graaf.

Teisel juhul, kus tipp 4on üksinda, saab vaadeldaC(3;2) = 3erinevat võimalust, kuidas graas (a) on jao-tatud tipukolmikf1;2;3gkaheks alamgraaks:(f1;2g;f3g;f4g),(f1;3g;f2g;f4g),(f1g;f2;3g;f4g).

##### Analüüsi tulemused on kujul:

Osalause(d), mille ette läheb koma

Originaallause

##### Järgnevates lausetes võib olla puuduv koma:

kui loodudvalemi kehtestavate väärtustuste arv on võrdne võimalike lahendite arvuga,

Juhul kui loodudvalemi kehtestavate väärtustuste arv on võrdne võimalike lahendite arvuga, siis see võibviidata sellele, et valem kirjeldab püstitatud probleemi korrektselt.

Poolt-tarind on võõrapärane vorm, mis jätab lauses tegija tagaplaanile.

##### Näiteks lause „Trahv oli politseiniku poolt tehtud.“ saab paremini kirjutada kas lausena "Trahv oli politseiniku tehtud" või "Politseinik tegi trahvi."

##### Järgnevates lausetes leidub poolt-tarind:

x1^x2^x3(2)Lausearvutusvalemite pereksnimetatakse sellist loogikavalemit, mis sisaldab niimääratud väärtustega metamuutujaid kui ka kasutaja poolt väärtustatavaid parameetreid,millele omistatakse väärtus programmi käitamisel [3].

Selle asemel on lihtsam teisendadasarnase sisu ja tähendusega sisend eelprotsessori kaudu üheselt vastuvõetavale kujule,mis on olemasoleva grammatika poolt juba lubatud ning mille jaoks ei pea translaatoriteraldi täiendama.

Valemi 3 kirja panemine nõuab kasutaja poolt eelkõige olemasolevavalemi osa korduvat esitamist, mis raskendab valemi loetavust.

Teisenduste kaudu eemaldatakse üleliigsedsümbolid, näiteks tühikud ja reavahetused, ning asendatakse LATEXkeele mõttes võrdväär-sete sõnedega, mis on deneeritud grammatika poolt kui vastuvõetavad [2].

Eelprotsessori poolt tagastatav valem salvestatakse:f rmformaadis faili, mida saabedaspidi anda otse translaatorile nii, et ei ole tarvis juba teisendatud valemit uuestieelprotsessori kaudu läbi töödelda.

Autori poolt tehtud koodi täiendused on failist leitavad kommentaaride//ALO AASMÄEOSA ALGUS//ja//ALO AASMÄE OSA LÕPP//vahel.

Translaator kasutab analüüsipuud selleks, etteisendada sisendtekst grammatikareeglite poolt deneeritud väljundiks.

Kehtestaja poolt leitud võimalike klikikombinatsioonide arv.

Sellenäitamiseks analüüsiti läbi üks Stamm-Wilbrandti poolt kirjeldatud probleem graaklikkide kontrollimise kohta, mida varem translaator ei olnud võimeline läbi töötlema.

Öeldistäiteks olev v- või tav- kesksõna võib mõjuda bürokraatlikult.

##### Näiteks „Pakkumine on kehtiv 6 kuud“ saab paremini kirjutada „Pakkumine kehtib kuus kuud“.

##### Järgnevates lausetes leidub olema-kesksõna:

Käesoleva loogikavalemite translaatori korral ontegemist kompilaatoriga, kuna sisendiks on tekst LATEXformaadis, aga väljund on kahesvormingus, DIMACS-isatexjatav[3,4].

Märgib omaduste või seisundite juhuslikkust, ajutist iseloomu.
Parem on kasutada kindlamat kõneviisi.

##### Näiteks „Põhiliseks eesmärgiks on..." saab paremini kirjutada „Põhiline eesmärk on...“.
Järgnevates lausetes leidub määrus saavas käändes:

Seega, kui on teada, mitu võimalikku lahendit võib ühel ülesandel olla, aga puudubvastav valem nende lahendite väljendamiseks, siis on võimalik kirjeldada probleemilausearvutusvalemina ning uurida selle kehtestavate väärtustuste arvu.

Käesoleva töö eesmärgiks on anda ülevaade, kuidas teha läbi ühe programmeeri-miskeele täiendamine eelmainitud lausearvutusvalemite kompilaatori näitel.

Seega, täiendatud valmisprogramm on abiks teaduslike eksperimentide läbiviimisel, kuson teada mõne probleemi rahuldavate seisundite arv, aga puudub nende seisundite täielikkirjeldus.

Käesoleva loogikavalemite translaatori korral ontegemist kompilaatoriga, kuna sisendiks on tekst LATEXformaadis, aga väljund on kahesvormingus, DIMACS-isatexjatav[3,4].

Teine võimalus keele täiendamiseks on teha seda läbi translaatori9 eelprotsessori.

Translaatorist saadav väljund on omakorda sisendiks kehtestavateväärtustuste loendajale, mis annab teada, mitu võimalikku tõeväärtust on valemil.

Valemite 5 kirjeldus lippude mittetules olemiseks on järgmine:1.valemitef1jaf6järgi võib malelaua igas veerus ja reas olla ülimalt üks lipp;2.valemitef2jaf3järgi võib malelaua igal alam- ja peadiagonaalil olla ülimalt ükslipp;3.valemitef4jaf5järgi võib malelaua igal kõrvalisel alam- ja peadiagonaalil ollaülimalt üks lipp;13 f1&amp;f2&amp;f3&amp;f4&amp;f5&amp;f6, kusf1^1in(exactlyone(xi;j: 1jn));f2^1kn(atmostone(xi;ik+1:kin));f3^1kn(atmostone(xi;k+i1: 1ink+ 1));f4^1kn(atmostone(xi;nki+2: 1ink+ 1));f5^1kn(atmostone(xi;ni+k:kin));f6^1in(exactlyone(xj;i: 1jn)):(5)Valemite pere 5 osade kompaktsemaks ja arusaadavamaks esitamiseks on kasutatudoperaatoreidexactlyonejaatmostone, mille laiendatud kujud on esitatud valemitena 6ja 7 [2].

Valemite 5 kirjeldus lippude mittetules olemiseks on järgmine:1.valemitef1jaf6järgi võib malelaua igas veerus ja reas olla ülimalt üks lipp;2.valemitef2jaf3järgi võib malelaua igal alam- ja peadiagonaalil olla ülimalt ükslipp;3.valemitef4jaf5järgi võib malelaua igal kõrvalisel alam- ja peadiagonaalil ollaülimalt üks lipp;13 f1&amp;f2&amp;f3&amp;f4&amp;f5&amp;f6, kusf1^1in(exactlyone(xi;j: 1jn));f2^1kn(atmostone(xi;ik+1:kin));f3^1kn(atmostone(xi;k+i1: 1ink+ 1));f4^1kn(atmostone(xi;nki+2: 1ink+ 1));f5^1kn(atmostone(xi;ni+k:kin));f6^1in(exactlyone(xj;i: 1jn)):(5)Valemite pere 5 osade kompaktsemaks ja arusaadavamaks esitamiseks on kasutatudoperaatoreidexactlyonejaatmostone, mille laiendatud kujud on esitatud valemitena 6ja 7 [2].

Translaatori töö tulemusena luuakse:satfail,mille sisuks on parameetriteta lausearvutusvalemsatexformaadis [2].

Tulemusena jääb alles selline graaf, mis on esialgsele graaletäiendgraaks.

Esimeseks takistuseks oli translaatori lähtekoodile ligi saamine.

Viimaseks suuremaks takistuseks oli sobiva ja töötava arenduskeskkonna valimine.

Eesmärgiks on kontrollida,mitmel viisil saab etteantud graa jaotadaKalamgraaks nii, et iga osa on täisgraaf,kusjuures täisgraaks loetakse ka tühja ehk tippude ja servadeta graa.

Seetõttu näiteks kehtestavate väärtuste paarifx1; x2gloetakse erinevakspaaristfx2; x1gehk tagastusväärtuseks on sobivate kehtestavate väärtuste kõikvõimali-kud permutatsioonid.

Kuna sellise alamgraapuhul pole tegemist täisgraaga, siis on võimalike väärtuste arvuks 0.

Antudloogikavalemi kehtestavate väärtustuste leidmisel on võimalik teada saada püstitatudülesande võimalikud lahendid, milleks ongi valemi kehtestavad väärtustused.

Ülesannete sellise lähenemisviisiga lahendamiseks on loodud lausearvutusvalemitetranslaator, mis teisendab LATEXformaadis parametriseeritud sisendvalemi kindla formaa-diga parameetriteta lausearvutusvalemiks.

Antud töö eesmärgiks oli anda ülevaade, kuidas teha läbi ühe programmeerimiskeeletäiendamine eelmainitud lausearvutusvalemite translaatori näitel.

Antud töö on edaspidi abiks lugejale, kes soovib saada ettekujutust, kuidas lähenedaühe olemasoleva programmeerimiskeele täiendamisele translaatori ja selle eelprotsessoritasandil.

Mine-vormi kasutus koos tühiverbiga.

##### Näiteks "Teostasime kontrollimist" saab paremini kirjutada "Kontrollisime"
Järgnevates lausetes esineb nominalisatsioon mine-vormis:

See tähendas, et uue koodi kompileerimine sai toimuda ainult keskkonnaväliselt, mis28 märgatavalt aeglustas arendust.

Lisakson graa klikkide leidmise ülesande eeskujul loodud kombinatoorne algoritm, et leidamõne molekulipaari vahel sellised punktid, kus saab toimuda nende molekulide vahelineühinemine [15].

kehtestav 17x | Seega, kui on teada, mitu võimalikku lahendit võib ühel ülesandel olla, aga puudubvastav valem nende lahendite väljendamiseks, siis on võimalik kirjeldada probleemilausearvutusvalemina ning uurida selle kehtestavate väärtustuste arvu. Juhul kui loodudvalemi kehtestavate väärtustuste arv on võrdne võimalike lahendite arvuga, siis see võibviidata sellele, et valem kirjeldab püstitatud probleemi korrektselt. ^1i3(xi)(1)Antud valem on võrdväärne loogikavalemiga 2, mille kehtestavate väärtustuste arvon 1, kuna antud valem on tõene parajasti siis, kui kõik kolmxiväärtustust on tõesed. Antud ülesandes sõltub kehtestavate väärtustuste arv parameetristn, mistõttu peabkasutaja täpsustama käsureal selle väärtust. Kui anda saadud väljundfail argumendiks spetsiaalsele programmile, mis kontrollibsatexformaadis kirjeldatud parameetriteta lausearvutusvalemi kehtestavate väärtustustearvu, osutub, et võimalikke kehtestavaid väärtustusi sellel valemil on 92. Translaatoritöö tulemusena genereeritud parameetriteta loogikavalemite kehtestavate väärtustustearvud on kirjeldatud tabelis 2. Kehtestavate väärtustuste loendaja eristab õigeid vastuseid ainult lausearvutusmuu-tuja tasemeni. Seetõttu näiteks kehtestavate väärtuste paarifx1; x2gloetakse erinevakspaaristfx2; x1gehk tagastusväärtuseks on sobivate kehtestavate väärtuste kõikvõimali-kud permutatsioonid. Sellest tulenevaltvõib esineda kehtestavate väärtuste arvu leidmisel tegelikkusest mõningaid erinevusi. 32 Järgnevalt uuritakse, kas kehtestavate väärtustuste arvud on korrektsed graa (a)näitel. Kehtestavate väärtustuste arv 4 tulenebmõlema jada erinevatest permutatsioonidest. Lahutades needkehtestaja jaoks korduvad võimalused, saadakse sama arv kehtestavaid väärtustusi kuikehtestaja,1681212 = 144. Antudloogikavalemi kehtestavate väärtustuste leidmisel on võimalik teada saada püstitatudülesande võimalikud lahendid, milleks ongi valemi kehtestavad väärtustused.
| Translaatoritöö tulemusena genereeritud parameetriteta loogikavalemite kehtestavate väärtustustearvud on kirjeldatud tabelis 2. Kehtestavate väärtustuste loendaja eristab õigeid vastuseid ainult lausearvutusmuu-tuja tasemeni. Seetõttu näiteks kehtestavate väärtuste paarifx1; x2gloetakse erinevakspaaristfx2; x1gehk tagastusväärtuseks on sobivate kehtestavate väärtuste kõikvõimali-kud permutatsioonid.
kompilaator 23x | Sellise lähenemisega ülesannete lahendamiseks on loodud programm, millel onkaks põhiosa: kompilaator ja selle eelprotsessor [2]. Käesoleva töö eesmärgiks on anda ülevaade, kuidas teha läbi ühe programmeeri-miskeele täiendamine eelmainitud lausearvutusvalemite kompilaatori näitel. Lisaks uuritakse kompilaatori eelprotsessorit, mistegeleb kompilaatori sisendi eeltöötlusega. Näiteks kompilaator aktsepteerib sellise lausearvutusva-lemi kirjeldust, mis käsitleb mõne serva sisaldumist graas, aga serva mittesisaldumisegakirjeldusi ei aktsepteerita. Esimeses peatükis antakse ülevaadekäsitletavast kompilaatorist ja selle eelprotsessorist ning nende täiendamise vajadusest. Selles esitatakse kirjeldus lippu-de paigutamisest malelaual ning kirjeldatakse, kuidas kompilaatorit saab kasutada selleprobleemi kirjelduse korrektsuse kontrollimiseks. Kolmas ja neljas peatükk käsitlevadvastavalt eelprotsessori ja kompilaatori täiendamist. Viiendas peatükis tuuakse näidegraa klikkide kontrollimise kirjeldusest, mida kompilaator varem ei olnud võimelinetöötlema [7]. Lausearvutusvalemite kompilaatori käitamisel töödeldakse8 sisend esmalt läbi eelprotsessori. Eelprotsessori lubatud möönduste tõttu teisendatakse sisult sarnane sisend kom-pilaatorile üheselt aktsepteeritavale kujule. Translaatoreid saab eristada kompilaatoriteks või interpretaatoriteks, kuidesineb ka programme, mis saavad töötada mõlemas reiimis. Kompilaatori töö tulemuse-na tõlgitakse programmi sisend ühest programmeerimiskeelest teise, kuid interpretaatortöötab lähteprogrammi keele raames. Käesoleva loogikavalemite translaatori korral ontegemist kompilaatoriga , kuna sisendiks on tekst LATEXformaadis, aga väljund on kahesvormingus, DIMACS-isatexjatav[3,4]. Selleks, et säilitada kompilaatori lähtekoodi algkuju, Üldotstarbeliste programmeerimis-keelte korral üldjuhul samamoodi ei läheneta. Küll aga on uuritud, kuidas realiseerida objektorienteeritud keelte, näiteks Java,puhul laiendatud kompilaatorite arhitektuuri (ingl.extensible compilers) [10]. Lisaks,kuna kompilaator ei ole algselt sellisel arhitektuuril üles ehitatud, siis see nõuaks terveprogrammi suuremahulist ümberkirjutamist [9]. Esialgset programmi arendati eelkõige 32-bitise süsteemi jaoks 32-bitise C kom-pilaatoriga . Tänapäevase, 64-bitise C kompilaatoriga arendamisel osutus, et programmlõpetab suvalistel hetkedel töötamise ja seda arvatavasti mäluhalduse tõttu. Edasiste prob-leemide vähendamiseks otsustati kasutada vanemat 32-bitist C kompilaatori versiooni,mida kasutati ka 2014. aastal programmi arendamisel. C kompilaator on repositooriumisvälja toodud kaustas MinGW.
| Käesoleva töö eesmärgiks on anda ülevaade, kuidas teha läbi ühe programmeeri-miskeele täiendamine eelmainitud lausearvutusvalemite kompilaatori näitel. Selle jaokstäiendatakse programmeerimiskeelegrammatikatehk reegleid, mille põhjal kompilaatorteisendab sisendteksti väljundkujule. Lisaks uuritakse kompilaatori eelprotsessorit, mistegeleb kompilaatori sisendi eeltöötlusega. Grammatika juures piirdutakse graa täiendivõtmise kirjelduse töötlemisega. Näiteks kompilaator aktsepteerib sellise lausearvutusva-lemi kirjeldust, mis käsitleb mõne serva sisaldumist graas, aga serva mittesisaldumisegakirjeldusi ei aktsepteerita.
| Esimeses peatükis antakse ülevaadekäsitletavast kompilaatorist ja selle eelprotsessorist ning nende täiendamise vajadusest.Teises peatükis tuuakse näide programmi rakendamisest. Selles esitatakse kirjeldus lippu-de paigutamisest malelaual ning kirjeldatakse, kuidas kompilaatorit saab kasutada selleprobleemi kirjelduse korrektsuse kontrollimiseks. Kolmas ja neljas peatükk käsitlevadvastavalt eelprotsessori ja kompilaatori täiendamist. Viiendas peatükis tuuakse näidegraa klikkide kontrollimise kirjeldusest, mida kompilaator varem ei olnud võimelinetöötlema [7].
| Esialgset programmi arendati eelkõige 32-bitise süsteemi jaoks 32-bitise C kom-pilaatoriga . Tänapäevase, 64-bitise C kompilaatoriga arendamisel osutus, et programmlõpetab suvalistel hetkedel töötamise ja seda arvatavasti mäluhalduse tõttu. Edasiste prob-leemide vähendamiseks otsustati kasutada vanemat 32-bitist C kompilaatori versiooni,mida kasutati ka 2014. aastal programmi arendamisel. C kompilaator on repositooriumisvälja toodud kaustas MinGW.
grammatikareegel 10x | Eelprotsessori teisenduste tõttu on võimalik anda programmile etteselline sisend, mis ei pea tingimata vastama täielikult eeldeneeritud grammatikareeg-litele . Esimene võimaluson suurendada grammatikareeglite hulka ehk deneerida juurde reegleid, mis laiendavadvastuvõetavat keele sisendit. Grammatikareeglite täiendamine tähendab üldjuhul keeltkäsitleva translaatori moditseerimist, et translaator oskaks sisendit käsitleda ka uuereeglite hulgaga. Lisaks kirjeldatakse, mis muudatusi peab translaatoris sisse viima,et programm oskaks uut grammatikareeglite komplekti õigesti käsitleda. Translaator kasutab analüüsipuud selleks, etteisendada sisendtekst grammatikareeglite poolt deneeritud väljundiks. Kuna analüüsipuu läbimine sõltub nendest eeldeneeritud väärtustest, siiskeele täiendamisel ehk grammatikareeglite juurde lisamisel peab lähtuma esialgsestsemantikafailist. Selle jaoks võimaldab konstruktor uue semantikafaili genereerimiseasemel võtta argumendiks olemasoleva reeglite komplekti, millele lisatakse juurde uuednummerdatud grammatikareeglid . 24 4.2 Grammatikareeglite täiendamineKeele grammatikas kirja pandud reeglid graas servade ja tippude hulga sisalduvusekohta on nähtaval joonisel 8, millega seonduvad abireeglid on kirjeldatud täpsemaltkogu keele grammatikas [2]. Graa sisalduvusega seotud grammatikareeglid .
lähtekood 10x | Te-gemist on kindla eesmärgi täitmiseks loodud süsteemi ja keelega, mistõttu vajadus keeletäitmiseks tuleneb päriselulisest puudusest ning vajab lähtekoodis spetsiilisi muudatusi. Selleks, et säilitada kompilaatori lähtekoodi algkuju, Üldotstarbeliste programmeerimis-keelte korral üldjuhul samamoodi ei läheneta. Laiendatudkompilaatoritele saab esitada täiendusi lähtekoodi taaskasutatavate komponentidena, kuslähtekoodi ennast ei muudeta. Sedasi saab säilitada lähtekoodi varasemaid versioonening realiseerida täiendusi, mis on teineteisest sõltumatud. Esimeseks takistuseks oli translaatori lähtekoodile ligi saamine. Kunatoona ei kasutatud arendamisel versioonihaldussüsteemi, siis pidi arenduse aluseks võtmamõnest vanemast versioonist pärineva lähtekoodi . Seega, lähim sobiv lähtekood pärineskiesialgsest versioonist, mis koostati aastal 2001. Nüüd, kui lähtekood oli olemas, osutus järgmiseks takistuseks lähtekoodi kompileeri-mine.
| Kunatoona ei kasutatud arendamisel versioonihaldussüsteemi, siis pidi arenduse aluseks võtmamõnest vanemast versioonist pärineva lähtekoodi . Seega, lähim sobiv lähtekood pärineskiesialgsest versioonist, mis koostati aastal 2001.Nüüd, kui lähtekood oli olemas, osutus järgmiseks takistuseks lähtekoodi kompileeri-mine.
klikk 10x | Näiteks, graa täiendi kirjeldamise võimaldamine annab võimaluse kontrollidagraa klikkide , teatud tingimustega alamgraade olemasolu. Klikkidele on leitud erine-vaid rakendusi mitmes valdkonnas, alates bioinformaatikast kuni sotsiaalteadusteni [5,6]. Viiendas peatükis tuuakse näidegraa klikkide kontrollimise kirjeldusest, mida kompilaator varem ei olnud võimelinetöötlema [7]. Graaprobleemi seletamisekskirjeldatakse esmalt graadega seotud mõistetklikk, tuuakse välja klikkidega seotudprobleemi kirjeldus ning näidatakse, kuidas translaatori täiendamise tulemusena saabkontrollida selle kirjelduse korrektsust. 5.1 Graa klikkTänapäeval tuntud kliki mõiste sai alguse D. Luce ja A. Perry artiklist, kus klikiks nimetatirohkem kui kahest inimesest koosnevaid gruppe, kes kõik on omavahel sõbrad [6]. Tänapäeval on klikkidele leitud rakendust mitmes erinevas valdkonnas. Bioinformaatikason kasutatud klikke , et leida sellised geenide grupid, mis avaldavad sarnast pärilikkumaterjali [5]. Sarnaselt geenide rühmitamisele on klikke rakendatud keemiavaldkonnasselleks, et otsida andmebaasist üksteisele lähedase struktuuriga kemikaale [14]. Lisakson graa klikkide leidmise ülesande eeskujul loodud kombinatoorne algoritm, et leidamõne molekulipaari vahel sellised punktid, kus saab toimuda nende molekulide vahelineühinemine [15].
| Tänapäeval on klikkidele leitud rakendust mitmes erinevas valdkonnas. Bioinformaatikason kasutatud klikke , et leida sellised geenide grupid, mis avaldavad sarnast pärilikkumaterjali [5]. Sarnaselt geenide rühmitamisele on klikke rakendatud keemiavaldkonnasselleks, et otsida andmebaasist üksteisele lähedase struktuuriga kemikaale [14]. Lisakson graa klikkide leidmise ülesande eeskujul loodud kombinatoorne algoritm, et leidamõne molekulipaari vahel sellised punktid, kus saab toimuda nende molekulide vahelineühinemine [15].
valem 46x | Seega, kui on teada, mitu võimalikku lahendit võib ühel ülesandel olla, aga puudubvastav valem nende lahendite väljendamiseks, siis on võimalik kirjeldada probleemilausearvutusvalemina ning uurida selle kehtestavate väärtustuste arvu. Juhul kui loodudvalemi kehtestavate väärtustuste arv on võrdne võimalike lahendite arvuga, siis see võibviidata sellele, et valem kirjeldab püstitatud probleemi korrektselt. Programm teisendab formaadisTEXkirjeldatud parameetritega lausearvutusvalemi parameetriteta valemiks , kasutadesjust selleks otstarbeks loodud programmeerimiskeelt [3]. Näiteks, olgu meil valem 1, kusion metamuutuja. ^1i3(xi)(1)Antud valem on võrdväärne loogikavalemiga 2, mille kehtestavate väärtustuste arvon 1, kuna antud valem on tõene parajasti siis, kui kõik kolmxiväärtustust on tõesed. Selle käigus tehakse vajalikud asendused vastavalt asen-damisreeglitele ning valemite parametriseerimine ehk muutujatena deneeritud osadelahti kirjutamine [2]. See tähendab, et näiteksnmetamuutuja, mille alumine ja ülemine rada on vastavalt 1 kuni 5, konjunktsioonikujutamiseks tuleks lausearvutusvalem panna kirja valemina 3, kus sulgude sees olev10 sisu on ülejäänud lausearvutusvalemi osa, mida hakatakse tsüklina läbi käima5nkorda. Valemi 3 kirja panemine nõuab kasutaja poolt eelkõige olemasolevavalemi osa korduvat esitamist, mis raskendab valemi loetavust. See tähendab, et translaatorile saaks anda sisendiks valemi 4,8(a1; a2; :::; an5)^(:::)(4)mis teisendatakse samale laiendatud kujule kui valem 3. Kontrollimaks kirjelduse korrektsust, saab valemi anda si-sendina translaatorile. Translaatorist saadav väljund on omakorda sisendiks kehtestavateväärtustuste loendajale, mis annab teada, mitu võimalikku tõeväärtust on valemil . Valemite 5 kirjeldus lippude mittetules olemiseks on järgmine:1.valemitef1jaf6järgi võib malelaua igas veerus ja reas olla ülimalt üks lipp;2.valemitef2jaf3järgi võib malelaua igal alam- ja peadiagonaalil olla ülimalt ükslipp;3.valemitef4jaf5järgi võib malelaua igal kõrvalisel alam- ja peadiagonaalil ollaülimalt üks lipp;13 f1&amp;f2&amp;f3&amp;f4&amp;f5&amp;f6, kusf1^1in(exactlyone(xi;j: 1jn));f2^1kn(atmostone(xi;ik+1:kin));f3^1kn(atmostone(xi;k+i1: 1ink+ 1));f4^1kn(atmostone(xi;nki+2: 1ink+ 1));f5^1kn(atmostone(xi;ni+k:kin));f6^1in(exactlyone(xj;i: 1jn)):(5) Valemite pere 5 osade kompaktsemaks ja arusaadavamaks esitamiseks on kasutatudoperaatoreidexactlyonejaatmostone, mille laiendatud kujud on esitatud valemitena 6ja 7 [2]. 2.2 Eelprotsessori rakendamineÜlesande kirjelduse korrektsuse kontrollimiseks tuleb anda programmile käsureal et-te vastavat valemit kujutav:texvõi:ltxlaiendusega fail. Lisaks, kuisisendfail sisaldab lausearvutusvalemite peret ehk antud loogikavalem koosneb mitmestalamvalemist, siis eelprotsessor teisendab valemi sellisele kujule, kus kõik alamvalemidon peavalemis lahti kirjutatud. Valemite pere 5 kujutuse:texformaadis joonisel 1 ning sellele järgneva eelprotsessoriteisenduse joonisel 2 korral on märgata, et valem on teisendatud kompaktsemale kujule. Eelprotsessori poolt tagastatav valem salvestatakse:f rmformaadis faili, mida saabedaspidi anda otse translaatorile nii, et ei ole tarvis juba teisendatud valemit uuestieelprotsessori kaudu läbi töödelda. Kui anda saadud väljundfail argumendiks spetsiaalsele programmile, mis kontrollibsatexformaadis kirjeldatud parameetriteta lausearvutusvalemi kehtestavate väärtustustearvu, osutub, et võimalikke kehtestavaid väärtustusi sellel valemil on 92. 17 3 Eelprotsessori täiendamineJärgnevalt on kirja pandud nõuded, mis peavad etteantud valemil olema täidetud, etmakro nimega\foralllaiendaks valemit etteantud metamuutujate võrra. See tähendab, etmetamuutuja ei tohi sisaldada identikaatorsümbolit, aga piiritleja koos rajadega võib20 Sisend: valem - läbitav lausearvutusvalem1if&#34;forall&#34; in valemthen2ASENDA_ESIMENE ( valem , &#34;forall&#34;,&#34;&#34;)3forall_sisu := &#34;forall&#34;sulgude sees komaga eraldatud elemendid4alumine_piir := &#34;1<&#34;5ülemine_piir := &#34;&#34;6piiritleja_identikaatorid := [&#39;\&#39;, &#39;<&#39;]7foreachmetamuutuja in forall_sisudo8ifmetamuutuja on esimene elementthen9piiritleja_identikaator =KONTROLLI_PIIRITLEJA_OLEMASOLU (0,len(piiritleja_identikaatorid), metamuutuja,piiritleja_identikaatorid)10ifleidub piiritleja identikaatorthen11alumine_piir := LEIA ALUMINE PIIRITLEJA(piiritleja_identikaator, metamuutuja)12else ifmetamuutuja on viimane elementthen13piiritleja_identikaator =KONTROLLI_PIIRITLEJA_OLEMASOLU (0,len(piiritleja_identikaatorid) metamuutuja,piiritleja_identikaatorid)14ifleidub piiritleja identikaatorthen15ülemine_piir := LEIA_ULEMINE_PIIRITLEJA(piiritleja_identikaator, metamuutuja)16ifforall järel ei leidu topeltkaldkriipsuthenkorrutatav := &#34;bigwedge&#34;17elsekorrutatav := forall järel olev operaator21 1819korrutatava_sisu = korrutatava järel sulgude sees olev sisu20laiendatud = korrutatava_sisu21foreachmetamuutuja in forall sisudo22uus_rada = alumine_piir + metamuutuja + ülemine_piir23laiendatud_operaator = korrutatav + &#34;_{&#34;+ uus_rada + &#34;}&#34;24laiendatud= laiendatud_operaator + &#34;(&#34;+ laiendatud + &#34;)&#34;25else26Algoritm lõpetab tööJoonis 7. Kõigi\forallesinemiste asendamise tulemusena ei oleks saanud valemites kasutada rohkemkui ühte\foralloperaatorit, sest esimene\foralltöö käigus tehtud teisendu olekseemaldanud kõik edasised võtmesõnad, millega leida järgmiste samanimeliste makrodealgused. Algoritmi eesmärgiks on kõigepealt eraldada sisendvalemist tähtsaimad osad, milleabil hakata koostama uut, teisendatud valemit . 22 Juhul, kui\foralljärel pole täpsustatud ühtegi operaatorit, vaid kohe algab sulgudesees ülejäänud valem , siis pannakse laiendatava operaatori vaikeväärtuseks\bigwedge. Juhul, kui tegemist on esimese metamuutujaga, sisestatakseeelmise metamuutuja asemel\foralljärel olnud ülejäänud valemi sisu. Algoritmi viimase osana kasutatakse muutujaida_tippjal_tippkuitsüklimuutujatena, et läbida valem täiendgraa iga serva otstippude kombinatsioonina. Töö lõppedes kustutatakse käsitletavate muutujate hulgasta_tippjal_tippfunkt-sioonigaKUSTUTA_MUUTUJATEST(tipp), et saaks valemi mõnes muus osas neid uuestideneerida. 26 1tipp := analüüsipuu tipp, mis sisaldab märksõnaganotinseostuvat alamosa2mõõde := -13graaf = ANNA_GRAAF(tipp)4foreach(algtipp, lõpptipp) in graafdo5ifmõõde < algtippthenmõõde = algtipp6ifmõõde < lõpptippthenmõõde = lõpptipp7täisgraaf := LOO_GRAAF_SUURUSEGA(mõõde)8foreach(algtipp, lõpptipp) in graafdo9foreach(täis_algtipp, täis_lõpptipp) in täisgraafdo10ifalgtipp == täis_algtipp &amp;&amp; lõpptipp==täis_lõpptippthen11eemalda täisgraast serv tippudega (täis_algtipp, täis_lõpptipp)12a_tipp := läbimata serva esimene otstipp13l_tipp := läbimata serva teine otstipp14LISA_MUUTUJATESSE(a_tipp)15LISA_MUUTUJATESSE(l_tipp)16tingimused := tingimused, mis kaasnevad koos valemi tsüklimuutujatega17v := ülejäänud valemi tipp, mida saab läbida funktsiooniga LABI_VALEM18foreach(algtipp, lõpptipp) in täisgraafdo19PANE_UUS_VAARTUS(algtipp, a_tipp)20PANE_UUS_VAARTUS(lõpptipp, l_tipp)21ifKAS_TINGIMUSED(tingimused)thenLABI_VALEM(v)22KUSTUTA_MUUTUJATEST(a_tipp)23KUSTUTA_MUUTUJATEST(l_tipp)Joonis 10. Valemi esimene osa (exactly_onekonjunktsioon) jaotab tippude hulgaV Kerine-vaks alamhulgaks ning valemi teine pool (at_most_onekonjunktsioon) kontrollib igaalamhulga klikiomadust. Valemi teises pooles genereeritud lausearvutusvalemi muutujatejada annab seega ülevaate ühest võimalikust alamgraade komplektist. X=f[v; i]jv2V ;1iKgF=^v2V(G)(exactly_onef[v; i] : 1iKg)^^1iK^fu;vg=2E;u6=vat_most_onef[u; i];[v; i]g(8)Enne, kui valemi saab anda translaatorile töötlemiseks ette, tuleb enne teha veelüks teisendus. Kuna valem ise aga kasutab sama operaatori juures kahte muutujat korraga,[u; i]ja[v; i], siis tuleb esitada see osa translaatorile vastuvõetaval kujul. f1=^v2V(G)(exactly_one(xv;i: 1iK))f2=^1iK^fu;vg=2E(G);u6=v:(xu;i^xv;i)(9)Seega, selle muutuse sisseviimisel hakkab translaator töötlema teisendatud valemit 9,kus paarid[u; i]ja[v; i]on asendatud vastavalt muutujategaxu;ijaxv;iningat_most_oneasemel on nende kahe muutuja konjunktsiooni eitus. 5.3 Probleemi kirjelduse kontrollimineKirjelduse kontrollimiseks antakse translaatorile argumendiks valemit 9 sisaldav failcliques:texning graaargumendiks joonisel 11 kujutatud kolm graa, mis on lisatud karepositooriumisse. Translaatori abil sai joonise 11 graa (a) korral veendutud, et valem 8 kirjeldab püsti-tatud ülesannet tõenäoliselt korrektselt. Graa (a) juhule sarnaselt saab leida väärtusedgraadele (b) ja (c), et leida kinnitust valemi korrektsuse kohta ka nende graade korral. Antudloogikavalemi kehtestavate väärtustuste leidmisel on võimalik teada saada püstitatudülesande võimalikud lahendid, milleks ongi valemi kehtestavad väärtustused. Teisendatud valemikuju saab seejärel kasutadamõne kehtestavate väärtuste loendajaga, et leida valemi kehtestavate väärtustuste arv.
teisendama 11x | Programm teisendab formaadisTEXkirjeldatud parameetritega lausearvutusvalemi parameetriteta valemiks, kasutadesjust selleks otstarbeks loodud programmeerimiskeelt [3]. Eelprotsessori lubatud möönduste tõttu teisendatakse sisult sarnane sisend kom-pilaatorile üheselt aktsepteeritavale kujule. See tähendab, et translaatorile saaks anda sisendiks valemi 4,8(a1; a2; :::; an5)^(:::)(4)mis teisendatakse samale laiendatud kujule kui valem 3. Programmile argumendiks14 antud sisendfail töödeldakse esmalt läbi eelprotsessori, mis teisendab sisendvalemi prog-rammile üheselt vastuvõetavasse formaati. Lisaks, kuisisendfail sisaldab lausearvutusvalemite peret ehk antud loogikavalem koosneb mitmestalamvalemist, siis eelprotsessor teisendab valemi sellisele kujule, kus kõik alamvalemidon peavalemis lahti kirjutatud. Valemite pere 5 kujutuse:texformaadis joonisel 1 ning sellele järgneva eelprotsessoriteisenduse joonisel 2 korral on märgata, et valem on teisendatud kompaktsemale kujule. Eelprotsessori poolt tagastatav valem salvestatakse:f rmformaadis faili, mida saabedaspidi anda otse translaatorile nii, et ei ole tarvis juba teisendatud valemit uuestieelprotsessori kaudu läbi töödelda. Algoritmi eesmärgiks on kõigepealt eraldada sisendvalemist tähtsaimad osad, milleabil hakata koostama uut, teisendatud valemit. f1=^v2V(G)(exactly_one(xv;i: 1iK))f2=^1iK^fu;vg=2E(G);u6=v:(xu;i^xv;i)(9)Seega, selle muutuse sisseviimisel hakkab translaator töötlema teisendatud valemit 9,kus paarid[u; i]ja[v; i]on asendatud vastavalt muutujategaxu;ijaxv;iningat_most_oneasemel on nende kahe muutuja konjunktsiooni eitus. Ülesannete sellise lähenemisviisiga lahendamiseks on loodud lausearvutusvalemitetranslaator, mis teisendab LATEXformaadis parametriseeritud sisendvalemi kindla formaa-diga parameetriteta lausearvutusvalemiks.
sisend 21x | Lisaks uuritakse kompilaatori eelprotsessorit, mistegeleb kompilaatori sisendi eeltöötlusega. Täiendamise tulemusena saab anda programmile sisendiks keerulisemaid TEXkujulvalemeid üldistatumal kujul ning kontrollida saadud väljundi kaudu selle kirjelduse kor-rektsust. Lausearvutusvalemite kompilaatori käitamisel töödeldakse8 sisend esmalt läbi eelprotsessori. Eelprotsessori teisenduste tõttu on võimalik anda programmile etteselline sisend , mis ei pea tingimata vastama täielikult eeldeneeritud grammatikareeg-litele. Eelprotsessori lubatud möönduste tõttu teisendatakse sisult sarnane sisend kom-pilaatorile üheselt aktsepteeritavale kujule. Teisisõnu on võimalik eelprotsesori kaudulaiendada keelele vastuvõetavat sisendit . Translaatoron programm, mis võtab sisendiks mõnes keeles kirjutatud programmi ning tagab sellesisu täitmise. Kompilaatori töö tulemuse-na tõlgitakse programmi sisend ühest programmeerimiskeelest teise, kuid interpretaatortöötab lähteprogrammi keele raames. Käesoleva loogikavalemite translaatori korral ontegemist kompilaatoriga, kuna sisendiks on tekst LATEXformaadis, aga väljund on kahesvormingus, DIMACS-isatexjatav[3,4]. Väljundformaattavon loodud sellise prog-rammi kasutamise otstarbeks, mida saab kasutada A. Isotamme koostatud kehtestavateväärtustuste loenduri sisendina . Esimene võimaluson suurendada grammatikareeglite hulka ehk deneerida juurde reegleid, mis laiendavadvastuvõetavat keele sisendit . Grammatikareeglite täiendamine tähendab üldjuhul keeltkäsitleva translaatori moditseerimist, et translaator oskaks sisendit käsitleda ka uuereeglite hulgaga. Selle asemel on lihtsam teisendadasarnase sisu ja tähendusega sisend eelprotsessori kaudu üheselt vastuvõetavale kujule,mis on olemasoleva grammatika poolt juba lubatud ning mille jaoks ei pea translaatoriteraldi täiendama. Vastuvõetava sisendi mu-gavdamiseks lisatakse eelprotsessori ülesannete hulka oma sisult rekursiivse operaatori\forallehk8töötlemine. See tähendab, et translaatorile saaks anda sisendiks valemi 4,8(a1; a2; :::; an5)^(:::)(4)mis teisendatakse samale laiendatud kujule kui valem 3. Kontrollimaks kirjelduse korrektsust, saab valemi anda si-sendina translaatorile. Translaatorist saadav väljund on omakorda sisendiks kehtestavateväärtustuste loendajale, mis annab teada, mitu võimalikku tõeväärtust on valemil. 2.3 Translaatori rakendamineTeisendatud valemikuju antakse peale eelprotsessori töötlust sisendiks translaatorile. See tähendab, etmetamuutuja ei tohi sisaldada identikaatorsümbolit, aga piiritleja koos rajadega võib20 Sisend :valem - läbitav lausearvutusvalem1if&#34;forall&#34; in valemthen2ASENDA_ESIMENE (valem, &#34;forall&#34;,&#34;&#34;)3forall_sisu := &#34;forall&#34;sulgude sees komaga eraldatud elemendid4alumine_piir := &#34;1<&#34;5ülemine_piir := &#34;&#34;6piiritleja_identikaatorid := [&#39;\&#39;, &#39;<&#39;]7foreachmetamuutuja in forall_sisudo8ifmetamuutuja on esimene elementthen9piiritleja_identikaator =KONTROLLI_PIIRITLEJA_OLEMASOLU (0,len(piiritleja_identikaatorid), metamuutuja,piiritleja_identikaatorid)10ifleidub piiritleja identikaatorthen11alumine_piir := LEIA ALUMINE PIIRITLEJA(piiritleja_identikaator, metamuutuja)12else ifmetamuutuja on viimane elementthen13piiritleja_identikaator =KONTROLLI_PIIRITLEJA_OLEMASOLU (0,len(piiritleja_identikaatorid) metamuutuja,piiritleja_identikaatorid)14ifleidub piiritleja identikaatorthen15ülemine_piir := LEIA_ULEMINE_PIIRITLEJA(piiritleja_identikaator, metamuutuja)16ifforall järel ei leidu topeltkaldkriipsuthenkorrutatav := &#34;bigwedge&#34;17elsekorrutatav := forall järel olev operaator21 1819korrutatava_sisu = korrutatava järel sulgude sees olev sisu20laiendatud = korrutatava_sisu21foreachmetamuutuja in forall sisudo22uus_rada = alumine_piir + metamuutuja + ülemine_piir23laiendatud_operaator = korrutatav + &#34;_{&#34;+ uus_rada + &#34;}&#34;24laiendatud= laiendatud_operaator + &#34;(&#34;+ laiendatud + &#34;)&#34;25else26Algoritm lõpetab tööJoonis 7. 4.1 KonstruktorAntud keele grammatika on koostatud keelekonstruktoriga, mis võtab sisendiks keelegrammatika kirjelduse failis laiendiga:grm[9].
| Lausearvutusvalemite kompilaatori käitamisel töödeldakse8 sisend esmalt läbi eelprotsessori. Selle käigus tehakse vajalikud asendused vastavalt asen-damisreeglitele ning valemite parametriseerimine ehk muutujatena deneeritud osadelahti kirjutamine [2]. Eelprotsessori teisenduste tõttu on võimalik anda programmile etteselline sisend , mis ei pea tingimata vastama täielikult eeldeneeritud grammatikareeg-litele. Eelprotsessori lubatud möönduste tõttu teisendatakse sisult sarnane sisend kom-pilaatorile üheselt aktsepteeritavale kujule. Teisisõnu on võimalik eelprotsesori kaudulaiendada keelele vastuvõetavat sisendit .1.3 TranslaatorJärgnev lõik tugineb A. Isotamme raamatule translaatorite koostamisest [9].Translaatoron programm, mis võtab sisendiks mõnes keeles kirjutatud programmi ning tagab sellesisu täitmise. Translaatoreid saab eristada kompilaatoriteks või interpretaatoriteks, kuidesineb ka programme, mis saavad töötada mõlemas reiimis. Kompilaatori töö tulemuse-na tõlgitakse programmi sisend ühest programmeerimiskeelest teise, kuid interpretaatortöötab lähteprogrammi keele raames. Käesoleva loogikavalemite translaatori korral ontegemist kompilaatoriga, kuna sisendiks on tekst LATEXformaadis, aga väljund on kahesvormingus, DIMACS-isatexjatav[3,4]. Väljundformaattavon loodud sellise prog-rammi kasutamise otstarbeks, mida saab kasutada A. Isotamme koostatud kehtestavateväärtustuste loenduri sisendina .1.4 Programmeerimiskeele täiendamineOlemas on kaks peamist viisi, mille kaudu saab mõnda keelt täiendada. Esimene võimaluson suurendada grammatikareeglite hulka ehk deneerida juurde reegleid, mis laiendavadvastuvõetavat keele sisendit . Grammatikareeglite täiendamine tähendab üldjuhul keeltkäsitleva translaatori moditseerimist, et translaator oskaks sisendit käsitleda ka uuereeglite hulgaga.