Eksami põhiosa
Eksami alusosaga implementeerime abstraktse süntaksipuu väärtustamist, aga need süntaksipuud ei kasva just puu otsas, vaid tuleb ise kasvatada. Nüüd on aeg neid ANTLRi abil kasvatada. See viimane protsess näeb siis järgmiselt välja.
Kahe nädala jooksul harjutame praktikumides nende näidiskeelte parserite kirjutamist. Esimene nädal keskendume rohkem esimesele etapile ja siis järgmisel nädalal vaatame nende süntaksipuude loomist. Kodutöös tuleb seda protsessi läbi teha AKTK jaoks.
Kala grammatika
Alustuseks lahendame vana hea KalaParseri ülesande kasutades ANTLRit. Me tahame esmalt kirjutada ANTLRi grammatika (faili Kala.g4) ning seejärel koostada ASTi (faili KalaAst.java) kasutades käsitsi parsimisel defineeritud KalaNode klasse.
Meeldetuletuseks: grammatika koosneb sulgudega ümbritsetud elementide listist, list võib olla ka tühi. Listi elemendid on omavahel eraldatud komaga, elementideks võivad olla väiketähtedest koosnev muutuja nimi, võtmesõna "null" või sulgudega ümbritsetud list. Lekseemide vahel ja ümber võib olla suvaline arv tühikuid ja tabulaatoreid.
Korrektne sisend on näiteks (kala, (x,y , null, (), (kala,()) ))
.
Kirjelduse järgi võid uue grammatika ise välja mõelda või siis kasutada käsitsi parsimisel toodud grammatikat:
Peale grammatika loomist tuleb lasta ANTLR-il genereerida lekser ja parser ning seejärel täiendada KalaAst.java faili, et koostada AST. ASTi elemente saab luua staatiliste meetoditega mkNull, mkIdent ja mkList (failis KalaNode.java).
Eksamiks harjutamine
Nüüd oleme siis jõudnud nii kaugele, et võime eksami näidetes lahendada põhiosasid. Praktikumides lahendame vähemalt Imp keele põhiosa ja nii palju kui jõuame, aga veel parem oleks muidugi iseseisvalt lahendada!