Foundationপ্রথম নীতি থেকে
LEVEL 5

কম্পাইলার

Compilers

এই মডিউল যে প্রশ্নের উত্তর দেয়একটা text file কীভাবে চলমান machine code হয়ে ওঠে?

Compiler হলো CS-এর সবচেয়ে সুন্দর pipeline-গুলোর একটা। এখানে আমরা পুরোটা নিজে বানাব — lexer থেকে code generation পর্যন্ত। এরপর আপনি আর কোনো compiler-কে black box মনে করবেন না।

১৬ লেসন৩ প্রজেক্ট~১২০ ঘণ্টাপড়ার সময় ১৫ ঘণ্টা0%

লেসন

  1. 01Compiler Pipeline — text থেকে machine code: পুরো ম্যাপgcc hello.c-এর ভেতরে preprocess → lex → parse → semantic → IR → optimize → codegen → assemble → link — পুরো pipeline-এর ম্যাপ, আর প্রতিটা stage-এর আউটপুট নিজ হাতে দেখা।কঠিন৪৫ মিনিটEXPERIMENTBUILD
  2. 02Lexical Analysis — character stream থেকে token streamSource text-কে অর্থপূর্ণ শব্দে ভাগ করার প্রথম compiler stage — token, maximal munch, DFA, আর নিজের হাতে লেখা পুরো Lexer class।কঠিন৫৫ মিনিটEXPERIMENTBUILD
  3. 03Grammar ও Ambiguity — BNF, derivation, আর দ্ব্যর্থক বাক্যToken stream-কে structure দেওয়ার formal ভাষা — grammar; আর grammar-এর সবচেয়ে বিপজ্জনক ফাঁদ ambiguity চেনা ও নির্মূল করা।কঠিন৫০ মিনিটEXPERIMENTBUILD
  4. 04Parsing — recursive descent, Pratt, আর LR-এর ছায়াGrammar থেকে running parser — hand-written recursive descent আর Pratt parsing-এর practical mastery, পেছনে LR-এর theory।অ্যাডভান্সড১ ঘণ্টা ১০ মিনিটEXPERIMENTBUILD
  5. 05AST Design — tree-টা নিজেই একটা data structure design সমস্যাParse tree থেকে compiler-এর মূল data structure — node taxonomy, variant encoding, spans, আর round-tripping pretty-printer।কঠিন৪০ মিনিটEXPERIMENTBUILD
  6. 06Semantic Analysis — syntax ঠিক, অর্থ ভুল ধরাParse হওয়া tree-তে অর্থের প্রথম ছোঁয়া — symbol table, scoping, name resolution আর precise diagnostics।অ্যাডভান্সড৫৫ মিনিটEXPERIMENTBUILD
  7. 07Type Checking — checker আসলে একটা ছোট evaluatorAST walk করে প্রতিটা expression-এর type গণনা — signature table, coercion ladder, আর six failing programs-এ যাচাই।অ্যাডভান্সড৫৫ মিনিটEXPERIMENTBUILD
  8. 08Intermediate Representation — TAC, SSA, আর কেন একটা মাঝের ভাষা দরকারCompiler-এর মূল ভাষায় প্রবেশ — tree-কে linear three-address code-এ flatten, SSA-র গণিত, আর নিজের হাতে প্রথম lowering।অ্যাডভান্সড১ ঘণ্টাEXPERIMENTBUILD
  9. 09Control Flow Graph ও Dataflow Analysis — প্রবাহের উপর গণিতকম্পাইলার প্রোগ্রামকে basic block-এর একটা গ্রাফে (CFG) ভেঙে সেই গ্রাফের উপর সেট-ভিত্তিক গণিত চালিয়ে জানে ঠিক কোথায় কোন মান বাঁচা আছে — এটাই প্রতিটা global optimization-এর ভিত্তি।অ্যাডভান্সড১ ঘণ্টাEXPERIMENTBUILD
  10. 10Optimization — কোনটা safe, কোনটা profitable, কোনটা fastপ্রতিটা optimization একই চুক্তির উপর দাঁড়ায় — semantics অটুট রেখে সত্যিই দ্রুত করা — আর সেই চুক্তির প্রতিটা clause-এর একটা লুকানো ব্যতিক্রম আছে।অ্যাডভান্সড১ ঘণ্টা ৫ মিনিটEXPERIMENTBUILD
  11. 11Register Allocation — অসীম temporary, সসীম registerIR-এর অসীম temporary-দের সসীম x86-64 register-এ ফেটে পড়াটাই graph coloring — যেখানে রঙ না মিললে মান স্ট্যাকে ঠেলে দিতে হয়।রিসার্চ-লেভেল১ ঘণ্টা ৫ মিনিটEXPERIMENTBUILD
  12. 12Instruction Selection ও Scheduling — IR থেকে আসল instructionএক IR op-এর জন্য ISA-য় হাজারো encoding — selection ঠিক করে কোনটা, scheduling ঠিক করে কোন ক্রমে; এই শেষ মাইলেই machine code গড়ে ওঠে।অ্যাডভান্সড৫৫ মিনিটEXPERIMENTBUILD
  13. 13Code Generation — শেষ ধাপে সিলিকনের ভাষায় অনুবাদRegister allocation শেষ হলে code generator টার্গেট ISA-র প্রকৃত instruction লেখে — frame layout ঠিক করে, prologue/epilogue emit করে, calling convention মেনে — আর এই লেসনে আমরা toy compiler-এর পুরো ধাপটা হাতে করে করে দেখি।অ্যাডভান্সড১ ঘণ্টাEXPERIMENTBUILD
  14. 14Linking ও Relocation — ভাঙা address জোড়া লাগানোপ্রতিটা .o ফাইল নিজের ভেতরের ঠিকানা জানে কিন্তু বাইরের প্রতিটা symbol-এর জায়গায় ফাঁকা ঘর রাখে — linker symbol resolution আর relocation-এর মাধ্যমে সেই ভাঙা ঠিকানাগুলো চূড়ান্ত মান দিয়ে জোড়া লাগায়।কঠিন৫৫ মিনিটEXPERIMENTBUILD
  15. 15Loader ও Dynamic Linker — ./a.out টাইপ করলে kernel আর ld.so কী করে./a.out টাইপ করা আর main()-এর প্রথম লাইনের মধ্যে দুইজন অভিনেতা কাজ করে — kernel execve-তে PT_LOAD segment গুলো মেমরিতে বসায়, তারপর PT_INTERP নির্দেশিত dynamic linker লাইব্রেরি জোগাড় করে বাকি relocation সারায়।অ্যাডভান্সড৫০ মিনিটEXPERIMENTBUILD
  16. 16JIT Compilation — bytecode থেকে native, চলতে চলতেJIT compiler runtime-এর ভেতরেই থাকা একটা compiler — interpreter চলতে চলতে profile জমায়, hot কোডে speculation-ভিত্তিক native code বানায়, ভুল হলে deoptimize করে — আর এই লেসনে আপনি একটা কাজ করা micro-JIT নিজেই লিখবেন।রিসার্চ-লেভেল১ ঘণ্টাEXPERIMENTBUILD

যা যা থাকছে

  • Compiler pipeline overview
  • Lexical analysis, regular languages, DFA construction
  • Parsing — recursive descent, LL, LR, Pratt
  • Grammars, ambiguity, precedence
  • AST design
  • Semantic analysis, symbol tables, scoping
  • Type checking ও type errors
  • Intermediate representation — three-address code, SSA
  • Control flow graph ও dataflow analysis
  • Optimizations — constant folding, DCE, CSE, inlining, loop opts
  • Register allocation (graph coloring, linear scan)
  • Instruction selection ও scheduling
  • Code generation
  • Linking — static, dynamic, relocation, symbol resolution
  • Loading ও dynamic linker
  • JIT compilation

প্রজেক্ট

Lexer + Pratt Parser

●●●○○

Expression language-এর precedence-correct parser।

Bytecode VM

●●●●○

Stack machine, compiler থেকে bytecode, dispatch loop।

Full Toy Compiler

●●●●●

নিজের ভাষা → x86-64 assembly → চলমান binary।