自底向上优先分析法.ppt
《自底向上优先分析法.ppt》由会员分享,可在线阅读,更多相关《自底向上优先分析法.ppt(59页珍藏版)》请在三一办公上搜索。
1、第6章 自底向上优先分析法,6.1 概 述,对待分析的符号串,自左向右逐个扫描,输入符号栈,一旦栈顶符号串形成某个句型的句柄或可归约串(对应于某产生式的右部),就用该产生式的左部非终结符代替相应右部的文法符号,即归约成识别符号。在分析过程中,每次归约的都是最左边的简单短语(或其它短语)。从语法树的角度,以输入符号为树的末端结点,试图向根结点方向往上构造语法树。,讨论前提,和自顶向下技术同样,不考虑符号的具体构成方式。识别过程是从左到右,自底向上进行的。一般都采用规范归约:每一步都是对句柄进行归约(特例除外)。,基本方法,采用移入-归约方法。使用一个栈来存放归约得到的符号。在分析的过程中,识别程
2、序不断地移入符号。移入的符号暂时存放在一个栈中。一旦在已经移入的(和归约得到的)符号串中包含了一个句柄时,将这个句柄归约成为相应的非终结符号。,参看课本P102例6.1,基本方法(续),归约中的动作有4类移入:读入一个符号并把它归约入栈。归约:当栈中的部分形成一个句柄(栈顶的符号序列)时,对句柄进行归约。接受:当栈中的符号仅有#和识别符号的时候,输入符号也到达结尾的时候,执行接受动作。错误处理:当识别程序发现输入符号串不是句子时,即出错,调用错误处理模块。,例 子,i*i+i i*i+i i E:=iE*i+iE*i+iE*i+iE*i+iE*i+iE*i+i i E:=iE*E+iE*E+i
3、 E*E E:=E*EE+iE+iE+iE+i i E:=iE+EE+EE+E E:=E+EE,文法GEE:E:=E+E|E*E|(E)输入符号串:i*i+i已处理 未处理 句型 句柄 规则,不用此页,例子的解释,当栈中的符号的栈顶部分还不能形成句柄时,进行移入操作。一旦发现栈顶部分形成了句柄的时候,对该句柄进行归约。将句柄出栈,然后将归约得到的非终结符号压栈。如果输入是句子,则栈中的符号(从底到上)和未处理的符号组成句型。在例子中,发现句柄和归约是人为干预的结果。所以移入-归约不是实际可运行的技术,而是技术的模板。,不用此页,基本问题,如何找出进行直接归约的简单短语?即如何知道栈顶符号串已形
4、成了句柄?将找到的简单短语归约到哪个非终结符号?即如何选取适当的产生式进行归约?,6.2 两种优先分析法,简单优先分析法:求出该文法所有符号(终结符和非终结符)之间的优先关系,按照这种关系确定归约过程中的句柄。规范归约。分析准确规范,但效率低,不实用。算符优先分析法:规定算符之间的优先关系,即只考虑终结符之间的优先关系,而不考虑非终结符的优先关系。不是规范归约。分析速度快,适用于表达式的分析。,基本思想,简单优先分析法,思路:每次察看句型中相邻的两个符号。通过两个符号的关系判定出前一个符号是句柄的尾。然后,反向找出句柄的头。这样我们就找到了一个句柄。,优先关系,和书上的写法不一样。等同:Si
5、Sj先于:Si Sj后于:SiSj注意:,和不同于=,和。由SiSj不能导出SjSi。,简单优先分析技术(思路续),我们要通过两个相邻符号SiSi+1之间的关系来找到句柄:SiSi+1在句柄内:必然有规则U SiSi+1Si在句柄内部,但是Si+1在句柄之后:必然有规则USi,且存在规范句型USi+1。如果Si+1在句柄内,而Si在句柄外,那么必然存在规范句型SiU,且 USi+1。,优先关系的定义,Sj=Si:当且仅当G中有规则 U SjSi Sj Si:当且仅当 U SjV,且+V=Si;Sj Si:当且仅当 U VW,其中V和W分别满足+V=Sj*W=Si 且 Si为终结符号。,优先关系
6、的例子,文法:SbAbA(B|aBAa)语言:bab,b(aa)b,b(aa)a)b,可以从语法树里面导出部分优先关系。,优先矩阵,可以将优先关系填写到一个矩阵,得到优先矩阵。(将矩阵作为关系的表示形式),=,#b(a a)a)b#,句柄:a 归约为A,#b(A a)a)b#,=,句柄:A a)归约为B,#b(B a)b#,=,句柄:(B 归约为A,识别过程(例子续),#b(B b#,=,句柄:(B 归约为A,#b(A a)b#,=,句柄:Aa)归约为B,#b(A a)b#,=,句柄:Aa)归约为B,#b A b#,=,句柄:bAb 归约为S,#b(B b#,=,句柄:(B 归约为A,优先关系
7、的构造,根据优先关系的构造性的定义(定义6.1),我们立刻可以得到构造算法。(1)=的构造:直接对每个规则右部处理,对所有右部X1X2Xn,都有Xi=Xi+1。,Sj,Si,=,当且仅当G中有规则 U SjSi,(2)的构造:由定义,Sj Si 可以得到存在规则U SjV,也就是Sj=V,+HEAD(V)Sk|V=Sk Si1,Si2,Sin。,Sj,Si1 Si2 Sin,(3)关系的构造:由定义,Sj Si 表示:存在规则 U VW 其中V=W+TAIL(V)Sl|V=Sl Sj1,Sj2,Sjm。+HEAD(W)Sk|W=Sk Si1,Si2,Sin。,Sj1,Si1 Si2 Sin,S
8、j2,Sjm,=,简单优先关系矩阵(表),文法:SbAbA(B|aBAa)HEAD(A)=(a HEAD(B)=(a A TAIL(A)=a)B,优先关系的冲突,当优先矩阵中出现值不唯一的元素时,文法不适合使用优先识别技术来识别句型。,简单优先文法,定义6.2 如果某个文法满足:字汇表中的任意两个符号之间至多有一种优先关系成立。任何两个规则式的右部不相同。则称该文法为简单优先文法。第一点保证可以识别出句柄.第二点保证可以确定归约到哪个非终结符号。,定理6.4,一个简单优先文法是无二义性的,且其任何一个句型SmSn的唯一句柄是满足条件:Sj-1 Sj=Sj+1=Sj+2=Si-1=Si Si+1
9、的最左子符号串SjSj+1Sj+2 Si-1Si。,定理6.4的证明,首先用反证法证明任何句型的句柄是唯一的。句型必然有句柄,且这个句柄必然满足Sj-1 Sj=Sj+1=Sj+2=Si-1=Si Si+1(句柄1)如果还有另外一个语法树,那么它对应的归约(称为归约过程2)必然不是把上面的句柄作为一个整体归约的。在归约过程2中,当首次有句柄1(包括Sj-1和Si+1)中间的某个符号St作为句柄(句柄2)的一部分被归约的时候,我们可以考虑以下的情况:(下一页),定理6.4的证明(续),如果t=j-1,那么,由句柄1,Sj-1 Sj;由句柄2,Sj-1=Sj 或者Sj-1 Sj;矛盾!如果t=i+1
10、,由句柄1,Si Si+1;由句柄2,Si Si+1 或者 Si=Si+1。如果i=t=j;那么Sj在句柄中:Si在句柄中:Sj和Si都不在句柄中:,定理6.4的证明(续),简单优先文法的无二义性是显而易见的:每个句型只有一个句柄。句柄只能归约到确定的非终结符号。该证明的实质就是:句柄1和句柄2相互交错,交错的边缘必然有多重定义的优先关系。,应用优先技术的困难与克服,简单优先技术只适应于简单优先文法。实际上,一般的程序设计语言的文法都不是简单优先文法。比如四则运算表达式的文法。可能的解决办法是:分离法(成层法),简单优先分析技术的实现,识别过程:从左到右地扫描输入符号。已经扫描或归约得到的符号
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 向上 优先 分析
链接地址:https://www.31ppt.com/p-4940639.html