The Expr ======== [ block ] ⇐ A list of exprs. │ ┌┘ │ │ [ expr ] ── [ lit ] ⇐ A literal value; "base case" for the tree. │ │ ├── type ┌──┘ └──┐ └─ value [ def ] [ call ] │ │ ├─ [target] ← id ├─ [target] ← id ⇐ An id is a pointer to another part of the tree. └── [value] ← expr │ It also contains the flags used in the definition. └──── [arg] ← expr Example Expr Tree ================= [ block ] │ ├─ [ def ] │ │ │ ├─ [target] → hello │ └── [value] → [ lit ] │ ├── type → str │ └─ value → Hello, World ├─ [ call ] │ │ │ ├─ [target] → print │ └──── [arg] → hello ...