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.