一、移进归约:
1.基本思想:
用一个寄存符号的先进后出栈,把输入符号一个一个地移进到栈里,当栈顶形成某个产生式的候选式时,即把栈顶的这一部分替
换成(归约为)该产生式的左部符号。
2.归约:
是指根据文法的产生式规则,把产生式的右部替换成左部符号。
二、规范归约:
1.短语
定义:令G是一个文法,S是文法的开始符号,假定αβ&是文法G的一个句型
其中α,β,&∈(VN∪VT)*,A∈VN ,如果有且
则β称是句型α,β,&相对于非终结符A的短语。
2.直接短语
特别是,如果有A=>β,则称,β是句型αβ&相对于规则A->β的直接短语。
3.句柄一个句型的最左直接短语称为该句型的句柄。
4.规范归约
定义:假定是文法G的一个句子,我们称序列
αn, αn-1,α,α0
是α的一个规范归约,如果此序列满足:
(1) αn= α
(2) α0为文法的开始符号,即α0=S
(3) 对任何i,0 < i α n, αi-1是从αi经把句柄替换成为相应产生式左部符号而得到的。
5.修剪语法树
使用修剪语法树的方法来加深对自下而上语法分析的理解。
(1)子树:是由该树的某个结点(子树的根)连同它的所有子孙组成。
(2)简单子树:只有单层分支的子树(只有父子两代没有第三代)
(3) 对语法树有如下结论
①每个句型都有一棵语法树与之对应
②每棵语法树的叶结点自左至右排列就组成一个句型
③每棵子树的叶结点自左至右排列就组成一个短语
④每棵简单子树的叶结点自左至右排列就组成一个直接短语
⑤每棵最左简单子树的叶结点自左至右排列就组成一个句柄
三.算符优先分析法:
思路:定义算符之间优先关系,借助这种关系来寻找“可归约串”和进行归约
定义两个终结符‘a’与‘b’的优先关系:
a =.b 表示a的优先性等于b
a >.b 表示a的优先性大于b
a <.b 表示a的优先性小于b
算符优先文法及优先表构造:
1.算符优先文法
(1)算符文法
一个文法,如果它的任一产生式的右部都不含两个相继(并列)的非终结符,即不含如下形式的产生式右部:
…QR…
则我们称该文法为算符文法,也称OG文法 (Operater Grammar) 。
(2)定义终结符之间的优先关系
假定G是一个不含产生式的算符文法。对于任何一对终结符a、b,我们说:
1. a =. b 当且仅当文法G中含有形如P→…ab…或P→…aQb…的产生式
2. a <. b 当且仅当G中含有形如P→…aR…的产生式, 而R b…或R Qb…;
3. a>.b 当且仅当G中含有形如P→…Rb…的产生式,而 R …a或R …aQ。
(3)如果一个算符文法G中的任何终结符对(a,b)至多只满足下述三关系之一:
a=.b
a>.b
a<.b
则称G是一个算符优先文法(OPG文法)。
1.自下而上分析
移进-归约法:句柄为可归纳串
算符优先分析法:最左素短语为可归纳串
2.素短语
指一个句型的短语,它至少包括有一个终结符号且除去它本身之外不再含任何更小的素短语
3.最左素短语
处在句型最左端那个素短语成为最左素短语
四、优先函数
1.优先函数的定义
把每个终结符与两个自然数f(a)与g(a)相对应,使得
若a1 <. a2,则f(a1) < g(a2)
若a1 =. a2,则f(a1) = g(a2)
若a1 >. a2,则f(a1) > g(a2)
f称为入栈优先函数,g称为比较优先函数。
(1)优点:便于比较,节省空间;
(2)缺点:原来不存在优先关系的两个终结符,由于自然数相对应,变成可以比较的。要进行一些特殊的判断。
课后作业:
感想:
这节课还是很有难度的,都是一些新的概念,掌握起来不容易,还是要
多看多练习。课下要好好看看这篇的内容,巩固好基础。