Lesson 01 — AST & Visitor Pattern
Ba module tương tác: (1) AST Traversal Animator — vẽ cây từ biểu thức, chọn pre/in/post-order, chạy từng bước, post-order hiện eval tích lũy; (2) Visitor Switcher — cùng một cây, đổi visitor (Eval / Pretty / S-expr / Count) ra kết quả khác; (3) AST vs Parse Tree — so hai cây cho (2+3)*4.
1. AST Traversal Animator
Mẫu:
Bấm “▶ Bước tiếp” để thăm node theo thứ tự đã chọn.
2. Visitor Switcher — một cây, nhiều thao tác
Cùng cây của module 1 ở trên. Mỗi visitor là một thao tác trọn vẹn trên cây — đổi visitor, không đổi cây, ra kết quả khác hẳn. Đây là điểm cốt lõi của Visitor pattern: thêm thao tác = thêm 1 visitor, không sửa node.
Lưu ý
Var (biến) không có giá trị số → Eval hiển thị “cần Symbol Table (L07)”. Các visitor in/đếm vẫn chạy được vì không cần giá trị.3. AST vs Parse Tree — cùng (2+3)*4
Parse tree (concrete) ghi NGUYÊN mọi quy tắc grammar và token (kể cả dấu ngoặc). AST (abstract) chỉ giữ node mang ngữ nghĩa. Vai trò của ngoặc không mất — nó nằm trong hình dạng cây AST.
Parse tree (concrete) — giữ ngoặc & node grammar
expr
|
term
/ | \
factor * factor
/ | \ |
( expr ) NUMBER(4)
|
term
/ | \
factor + factor
| |
NUMBER(2) NUMBER(3)
~13 node · có ( ) · có term/factor
AST (abstract) — chỉ giữ ngữ nghĩa
*
/ \
+ 4
/ \
2 3
5 node · không ( ) · không term/factor
Dấu
() biến mất vì vai trò của nó đã encode vào hình dạng: + nằm DƯỚI * nên được tính trước.