自底向上语法分析
一、自底向上语法分析
- 一个自底向上语法分析过程对应于为一个输入串构造语法分析树的过程,它从叶子节点开始,逐步向上到达根节点。即把输入串归约成文法的开始符号。
二、规约
-
若一个子串和某个产生式的右部匹配,则用该产生式的左部符号代替这个子串。
-
归约可以看成是推导的逆过程
三、句柄
- 句型的句柄是和某产生式右部匹配的子串,并且,把它归约成该产生式左部的非终结符代表了最右推导过程的逆过程的一步。
- 该段文字中蓝色部分就是句柄
- 如果说文法存在二义性,那么句柄可能不一致
四、用栈实现移进——归约语法分析
- 移进——归约语法分析是自底向上语法分析的一种形式。
- 使用栈来保存文法符号,并用一个输入缓冲区来存放将要进行语法分析的其余符号。
- 移进——归约语法分析的四种动作:
- 移进:把下一个输入符号移进栈
- 归约:分析器知道句柄的右端已在栈顶,然后确定句柄的左端在栈中的位置,再决定用什么样的非终结符代替句柄
- 接受:分析器宣告分析成功
- 报错:分析器发现语法错误,调用错误恢复例程
下面是一个例子
五、id1 * id + id的归约语法分析
关于这个流程,大家可以仔细关注一下,通过这个流程,应该可以大致明白移进——规约的过程