/microjava-compiler

Compiler for a Java-like object-oriented programming language

Primary LanguageJava

MicroJava compiler

Postavka zadatka

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.

Instrukcije za pokretanje rešenja

Nakon pozicioniranja u src folder:

  1. Generisanje lexera:

java -cp ../lib/JFlex.jar JFlex.Main -d rs\ac\bg\etf\pp1 ..\spec\mjlexer.flex

  1. 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

  1. 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

  1. Kompajliranje .mj programa:

java -cp ..\lib\*;. rs.ac.bg.etf.pp1.Compiler <.mj_file_src> <.obj_file_dst>

  1. Disasm:

java -cp ..\lib\mj-runtime.jar rs.etf.pp1.mj.runtime.disasm <.obj_file_src>

  1. Run/Debug:

java -cp ..\lib\mj-runtime.jar rs.etf.pp1.mj.runtime.Run [-debug] <.obj_file_src>

Opis priloženih test primera

Pored javnih testova, conditionals.mj demonstrira rad sa if iskazima i petljama, iskakanje iz petlji, dok virt_metode.mj testira nasledjivanje i polimorfizam.

Novouvedene klase

TabExt.java

Prosiruje datu implementaciju tabele simbola, dodavajuci osnovni tip bool, kao i dve strukture podataka koje pomazu pri obradi klasnih metoda.

SimpleSymbolTableVisitor.java

Implementacija SymbolTableVisitor klase koja sluzi za ispis tabele simbola.