U L i k o o L matemaatika-informaatikateaduskond



Yüklə 0,53 Mb.

səhifə19/23
tarix13.11.2017
ölçüsü0,53 Mb.
1   ...   15   16   17   18   19   20   21   22   23

semantika. Failis Interpret.hs defineeritakse interpretaator ise IO-monaa-

dilise tegevusena. IO-monaadi kasutataksegi ainult siin ning Fumontrixi ST-

monaadi realiseerimiseks.

7.3


Fumontrixi semantika kirjeldamisest

7.3.1


Semantika tasemed

Fumontrixis antakse semantika kolmel erineval tasemel: liigitase, t¨u¨ubitase

ja andmetase. Neist esimesed kaks moodustavad staatilise semantika, kuna

need arvutatakse v¨alja t¨u¨ubikontrolli k¨aigus, see arvutuste k¨aik on igal prog-

rammi k¨aivitamisel sama (kui kood ei ole muutunud) ning nende arvutuste

termineerumine on garanteeritud.

Andmetaseme semantika moodustab d¨unaamilise semantika, mille arvu-

tamine ei pruugi termineeruda. Siin v˜oiks ka arvutuse k¨aik erinevatel prog-

rammi k¨aivitamistel olla erinev, kui programm saaks teha sisendi-v¨aljundi

operatsioone. Fumontrixis siiski sisendit-v¨aljundit realiseeritud ei ole (v.a

ST-monaadi viidad ja massiivid, kuid neid saab kasutada ainult muust maa-

ilmast eraldatud l˜oimedes, mille algseisund on fikseeritud, seega on arvutused

seal deterministlikud).

Failis Denot.hs antakse liigitaseme semantika funktsioonidega, mille nimi

l˜opeb sufiksiga Kem, t¨u¨ubitaseme semantika sufiksiga Zem ning andmetaseme

semantika sufiksiga Sem. N¨aiteks avaldiste semantika antakse funktsioonidega

exprKem, exprZem ja exprSem.

7.3.2


Seosed semantika tasemete vahel

Kuigi Fumontrixi semantika antakse kolmel erinevale tasemel, on need tase-

med mingil m¨a¨aral omavahel seotud. N¨aiteks t¨u¨ubi(konstruktori) rakenda-

misel universaalselt kvantifitseeritud t¨u¨upi v¨a¨artusele (pol¨umorfse v¨a¨artuse

spetsialiseerimisel operaatori $: abil) m¨a¨aratakse rakendatava t¨u¨ubikonst-

ruktori liik liigitaseme semantikaga. See liik peab ¨uhtima pol¨umorfse t¨u¨ubi

kvantoriga seotud muutuja liigiga, kuid viimane selgub alles t¨u¨ubitaseme

semantikas, kvantifitseeritud t¨u¨up ise on liiki * ja liigitasemel selle kohta

rohkem infot k¨atte ei saa. N¨aiteks

(type tf Int) $: List

kus tf on t¨u¨ubitaseme funktsioon liiki * -> @. Siis type tf Int on v¨a¨ar-

tus ning rakendatav t¨u¨up List on liiki * -> *. Liigitasemel v¨a¨artuse t¨u¨ubi

kohta mingit infot teada ei ole. T¨u¨ubitaseme funktsioon tf v˜oib tagastada

nii forall A. A kui forall M : * -> * . M Int t¨u¨upi v¨a¨artuse, olenevalt

61



argumendist. Kuna liigitasemel t¨u¨ubitaseme funktsioone ei v¨a¨artustata (se-

da tehakse t¨u¨ubitasemel), siis ei ole liigitasemel v˜oimalik neil juhtudel vahet

teha.

Seega toimub liikide ¨uhtimise kontroll antud juhul t¨u¨ubitasemel ja selleks



on vaja edastada liigitaseme semantikas v¨alja arvutatud rakendatava t¨u¨u-

bikonstruktori liik (antud juhul List : * -> *) t¨u¨ubitasemele. Alternatiiv

oleks see info t¨u¨ubitasemel uuesti v¨alja arvutada. See t¨ahendaks korduvat

sama asja uuesti v¨aljaarvutamist. N¨aiteks kui see $: rakendus asub kuskil

t¨u¨ubitaseme funktsiooni sees ning seda t¨u¨ubitaseme funktsiooni kutsutakse

korduvalt v¨alja, siis oleks (selle $: rakenduse) liigitaseme semantika igal v¨al-

jakutsel sama, kuid t¨u¨ubitaseme semantika v˜oib olla iga kord erinev, s˜oltudes

selle t¨u¨ubitaseme funktsiooni argumendist. Sellep¨arast ongi liigitase t¨u¨ubita-

semest eraldatud.

Seega on vaja edastada infot liigitasemelt t¨u¨ubitasemele ja Fumontrixi

interpretaatoris kasutatakse selleks KemInfo t¨u¨upi v¨a¨artusi. Mingile s¨untak-

tilisele objektile liigitaseme semantika arvutamisel leitakse lisaks KemInfo

v¨a¨artus, mis sisaldab t¨u¨ubitasemele edastatavat infot nii selle s¨untaktilise

objekti kui selle alamobjektide jaoks. See v˜oimaldab arvutada v¨alja liigita-

seme semantika kogu programmi jaoks ning saada kohe k¨atte t¨u¨ubitasemele

edastatav info k˜oigi selle alamobjektide jaoks. See KemInfo v¨a¨artus antakse

siis t¨u¨ubitaseme semantika arvutamisel parameetriks. S¨untaktiliste objekti-

de t¨u¨ubitaseme semantika v˜oib s˜oltuda alamobjektide semantikast, mille ar-

vutamiseks vajalik KemInfo v¨a¨artus sisaldub parameetrina k˜orgema taseme

objekti KemInfo v¨a¨artuses.

Seega info liigub lihtsalt liigitasemelt t¨u¨ubitasemele. Natuke ebamugav on

k¨ull see, et KemInfo v¨a¨artusi tuleb t¨o¨odelda ka nende s¨untaktiliste objektide

juures, mis ise seda infot ei kasuta, kuid mille alamobjektid kasutavad seda.

N¨aiteks tavalise t¨u¨ubitaseme funktsiooni rakendamise jaoks tuleb liigitasemel

funktsiooni ja argumendi KemInfo ¨uhendada (konstruktori KIList abil) ning

t¨u¨ubitasemel j¨alle eraldada ja anda alamobjekti semantikate arvutamisel pa-

rameetriks.

Lisaks liigitaseme ja t¨u¨ubitaseme seotusele on seotud ka t¨u¨ubitase ja

andmetase (n¨aiteks andmetaseme funktsiooni rakendamise korral m¨a¨aratak-

se andmetasemel rakendamiseks kasutatav monomorfne operaator t¨u¨ubitase-

mel, kuna see s˜oltub (ainult) funktsiooni ja argumendi t¨u¨upidest, andmeta-

semel on vaja ainult funktsiooni ja argumendi v¨a¨artused sellele operaatorile

argumendiks anda). Seal kasutatakse analoogilist meetodit info edastamiseks

¨uhelt tasemelt teisele. KemInfo asemel kasutatakse siin StatSemInfo t¨u¨upi

v¨a¨artusi.

62



7.3.3

Monaadid semantika esitamisel

Antav semantika vastab enam-v¨ahem denotatsioonilisele semantikale, ku-

na konstruktsioonide semantika antakse puhtalt funktsionaalsel kujul alam-

konstruktsioonide (komponentide) kaudu (kompositsiooniliselt). T¨u¨ubikont-

rolli ja liigikontrolli jaoks kasutatakse siiski (puhtalt funktsionaalselt defi-

neeritud) monaade. T¨u¨ubikontrolli monaad TC v˜oimaldab hoida kas tavalist

v¨a¨artust v˜oi erindit (t¨u¨ubiviga). Sellisel juhul ei ole vaja igas kohas, kus v˜oib

t¨u¨ubiviga tekkida, seda kontrollida — kui kuskil tekib t¨u¨ubiviga, siis on see

l˜opptulemuses n¨aha.

Liigikontrolli monaad KC v˜oimaldab lisaks erindile (liigiveale) kasutada

ka lihtsat seisundit. Seda kasutatakse unikaalsete identifikaatorite generee-

rimiseks, et nummerdada t¨u¨ubitaseme v¨a¨artuste kontekste. See on vajalik

leksilise skoopimise s¨ailitamiseks, kuna t¨u¨ubitaseme v¨a¨artust v˜oidakse kasu-

tada ka mingis muus skoobis kui see, milles see defineeriti.

7.3.4


Andmestruktuurid semantika esitamisel

Semantika andmisel kasutatakse konteksti (staatilises semantikas) ja keskkon-

da (d¨unaamilises semantikas). Kumbki neist koosneb Haskelli Map-t¨u¨upi and-

mestruktuuridest. Map on andmestruktuur, mis seab m˜onedele teatud t¨u¨upi

v¨a¨artustele (see t¨u¨up peab olema Ord-klassi esindaja) vastavusse maksimaal-

selt ¨uhe mingit teist t¨u¨upi v¨a¨artuse.

See andmestruktuur on Haskellis realiseeritud funktsionaalselt, seega ole-

masolevat andmestruktuuri ei saa muuta. Kui on vaja seal andmestruktuuris

muudatusi teha (kirjeid lisada, kustutada, muuta), siis luuakse uus andme-

struktuur, mis erineb vanast nende muudatuste v˜orra, kuid vana andmestruk-

tuur j¨a¨ab ka alles ning viidad sellele j¨a¨avad kehtima (kui ¨ukski viit enam sin-

na ei viita, siis v˜oib pr¨ugikoristus selle minema visata). Kuna vanal ja uuel

andmestruktuuril on siiski ¨usna palju ¨uhist, siis ei pea iga muudatuse jaoks

t¨aielikku koopiat tegema, vaid andmeid v˜oib jagada erinevate versioonide va-

hel. Seet˜ottu see funktsionaalne andmestruktuur ei ole v¨aga palju aeglasem

ja m¨alun˜oudlikum kui vastavad imperatiivsed andmestruktuurid.

7.4

Lihtsamate konstruktsioonide semantikast



7.4.1

Avaldised

Enamiku avaldisekonstruktsioonide semantika on ¨usna lihtne ja standardne.

Avaldise semantika m¨a¨arab selle t¨u¨ubi ja v¨a¨artuse, mis s˜oltuvad kontekstist

ja keskkonnast.

63





Dostları ilə paylaş:
1   ...   15   16   17   18   19   20   21   22   23


Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©genderi.org 2019
rəhbərliyinə müraciət

    Ana səhifə