Cilj ovog projekta je izrada kompajlera za mikrojavu. Kompajler se generise iz 3 modula:
- Generatora lexera, koji prihvata .flex fajl u kojem specificiramo tokene jezika; izvršavanjem LexerGenerator run configuracije, iz .flex fajla generiše se lexer,
- Generatora parsera, koji se generiše iz .cup fajla i specificira ispravne izraze programskog jezika mikrojava,
- Generatora koda, koji prima naredbe od parsera i ima za zadatak da generiše ispravan kod.
Nakon pozicioniranja u src folder:
- Generisanje lexera:
java -cp ../lib/JFlex.jar JFlex.Main -d rs\ac\bg\etf\pp1 ..\spec\mjlexer.flex
- Generisanje parsera:
java -cp ../lib/cup_v10k.jar java_cup.Main -destdir rs\ac\bg\etf\pp1 -parser MJParser -ast rs.ac.bg.etf.pp1.ast -buildtree ..\spec\mjparser.cup
- Kompilacija projekta:
javac -cp ..\lib\* rs\ac\bg\etf\pp1\ast\*.java rs\ac\bg\etf\pp1\util\*.java rs\ac\bg\etf\pp1\*.java
- Kompajliranje .mj programa:
java -cp ..\lib\*;. rs.ac.bg.etf.pp1.Compiler <.mj_file_src> <.obj_file_dst>
- Disasm:
java -cp ..\lib\mj-runtime.jar rs.etf.pp1.mj.runtime.disasm <.obj_file_src>
- Run/Debug:
java -cp ..\lib\mj-runtime.jar rs.etf.pp1.mj.runtime.Run [-debug] <.obj_file_src>
Pored javnih testova, conditionals.mj demonstrira rad sa if iskazima i petljama, iskakanje iz petlji, dok virt_metode.mj testira nasledjivanje i polimorfizam.
Prosiruje datu implementaciju tabele simbola, dodavajuci osnovni tip bool, kao i dve strukture podataka koje pomazu pri obradi klasnih metoda.
Implementacija SymbolTableVisitor klase koja sluzi za ispis tabele simbola.