- Anggota 1 : Reysha Syafitri Mulya Ramadhan (13524137)
- Anggota 2 : Safira Berlianti (13524128)
- Anggota 3 : Eduard Daniel Ariajaya (13524129)
- Anggota 4 : Muhammad Daffa Arrizki Yanma (13524133)
- Anggota 5 : Fauzan Mohamad Abdul Ghani (13524113)
Program ini adalah Intermediate Code Generation and Interpreter (Milestone 4). Komponen ini melengkapi pipeline kompilator Arion menjadi empat tahap utuh:
- Lexical Analysis —
ArionLexermembaca file sumber dan menghasilkan daftar token. - Syntax Analysis —
Parsermembangun parse tree/AST dari daftar token. - Semantic Analysis —
SemanticAnalyzermendekorasi AST dengan informasi tipe, scope, dan symbol table. - IC Generation & Interpretation —
IntermediateCodeGeneratormengubah Decorated AST menjadi instruksi stack machine, laluStackInterpretermenjalankan instruksi IC tersebut dan menghasilkan output program.
IntermediateCodeGenerator melakukan traversal pada Decorated AST secara recursive descent untuk menghasilkan rangkaian instruksi IC. Kelas ini bertanggung jawab atas memory layouting, code emission, serta backpatching (mengisi target jump yang belum diketahui saat instruksi dibuat).
StackInterpreter mengeksekusi rangkaian instruksi IC menggunakan model stack machine. Kelas ini mengelola global memory, activation frames, dan operand stack melalui siklus fetch-decode-execute.
Jika salah satu fase gagal (misalnya syntax error atau semantic error), fase-fase selanjutnya di-skip dan pesan error ditulis ke file output.
- OS: macOS, Linux, dan Windows via WSL.
- GNU Make
- Compiler C++ yang mendukung C++17:
g++(GCC) atauclang++
makeExecutable akan dibuat di:
bin/arion_lexer
Gunakan target run, lalu masukkan path input saat diminta:
make runContoh input yang bisa dimasukkan:
test/milestone-4/input-1.txt
Perilaku make run:
- Output tetap tampil di terminal.
- Output juga disimpan ke file baru berurutan:
token_output_N.txt,ast_output_N.txt,tree_output_N.txt,ic_output_N.txt,runtime_output_N.txt, dst. - Lokasi output disimpan ke folder:
test/milestone-4/.
Hapus executable:
make cleanHapus semua file output di folder test/:
make clean-outputHapus executable dan output:
make clean-all- Mengimplementasikan
genProcFuncCalldangenSubprogramuntuk pemanggilan procedure/function dengan parameter. - Membuat 38 kasus uji komprehensif yang mencakup seluruh konstruksi bahasa Arion.
- Menyusun laporan PDF Milestone 4 dan mempersiapkan release GitHub.
- Mengimplementasikan seluruh kelas
StackInterpretertermasukRuntimeValue. - Mengimplementasikan siklus fetch-decode-execute pada
run(). - Mengimplementasikan operasi aritmatika (
numericOp), operasi perbandingan (compareOp), serta manajemen activation frame padaexecCal.
- Mengimplementasikan
genExpression,genSimpleExpression,genTerm,genFactor, dangenConstantuntuk pembangkitan IC dari ekspresi. - Merancang memory layouting (
prepareLayouts,collectGlobalVars,buildSubprogramLayout) serta variable addressing (genAddress,genVariableValue).
- Mengimplementasikan fungsi
genIf,genCase,genWhile,genRepeat,genFor, dangenAssignmentpadaIntermediateCodeGenerator.cpp. - Mengimplementasikan logika backpatching untuk semua konstruksi kontrol (IF, WHILE, FOR, CASE).
- Merancang struktur data
Instructiondan enumOprCodepadaIntermediateCode.hpp. - Mengintegrasikan Fase 4 ke dalam
main.cppsehingga pipeline berjalan end-to-end dari lexer hingga interpreter. - Menambahkan penanganan error antar-fase (skip file output jika fase sebelumnya gagal).