我们已经在之前了解了语法分析器在编译器前端的地位和它的作用。
S -> N V N
N -> s
| t
| g
| w
V -> e
| d
对于上面的文法 G ,我使用推导可以得到:
S -> N V N
-> N d N
-> s d N
-> s d w
我们可以将这个推导过程化成树状图的形式:
![2203a1e0eb0ba126eb52f107c5196589.png](https://i-blog.csdnimg.cn/blog_migrate/1cd889b8cf162b55e8f2a53cd9dce5bf.png)
这棵树就是(语法)分析树。
分析树
- 推导可以表达成树状结构
- 和推导所用的顺序无关(最左、最右、其它)
- 特点:
- 树中的每个内部节点代表非终结符
- 每个叶子节点代表终结符
- 每一步推导代表如何从双亲节点生成它的直接孩子节点。
表达式的例子
E -> num
| id
| E + E
| E * E
根据这个文法推导出句子 3 + 4 * 5 的过程如下:
第一种方法是先计算加法后计算乘法