自下而上分析
自下而上分析基本问题
中心问题:
怎样判断栈顶的符号串的可归约性以及如何归约。
“可归约串”的不同定义,形成了不同的自下而上的分析方法。
各种自下而上分析法的共同特点:
边输入单词符号(移进符号栈),边归约。
归约
.“移进—归约”的思想:
用一个寄存符号的先进后出栈,把输入符号一个一个地移进栈里,当栈顶形成某个产生式的一个候选式时,即把栈顶的这一部分替换成(归约为)该产生式的左部符号。
规范归约
中心问题:
如何寻找或确定一个句型的句柄。
实质:
在移进过程中,当发现栈顶呈现句柄时,
就用相应产生式的左部符号进行替换。
规范推导,就是最右推导。
规范句型:规范推导得到的句型。
规范归约:
若文法G是无二义的,则规范推导(最右推导)的逆过程必然是规范归约(最左归约)。
短语、直接短语、句柄:
规范归约过程:
算符优先分析
素短语:
是指这样的一个短语,它至少含有一个终结符,
并且, 除它自身之外不再含任何更小的素短语。
最左素短语:
指处于句型最左边的那个素短语。
”最左素短语“ 就是 ”可归约串“。
不是一种规范归约法,是一种自下而上的语法分析法,
关键在于规定算符(即终结符)之间的优先顺序和结合性质,
借助这种优先关系寻找“可归约串”进行归约。
分析速度快,有利于表达式分析,宜于手工实现。
算符文法:
一个文法,如果它的任一产生式的右部都不含两个相继(并列)的非终结符,
即不含如式的产生式右部:…QR…
则我们称该文法为算符文法。
算符优先文法前提是一个算符文法(没有相邻的非终结符)
算符优先文法:
实际上,在真正的算符优先分析方法中,
需定义任意两个相继出现的终结符号a和b之间的优先关系
(a与b之间可有一个非终结符),一旦确定了这种优先关系,
就可以用它来确定“可归约串”进行归约。
优先关系:
如果一个算符文法G中的任何终结符对(a,b)至多只满足三者中的一个,则称G是一个算符优先文法。
FIRSTVT集合,就是找推导出来的第一位或第二位的终结符(算符优先文法不可能有两个连续的非终结符)
LASVT集合,就是找推导出来的最后一个或倒数第二个终结符。
构造优先关系表的算法:
构造FIRSTVT集合的算法:
只有扫描一遍全部的产生式,FIRSTVT集合不发生改变了,算法才可以停止。(因为只要有一个非终结符的FIRSTVT改