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)*420.

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.