Architecture
Di dalam compiler AHA! — lexer, parser Pratt, sistem tipe, codegen LLVM, dan JIT
Arsitektur Compiler
AHA! adalah compiler lengkap dalam satu binary:
Source Code → Lexer → Parser (Pratt) → AST → Code Generator → LLVM IR → JIT ExecutionTahapan
| Tahap | Modul | Apa yang dilakukannya |
|---|---|---|
| Lexer | src/lexer.rs | Melakukan tokenisasi sumber: identifier, bilangan bulat, string (dengan escape), operator, komentar baris & blok |
| Parser | src/parser.rs | Parser Pratt yang menghasilkan AST — berorientasi ekspresi, dengan presedensi operator yang benar |
| Sistem Tipe | src/types.rs | AhaType + TypedValue; pemeriksaan saat kompilasi untuk operator biner dan prefiks |
| Codegen | src/codegen.rs | Pembangkitan LLVM IR via inkwell: fungsi (dengan inferensi tipe kembali), perulangan, string, array, penautan C-runtime |
| Driver | src/main.rs | Titik masuk CLI: lex → parse → codegen → cetak IR → eksekusi JIT |
Catatan Desain
- LLVM 14 melalui crate
inkwell— tanpa backend buatan tangan - String adalah struct
{i8*, i64};malloc,memcpy, danstrcmpberasal dari C runtime yang ditautkan - TypedValue: setiap ekspresi codegen mengembalikan baik nilai LLVM maupun
AhaType-nya, sehingga kesalahan tipe muncul sebelum IR dibangun - Boolean menyatu dengan matematika: semua operator perbandingan dan logika menghasilkan
i640/1, sehinggais_even(n) * 100tidak memerlukan cast - Eksekusi JIT menjalankan IR yang dihasilkan di dalam proses compiler — tanpa interpreter terpisah
Bagaimana Program Dieksekusi
- Lexer mengubah teks sumber menjadi aliran token.
- Parser Pratt membangun AST berorientasi ekspresi dengan presedensi yang benar.
- Sistem tipe memeriksa setiap operasi biner dan prefiks.
- Codegen memancarkan LLVM IR (fungsi, perulangan, string, panggilan builtin) via inkwell.
- Driver menautkan dan mengeksekusi IR dengan JIT, mencetak hasil program.