Eksami teine ülesanne (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 AKT keele jaoks.
Kala grammatika
Alustuseks lahendame vana hea KalaParseri ülesande kasutades ANTLRi. 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 siis 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 kaugel, et võime eksami näidetes lahendada teised põhiosa. Praktikumides lahendame vähemalt Imp keele põhiosa ja nii palju kui jõuame, aga veel parem oleks muidugi iseseisvalt lahendada! Lisanduvad ka paar uut keelt, millega siis harjutada väärtustmist ka, sest see on ju kõige aluseks!