通过遍历抽象语法树产生进行表达式值运算并显示
时间: 2024-05-03 21:18:38 浏览: 97
要通过遍历抽象语法树对表达式进行求值,可以使用递归方法进行深度优先遍历。具体步骤如下:
1. 从根节点开始遍历抽象语法树;
2. 对于每个节点,判断其类型,分别进行如下处理:
- 如果是数字或变量节点,则直接返回其值;
- 如果是操作符节点,则对其左右子节点进行递归求值,并根据操作符进行相应的计算;
3. 将最终计算结果返回。
下面是一个示例代码,假设抽象语法树已经以二叉树的形式构建好了:
```python
class Node:
def __init__(self, val, left=None, right=None):
self.val = val
self.left = left
self.right = right
def eval(self):
if self.val.isdigit():
return int(self.val)
elif self.val.isalpha():
return variables.get(self.val, 0)
else:
left_val = self.left.eval()
right_val = self.right.eval()
if self.val == '+':
return left_val + right_val
elif self.val == '-':
return left_val - right_val
elif self.val == '*':
return left_val * right_val
elif self.val == '/':
return left_val / right_val
variables = {'x': 3, 'y': 5}
root_node = Node('+', Node('x'), Node('*', Node('y'), Node('2')))
print(root_node.eval()) # 输出 13
```
在上面的示例代码中,我们定义了一个 `Node` 类来表示抽象语法树中的节点。`eval` 方法用于求出当前节点所代表的表达式的值。当当前节点代表一个数字或变量时,直接返回其值;当代表一个操作符时,对其左右子节点进行递归求值,并根据操作符进行相应的计算。最终将计算结果返回。
阅读全文