9. Kompilaator
Me tahame nüüd Java baitkoodi genereerida. Selleks peab aga kõigepealt programmi analüüsida, muidu läheb koodi genereerimine väga raskeks. Töötava kompilaatori jõudmiseni on meil jäänud järgmised kaks kodutööd:
- Semantiline analüüs. Muutujate skoopidega seotud probleemide lahendamiseks seome muutujate kasutusi nende definitsioonidega. Teostame ka tüübikontroll, et tüübivigu avastada kompileerimise ajal.
- Baitkoodi genereerimine. Kasutame ASM teeki visitorit, et genereerida Java baitkoodi. Sellega on AKT keele kompilaator valmis.
Java baitkood on magasin-põhise abstraktse masina kood. Selle koodi genereerimise põhimõtte on palju mugavam õppida lihtsustatud abstraktse masina CMa põhjal, mida saab visualiseerida töövahendiga VAM. Kui me eksamil 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. Lisaks ilmub mõni uus keel ka juurde, mille peal kogu eksamit veel harjutada.
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.