Jalur ini membangun sebuah compiler lengkap untuk bahasa mini dari nol. Pipeline klasik lex, parse, analyze, dan generate dibangun tahap demi tahap dalam bahasa pemrograman Python, dengan lexer dan parser ditulis tangan terlebih dahulu agar mekanismenya jelas, lalu disusul representasi antara, pembangkitan bytecode untuk stack VM, runtime dengan garbage collection, dan pass optimasi dasar. Jalur diakhiri peta lanskap compiler produksi dan pengerjaan satu fitur bahasa yang menembus setiap tahap pipeline. Lingkungan yang dipakai adalah Python 3.12 dan terminal, dengan GCC 14 sebagai pilihan untuk contoh target native.
Compilers
Jalur pembangunan compiler dari nol: lexing, parsing, analisis semantik, IR, codegen, runtime, optimasi, dan pengerjaan proyek bahasa mini.
0/0 selesai
Modul pembuka: peta pipeline compiler, taksonomi penerjemah, dan spesifikasi bahasa mini yang dibangun sepanjang jalur.
- Apa itu Compiler?Peta pipeline lengkap compiler dari kode sumber hingga eksekusi pada mesin sasaran.
- Taksonomi CompilerInterpreter, compiler, transpiler, dan JIT sebagai satu spektrum penerjemah bahasa.
- Spesifikasi Bahasa Proyek KursusBahasa mini v1: pernyataan, ekspresi, dan tipe yang dibangun sepanjang jalur.
Mengubah kode sumber menjadi deret token: kelas token, intuisi DFA, scanner tulis tangan, dan penanganan error leksikal.
- Token dan LexemeKelas token, lexeme, dan pelacakan posisi pada kode sumber untuk diagnostik.
- Intuisi dari Regex ke DFABagaimana pencocokan pola berbasis regex ditangani oleh otomata hingga pada lexer.
- Menulis LexerScanner tulis tangan: tabel kata kunci, prinsip maximal munch, dan loop utama.
- Error LeksikalPemulihan error leksikal, pesan yang menjelaskan masalah, dan pelaporan lokasi.
Mengubah deret token menjadi pohon sintaks: tata bahasa, desain AST, recursive descent, presedensi, pemulihan, dan parser generator.
- Tata BahasaBNF, derivasi, dan ambiguitas sebagai alat mendeskripsikan sintaksis bahasa.
- Desain AST ?Hierarki node AST, pohon ekspresi versus pohon pernyataan, dan tag jenis node.
- Recursive DescentTeknik parsing tulis tangan yang dipakai setiap proyek compiler nyata pertama kali.
- Presedensi dan AsosiativitasRekursi kiri dan kanan, serta teknik precedence climbing untuk ekspresi berlapis.
- Pemulihan Error ParsingPanic mode dan titik sinkronisasi agar parser tetap melaporkan banyak error sekaligus.
- Parser GeneratorPosisi yacc, bison, dan ANTLR dibandingkan terhadap parser tulis tangan.
Memeriksa makna program setelah sintaksis benar: tabel simbol, resolusi scope, pemeriksaan tipe, dan diagnostik semantik.
- Tabel SimbolStruktur tabel simbol, scope bersarang, dan disiplin pencarian nama.
- Resolusi ScopeDeklarasi, shadowing, dan aturan pemakaian sebelum definisi pada scope bersarang.
- Pemeriksaan TipePemeriksaan tipe statis, inference ringan, dan error tipe sebagai data terstruktur.
- Error SemantikKualitas diagnostik semantik: pesan yang membantu pembaca memperbaiki program.
Bentuk tengah antara front end dan back end: alasan memakai IR, model mesin sasaran, dan optimasi dasar.
- Mengapa IRKode tiga alamat dan pemisahan front end dari back end melalui representasi antara.
- Mesin Stack vs Mesin RegisterModel mesin sasaran berbasis stack dan register beserta kompromi keduanya.
- Optimasi DasarConstant folding dan penyederhanaan aljabar sebagai pass pertama pada IR.
Membangkitkan dan menjalankan bytecode: desain set instruksi stack VM, codegen ekspresi dan pernyataan, interpreter VM, dan pengenalan target native.
- Target: Stack VMDesain set instruksi untuk stack VM yang menjadi sasaran codegen proyek kursus.
- Membangkitkan BytecodeMenerjemahkan pernyataan dan ekspresi AST menjadi deret instruksi bytecode.
- Interpreter VMSiklus fetch-decode-execute pada stack VM beserta implementasi referensi.
- Pengenalan Target NativePosisi target native x86-64 dan LLVM IR dibandingkan stack VM.
Mendukung fitur bahasa dinamis: environment dan closure, frame pemanggilan, garbage collection, dan struktur data array serta map.
- Environment dan ClosureRepresentasi scope pada runtime dan tangkapan variabel oleh closure.
- Pemanggilan dan FrameCall stack, pengaturan argumen, dan penyimpanan nilai balik pada frame pemanggilan.
- Garbage CollectionKonsep mark-sweep dan perbandingannya dengan reference counting.
- Struktur Data RuntimeMenambahkan array dan map ke bahasa mini beserta semantik operasinya.
Pass optimasi klasik: taksonomi, liveness dan alokasi register, inlining dan kode mati, serta disiplin pengukuran.
- Taksonomi OptimasiPembedaan optimasi lokal, global, dan antarprosedur beserta contoh pass tiap kelas.
- Liveness dan AlokasiIntuisi analisis liveness dan konsep pewarnaan graf untuk alokasi register.
- Inlining dan Kode MatiPass klasik pada program nyata: penyisipan badan fungsi dan penghapusan kode tak terjangkau.
- PengukuranBenchmark dan disiplin sebelum versus sesudah pada setiap pass optimasi.
Memetakan compiler produksi: GCC dan Clang dengan JIT, posisi LLVM, perkakas dari AST, dan literatur compiler.
- GCC, Clang, dan JITBagaimana compiler produksi berbeda dari proyek kursus dan posisi JIT di antaranya.
- Posisi LLVMEkosistem IR LLVM dan kapan menargetkan LLVM dibandingkan backend sendiri.
- Perkakas dari ASTLSP, formatter, dan linter yang memakai ulang front end compiler sebagai pustaka.
- LiteraturBuku Dragon dibandingkan sumber modern sebagai peta bacaan compiler.
Menambahkan fitur bahasa baru ke compiler proyek: perancangan, spesifikasi, implementasi menembus pipeline, dan test suite.
- Merancang Fitur BahasaMemilih fitur yang menembus setiap tahap pipeline: closure, class, atau pattern matching.
- Spesifikasi FiturMenulis tata bahasa dan semantik fitur sebelum kode, sebagai kontrak implementasi.
- Implementasi FiturFitur menembus setiap tahap pipeline: lexer, parser, semantik, IR, dan codegen.
- Test SuiteProgram yang membuktikan fitur bekerja dan gagal dengan baik saat masukan salah.