Arvutiteaduse instituut
  1. Kursused
  2. 2015/16 kevad
  3. Automaadid, keeled ja translaatorid (MTAT.05.085)
EN
Logi sisse

Automaadid, keeled ja translaatorid 2015/16 kevad

  • Pealeht
  • Moodle
  • Bitbucket
  • Projekt
  • Materjalid
  • Töövahendid
  • Reeglid
  • Viited

ANTLR eksamiülesannete näited

Siin on mõned näited eelmistest aastatest. Avalikus repos on nendele vastavad testid. Selle aasta kontrolltööl ja eksamil tuleb ka samasuguse struktuuriga ülesanne.

Wiki.g

Kirjuta ANTLR-i grammatika wikilehe kirjutamise formaadi jaoks.

  • Wikileht koosneb pealkirjast ja ühest või rohkemast sektsioonist. Sektsioonid on üksteisest eraldatud tühja reaga.
  • Pealkiri on tekstirida, millele järgneb 5 või rohkemast miinusmärgist koosnev rida.
  • Sektsioone on kolme tüüpi: paragrahvid, koodiplokid ja loetelud.
  • Paragrahvid koosnevad ühest või rohkemast reast. Rea sisu koosneb ladina suur- või väiketähtedest, punktidest, komadest ja tühikutest. Rea lõpus on alati reavahetus (ka viimase rea järel). Paragrahvi rida ei või olla tühi (st. ei või koosneda ainult reavahetusest).
  • Koodiplokid on peaaegu nagu paragrahvid. Ainuke erinevus on selles, et iga rea alguses on suurem-kui sümbol ja tühik.
  • Loetelud meenutavad samuti paragrahve (kuna tegemist on jällegi ilma tühjade ridadeta tekstiplokiga), aga iga rea alguses on tärn(id). Loetelu esimese taseme moodustavad read, mis algavad ühe tärni ja sellele järgneva tühikuga. Igale sellisele reale võib järgneda mitu teise taseme rida, mis erinevad esimese taseme ridadest selle poolest, et rea alguses on ühe tärni asemel kaks tärni. Analoogselt võib teise taseme rea all olla mitu kolmanda taseme rida (kolme tärniga). Kolmanda taseme ridadel alluvaid olla ei saa.
See siin on pealkiri
----------------------
Esimese paragrahvi esimene rida.
Esimese paragrahvi teine rida.

Teine paragrahv

* See siin on esimese taseme loetelupunkt.
* Uskumatu, aga see on samuti esimese taseme loetelupunkt.
** teise taseme loetelupunkt ...
* esimese taseme loetelupunkt ...
** teise taseme loetelupunkt ...
** teise taseme loetelupunkt ...
*** kolmanda taseme loetelupunkt ...
*** kolmanda taseme loetelupunkt ...

> koodiploki esimene rida
> koodiploki teine rida

NB! Pane tähele, et näite lõpus, peale koodiploki teist rida on üksainus reavahetus, millele ei järgne mitte midagi.

Quiz.g

Kirjuta lihtsustatud ANTLR-i grammatika elektroonilise testi (ingl. k. quiz) kirjeldamiseks. Testi kirjeldus koosneb kahest sektsioonist – üldinfo ja küsimused.

Üldinfo sektsioon algab pealkirjareaga --- YLDINFO ---. Selle all tulevad eraldi ridadel info pealkirja ja ajapiirangu kohta. Pealkiri antakse võtmesõna pealkiri ja sellele järgneva kooloni ja tühiku järel. Pealkirja tekst koosneb ladina suur- või väiketähtedest, punktidest, komadest, küsimärkidest ja tühikutest. Ajapiirang antakse võtmesõna ajapiirang ja sellele järgneva kooloni ning tühiku järel. Sinna kirjutatakse märgita positiivne täisarv ja selle järel tühik ning võtmesõna min. NB! Grammatika peab toetama nii seda varianti, kus pealkiri on enne, kui ka seda varianti, kus ajapiirang on enne.

Küsimuste sektsioon algab pealkirjareaga --- KYSIMUSED ---. Selle all tuleb 1 või rohkem küsimust. Iga küsimus võtab enda alla vähemalt ühe rea. Küsimusi on 5 tüüpi: ARVUVASTUSEGA, LYHIVASTUSEGA, VALIKVASTUSEGA, JAH-EI ning ESSEE. Kõikidel juhtudel algab küsimus küsimuse tüübi nimetusega, millele järgneb koolon, tühik ja seejärel küsimuse tekst. Mõnede küsimuse tüüpide korral (ARVUVASTUSEGA, LYHIVASTUSEGA, JAH-EI) on järgmisel real antud õige vastus (võtmesõna oige, koolon, tühik ja vastuse tekst). Arvuvastusega küsimuse puhul peab õige vastus olema märgita täisarv ja sellele võib järgneda +/- ning veel üks märgita täisarv. Jah-ei küsimuse puhul peab õige vastus olema kas jah või ei.

Valikvastusega küsimuse puhul järgneb küsimusele valikute loetelu, iga valik eraldi real. Valede valikute read algavad miinuse ja tühikuga, õigete valikute read algavad plussi ja tühikuga. Õigete ja valede valikute järjekord pole oluline. Valikute hulgas peab olema vähemalt üks õige vastus. Esseeküsimuse korral õiget vastust pole antud.

Küsimuse tekstile ja vastusevariantide tekstile kehtivad samad reeglid nagu testi pealkirjale (vt. ülaltpoolt). Küsimuste vahel võib olla 1 või rohkem tühja rida, aga ei pea olema. Sektsioonide vahel on vähemalt 1 tühi rida. Sektsioonide järjekord pole oluline, aga mõlemad sektsioonid (st. üldinfo ja küsimused) peavad eksisteerima. Faili lõpus võib olla suvaline arv reavahetusi.

NB! Tühikute kasutamine ei ole paindlik – tühikute lubatud esinemiskohad on ülalpool ära toodud.

--- YLDINFO ---
pealkiri: AKT test
ajapiirang: 105 min

--- KYSIMUSED ---
ARVUVASTUSEGA: Mitu mulli on mullivees?
oige: 4958 +/- 3
LYHIVASTUSEGA: Millal maksad eide vaeva?
oige: homme

VALIKVASTUSEGA: Kuidas sai moos kommi sisse?
- Komm kasteti moosi sisse ja keerati pahupidi
- Systlaga pandi
+ See on seal koguaeg olnud

JAH-EI: Hunt hunti ei murra
oige: jah

ESSEE: Miks mulle meeldib AKT?
ARVUVASTUSEGA: Mitu linna on Eestis?
oige: 47

NB! Pane tähele, et näite lõpus on üksainus reavahetus, millele ei järgne mitte midagi.

Oldie.g

Selles ülesandes tuleb kirjutada lihtsustatud grammatika (fail Oldie.g4 kaustas oldie) keelele OLDIE-2. Paremal on toodud üks näide OLDIE-2 programmist.

10 INPUT "What is your name ", U$
20 PRINT "Hello "; U$
30 INPUT "How many stars ", N
40 S$ = ""
50 I = 0
60 S$ = S$ + "s"
65 I = I + 1
70 IF I < N THEN GOTO 60
80 PRINT S$
90 INPUT "Do you want more  ", A$
100 IF LEN(A$) == 0 THEN GOTO 90
120 IF (A$ == "Y") OR (A$ == "y") THEN GOTO 30
130 PRINT "Goodbye "; U$
140 END

Selles keeles on iga lause eraldi real. Programm koosneb vähemalt ühest reast. Iga rida lõpeb reavahetusega, tühje ridu programmis ei ole. Rea alguses on märgita täisarv, mida võiks nimetada lause identifikaatoriks ja mida kasutatakse peamiselt programmis edasi või tagasi hüppamiseks (antud näites GOTO 30 liigutab täitmise järjehoidja programmi kolmanda lause ette).

Loodav grammatika peab toetama 6 lauseliiki: 5 lihtlause liiki ja IF-lauset. Kirjeldame kõigepealt lihtlauseid.

  • Omistamine koosneb muutujanimest (täpsustatud allpool), võrdusmärgist ja avaldisest.
  • GOTO-lause koosneb võtmesõnast GOTO ning sellele järgnevast lause identifikaatorist.
  • INPUT-lause koosneb võtmesõnast INPUT, millele peab järgnema küsimus (esitatud suvalise avaldisena), seejärel koma ja lõpuks muutujanimi, kuhu sisestatud tekst salvestatakse.
  • PRINT-lause algab võtmesõnaga PRINT, sellele järgnevad semikoolonitega eraldatuna 0 või rohkem avaldist (mis määravad, mida ekraanile kuvatakse). Kui pole antud ühtegi avaldist, siis see tähendab ainult reavahetuse kuvamist. (Lihtsustus (-1p): võite nõuda, et alati on antud vähemalt üks avaldis)
  • END-lause koosneb võtmesõnast END. Selle käivitamisel lõpetatakse programmi töö.
  • IF-lause koosneb võtmesõnast IF, tingimust esitavast avaldisest, võtmesõnast THEN ning sellele järgnevast lihtlausest.

Järgmiseks kirjeldame avaldise liike.

  • Täisarvuliteraal (lihtsuse mõttes olgu see praegu ilma märgita). Nullist erinevad täisarvud võivad alata ka 0-ga.
  • Sõneliteraal koosneb jutumärkide vahel olevast 0 või rohkemast sümbolist. Lubatud sümbolid on ladina suur- või väiketähest ja tühik.
  • Muutuja nimi koosneb 1 või enamast ladina suurtähest, millele võib järgneda üks dollari märk.
  • Binaarne operatsioon koosneb vasakpoolsest avaldisest, operaatorist (lubatud on +, -, *, /, ==, <>, <, >, <=, >=, AND, OR) ja parempoolsest avaldisest. Tehete prioriteetide pärast muretsema ei pea, eeldame, et programmeerija kasutab vajalikes kohtades sulge.
  • Funktsiooni väljakutse koosneb funktsiooni nimest (sellele kehtivad samad reeglid nagu muutujanimele), millele järgneb üks sulgudes olev avaldis.
  • Suluavaldis moodustatakse avaldisest, mille ümber pannakse üks paar ümarsulge.

Keele elementide vahel võib suvaliselt kasutada tühikuid ja tabulaatoreid.

  • Arvutiteaduse instituut
  • Loodus- ja täppisteaduste valdkond
  • Tartu Ülikool
Tehniliste probleemide või küsimuste korral kirjuta:

Kursuse sisu ja korralduslike küsimustega pöörduge kursuse korraldajate poole.
Õppematerjalide varalised autoriõigused kuuluvad Tartu Ülikoolile. Õppematerjalide kasutamine on lubatud autoriõiguse seaduses ettenähtud teose vaba kasutamise eesmärkidel ja tingimustel. Õppematerjalide kasutamisel on kasutaja kohustatud viitama õppematerjalide autorile.
Õppematerjalide kasutamine muudel eesmärkidel on lubatud ainult Tartu Ülikooli eelneval kirjalikul nõusolekul.
Tartu Ülikooli arvutiteaduse instituudi kursuste läbiviimist toetavad järgmised programmid:
euroopa sotsiaalfondi logo