Lesson 09 — Tree-Walking Interpreter
Một interpreter thật cho ngôn ngữ đồ chơi — lexer + parser + eval(node, env)
viết bằng JavaScript ngay trong trang này. Nhập chương trình → nó CHẠY, in ra kết quả và bảng biến.
Ba module: REPL chạy được, eval stepper từng node, và demo lỗi runtime.
x = biểu_thức · in print biểu_thức ·
rẽ nhánh if cond { ... } else { ... } · lặp while cond { ... }.
Biểu thức: số, biến, + - * /, so sánh < > <= >= == !=, ngoặc ( ).
Mỗi câu lệnh cách nhau bởi ; hoặc xuống dòng.
1. Live Interpreter (REPL) — chạy chương trình
Nhập một chương trình rồi bấm ▶ Chạy. Interpreter sẽ lexer → parser → eval, hiển thị
output trên màn hình giả lập và bảng env (giá trị biến) lúc kết thúc.
2. Eval Stepper — chạy từng node một
Cùng một interpreter nhưng dừng ở mỗi node. Node đang eval được tô
cam; node đã xong tô
xanh. Theo dõi giá trị trả về và env cập nhật từng bước.
3. Runtime Error Demo — lỗi chỉ lộ lúc chạy
Các chương trình dưới đây compile sạch (cú pháp + kiểu đều ổn) nhưng vẫn lỗi khi chạy — vì lỗi phụ thuộc giá trị thật lúc eval. Bấm ▶ Chạy từng cái để thấy interpreter bắt lỗi mà không tự sập.
x = 6 y = x - 6 print 10 / y
x = 5 print z
Đối chứng: chương trình hợp lệ ở dưới chạy bình thường — cùng interpreter, khác ở giá trị.
a = 2 b = a * a print b
Bạn cũng có thể tự gây lỗi trong REPL ở Module 1, ví dụ: print 1/0 hay print abc.
Interpreter báo lỗi rồi dừng — không phá cả trang.