L13 — Bytecode & Máy ảo Stack
Biên dịch biểu thức xuống bytecode phẳng (PUSH/ADD/...) rồi chạy nó trên một máy ảo stack tự viết — nhìn ngăn xếp push/pop từng lệnh. Đây là cách Python (.pyc), Java (.class), WASM thực sự chạy.
1. Compile → Bytecode
Nhập biểu thức số học (số, biến a–z, + - * /, ngoặc ()). Viz parse thành AST rồi duyệt post-order sinh bytecode. Bấm "Nạp vào VM" để chạy ở module 2.
Mẫu:
AST (cây cú pháp)
Bytecode (post-order)
2. VM Stack Stepper — chạy từng lệnh
Máy ảo chạy vòng fetch → decode → execute: lấy lệnh tại PC, thực thi, dời PC. Bấm Bước để đi từng lệnh và nhìn ngăn xếp push/pop. Mặc định (2+3)*4 → 20.
PC = 0
Sẵn sàng. Bấm "Bước" để fetch lệnh đầu tiên.
Bytecode đang chạy
Operand Stack (đỉnh trên cùng)
— đáy ngăn xếp —
Bộ nhớ biến (slot)
trống
Output (PRINT)
3. Tree-walking vs Bytecode — đếm "việc lặp lại"
Cùng biểu thức ở module 1, chạy trong một vòng lặp N lần. So số thao tác mỗi cách phải làm. Mấu chốt: bytecode dồn việc "phân tích cây" vào 1 lần compile, lúc chạy chỉ còn thực thi lệnh phẳng.