Institute of Computer Science
  1. Main page
  2. Automata, Languages and Compilers
ET
Log in

Automata, Languages and Compilers

  • Üldinfo
  • Ajakava
  • Eksami näidised
  • Teemad
    • 1. Soojendus
    • 2. Regulaaravaldised
    • 3. Automaadid
    • 4. Avaldise struktuur
    • 5. Grammatikad ja lekser
    • 6. Käsitsi parsimine
    • 7. ANTLRiga töötamine
    • 8. Interpretaator
    • 9. Kompilaator
      • Vam: CMa simulaator
      • Eksami lõviosa!
      • Kodutöö: Analüüs
      • Kodutöö: Kompilaator
    • 10. Edasi!
  • Süvendus
  • GitHub
  • Moodle
  • Zulip
  • Zoom

9. Kompilaator

Me tahame nüüd Java baitkoodi genereerida. Selleks peab aga kõigepealt programmi analüüsima, muidu läheb koodi genereerimine väga raskeks. Töötava kompilaatori jõudmiseni on meil jäänud järgmised kaks kodutööd:

  1. Semantiline analüüs. Muutujate skoopidega seotud probleemide lahendamiseks seome muutujate kasutused nende definitsioonidega. Teostame ka tüübikontroll, et tüübivigu avastada kompileerimise ajal.
  2. Baitkoodi genereerimine. Kasutame ASM teeki, et genereerida Java baitkoodi. Sellega on AKT keele kompilaator valmis.

Java baitkood on magasin-põhise abstraktse masina kood. Selle koodi genereerimise põhimõtet on palju mugavam õppida lihtsustatud abstraktse masina CMa põhjal, mida saab visualiseerida töövahendiga Vam. Kui me eksami lõviosas kirjutame kompilaatori, siis me ei hakka Java baitkoodi genereerima, vaid genereerime hoopis CMa koodi.

  • CMa simuleerimine. Kõigepealt vaatame, kuidas saab CMa koodi täitmist visualiseerida töövahendiga Vam. Veel tähtsam on aga tutvuda meie enda CMa koodi genereerimise ja testimise raamistikuga, sest eksami lõviosas on vaja seda kasutada.
  • Lõviosa harjutamiseks vaatame koodi genereerimise osad üle meie vanade heade näidiskeelte peal.

Sellega on meil siis kompilaator valmis: meie enda pisike javac moodi tööriist, mis teisendab AKT keele programme Java baitkoodiks, mida Java virtuaalmasin oskab interpreteerida. See on muidugi väga vinge, kui said sellise asja lõpuks tööle!

Meie kursuse põhieesmärk on aga nendest põhimõttetest aru saada, kuidas programme täidetakse. Baitkoodi juures on samamoodi olulisem aru saada magasinpõhise masina ideest ja imetleda koodi genereerimise ilusat kompositsionaalset skeemi: kompilaator on struktuuri poolest samasugune AST visitor nagu interpretaator.

  • 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