Institute of Computer Science
  1. Courses
  2. 2019/20 spring
  3. Automata, Languages and Compilers (LTAT.03.006)
ET
Log in

Automata, Languages and Compilers 2019/20 spring

  • Üldinfo
  • Eksami näidised
    • Imperatiivne Imp
    • Beebiprolog Bolog
    • Paralleelne Parm
    • Uskumatu Hulk
    • Dialektiline Dialoog
    • Puhas Pullet
    • Eestimaine Estolog
  • Kava
    • 1. Soojendus
    • 2. Regulaaravaldised
    • 3. Olekumasinad
    • 4. Avaldise struktuur
    • 5. Grammatikad ja lekser
    • 6. Käsitsi parsimine
    • 7. ANTLRiga töötamine
      • Paigaldus
      • Sissejuhatus
      • ANTLRi parsepuu
      • AST klassid
      • Eksami põhiosa!
      • Kodutöö
    • 8. Interpretaator
    • 9. Kompilaator
  • Bitbucket
  • Moodle
  • Fleep!

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:

S → (L) | ()
L → A,L | A
A → ident | 0 | S

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!

  • Institute of Computer Science
  • Faculty of Science and Technology
  • University of Tartu
In case of technical problems or questions write to:

Contact the course organizers with the organizational and course content questions.
The proprietary copyrights of educational materials belong to the University of Tartu. The use of educational materials is permitted for the purposes and under the conditions provided for in the copyright law for the free use of a work. When using educational materials, the user is obligated to give credit to the author of the educational materials.
The use of educational materials for other purposes is allowed only with the prior written consent of the University of Tartu.
Terms of use for the Courses environment