| 48 | # --- Example 1: An expression evaluator |
| 49 | |
| 50 | class Evaluator(NodeVisitor): |
| 51 | def visit_Number(self, node): |
| 52 | return node.value |
| 53 | |
| 54 | def visit_Add(self, node): |
| 55 | return self.visit(node.left) + self.visit(node.right) |
| 56 | |
| 57 | def visit_Sub(self, node): |
| 58 | return self.visit(node.left) - self.visit(node.right) |
| 59 | |
| 60 | def visit_Mul(self, node): |
| 61 | return self.visit(node.left) * self.visit(node.right) |
| 62 | |
| 63 | def visit_Div(self, node): |
| 64 | return self.visit(node.left) / self.visit(node.right) |
| 65 | |
| 66 | def visit_Negate(self, node): |
| 67 | return -node.operand |
| 68 | |
| 69 | # --- Example 2: Generate stack instructions |
| 70 | |