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

Automata, Languages and Compilers 2017/18 spring

  • Üldinfo
  1. Õppekorraldus
  2. Eksam
  3. Reeglid
  4. Töövahendid
  5. Projekt
  • Kava
  1. Soojendus
  2. Regulaaravaldised
  3. Olekumasinad
  4. Lõplikud automaadid
  5. Avaldise struktuur
  6. Grammatikad ja lekser
    1. Grammatika mõiste
    2. Grammatika automaadid*
    3. Lekseri soojendus
    4. Kodutöö
    5. Magisiniga masinad*
  7. Käsitsi parsimine
  8. ANTLR intro
  9. AST loomine
  10. Interpretaator
  11. Semantiline analüüs
  12. Kompilaator
  • Moodle
  • Bitbucket
  • Fleep!

6. kodutöö: AKTK lekser

Varsti alustame me kodutööde sarja, mille käigus on vaja luua erinevaid komponente ühe väljamõeldud keele translaatorile. Seda keelt nimetame me nimega AKTK (st. AKT keel). Tegemist on lihtsa imperatiivse, üldotstarbelise programmeerimisekeelega. Seda keelt tahame arendada töövahendiga ANTLR, aga selle pime kasutamine on väga ohtlik. ANTLR lubab ühes failis spetsifitseerida nii lekserit kui ka parserit, aga nad käituvad erinevatel põhimõtetel.

ANTLRi tööpõhimõtte arusaamiseks implementeerime käsitsi lekserit ja parserit. Sellejuures on lekseri implementeerimine palju piinarikkam, aga edasi lähevad meil asjad lihtsamaks. Antud kodutöös tuleb siis implementeerida lekser AKTK jaoks. Ülesanne põhi on kursuse repos, kus tuleks lõpuni implementeerida Lexer.java.

AKTK programmides võivad esineda:

  • võtmesõnad if, while ja var;
  • märgita täisarvuliteraalid (nt. 3 või 34);
  • märgita murdarvuliteraalid (nt. 3.14, teaduslikku notatsiooni ei pea toetama);
  • sõneliteraalid (nt. "kala" või "Ta ütles \"Jah!\"");
    • selgituseks -- langkriipsuga tähistatakse teatud erisümboleid:
      • \n tähistab reavahetust
      • \t tähistab tabulaatorit
      • \" tähistab jutumärki
      • \\ tähistab langkriipsu
    • Pane tähele, et kui tekstfailis on kirjas sõneliteraal "a\nb", siis on tegemist nelja tähega ehk järgmine tähtede massiiv ['a', '\\', 'n', 'b']. Me tahame sellest saada sõne kolmest tähest koosnev sõne: ['a', '\n', 'b'].
  • muutuja nimed (nt. kala);
    • muutuja nime esimene sümbol peab olema täht (kasuta Character.isLetter) või allkriips, edasi võib tulla ka numbreid;
  • operaatorid +, -, *, /;
  • sulud ((, ));
  • kommentaarid (ühe- ja mitmerealised, nagu Javas);
  • lekseemide vahel võivad olla tühisümbolid (reavahetus, tühik ja tabulaator).

Lexer-i poolt genereeritava lekseemide jada lõpus peaks olema lekseem tüübiga EOF. Kommentaare ja tühisümboleid peab lekser ignoreerima, nendele vastavaid lekseeme ei ole ette nähtud.

Lekseemide kujutamiseks on mõeldud klassid Token ja TokenType. Token.data kohta käivad eeldused on kirjas TokenType-i juures.

Kokkuvõte

  • Esitada tuleb Lexer.java. Tähtajaks on 10. aprill.
  • Kõik testid avalikud, aga lõplik hinne paneb juhendaja. Kui lahendus töötab ainult nendel testidel, siis me palju punkte ei anna.
  • Soovitus: kui sa kõiki lekseemide tüüpe ei oska tuvastada, siis tee need, mida oskad. Testid lähevad järjest raskemaks.
  • Tokeni juurde võib, aga ei pea, lisama info selle kohta, kus lekseem failis paikneb. See on meil ainult üks test (üheksas test), mis kontrollib, kas asukoht on seal määratud või mitte.
  • Viimane test kontrollib, et vaatad sisendit läbi enam-vähem lineaarselt ja liiga palju edasi-tagasi ei hüppa. Üldiselt oleme niimoodi õpetanud teil mõtlema (nii olekumasinate kui ka kalaparseri näitel), et see test ei tohiks probleeme valmistama.
  • 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