自底向上优先分析
# *0x3.算符优先分析方法
算符优先分析法的思想源于表达式的分析,是利用相邻终结符号之间的关系来寻找可归约串。
将句型中的终结符号当作“算符”,借助于算符之间的优先关系确定规约子串,分析过程是自下而上的归约过程,不是一种严格的规范归约。
# 定义:
文法G中没有P→...QR...
的产生式
P,Q,R属于非终结符
即,不存在具有相邻非终结符的产生式
# 例子:
# 注意:
- a,b之间未必有优先关系,在优先表中,空白部分是一种错误关系
- 相同的终结符之间的优先关系不一定是对称的
- 如果有a = b,不一定有b = a(不具对称性)
- 如果有a < b,不一定有b> a(不具对称性),因为只定义相邻运算符之间的优先关系,a,b相邻时,不一定b,a相邻。
- 如果有a<b, b<c不一定有a <c
# 0x4.算符优先关系表的自动构造算法
# 1.FirstVT集
# 例子:
# 伪代码:
# 2.LastVT集
# 例子:
# 3.构造优先关系表的算法
# 例子:
# 伪代码:
# 4.算符优先分析过程
# 例子:
# 注意要点:
# 总结归约的策略:
# 优缺点:
# 5.算符优先分析中的错误处理
使用算符优先分析法时,可在两种情况下发现语法错误:
- 若栈顶终结符号与下一个输入符号之间不存在任何优先关系
- 若找到某一可归约串,但不存在任一产生式,其右部与其匹配。