第六章 自下而上分析和优先分析法

上传人:大米 文档编号:563670216 上传时间:2023-11-16 格式:DOC 页数:13 大小:486KB
返回 下载 相关 举报
第六章 自下而上分析和优先分析法_第1页
第1页 / 共13页
第六章 自下而上分析和优先分析法_第2页
第2页 / 共13页
第六章 自下而上分析和优先分析法_第3页
第3页 / 共13页
第六章 自下而上分析和优先分析法_第4页
第4页 / 共13页
第六章 自下而上分析和优先分析法_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《第六章 自下而上分析和优先分析法》由会员分享,可在线阅读,更多相关《第六章 自下而上分析和优先分析法(13页珍藏版)》请在金锄头文库上搜索。

1、第六章 自下而上分析和优先分析法第六章 自下而上分析和优先分析法1、教学目的及要求:要求理解算符优先文法、最左素短语、有效项目的基本概念;掌握算符优先分析方法。 对给定的文法能够判断该文法是否是算符文法 对给定的算符文法能够判断该文法是否是算符优先文法 对给定的算符文法能构造算符优先关系表,并能利用算符优先关系表判断该文法是否是算符优先文法。 能应用算符优先分析算法对给定的输入串进行移进-归约分析,在分析的每一步能确定当前应移进还是归约,并能判断所给的输入串是否是该文法的句子。 了解算符优先分析法的优缺点和实际应用中的局限性。2、教学内容:自下而上语法分析(算符优先分析法),算符优先分析。3、

2、教学重点:归约,算符优先表构造。4、教学难点: 通过本章学习后,学员应该能知道算符文法的形式。 对一个给定的算符文法能构造算符优先关系分析表,并能判别所给文法是否为 算符优先文法。 分清规范句型的句柄和最左素短语的区别,进而分清算符优先归约和规范归约的区别。 算符优先分析的可归约串是句型的最左素短语,在分析过程中如何寻找可归约串是算符优先分析的关键问题。对一个给定的输入串能应用算符优先关系分析表给出分析(归约)步骤,并最终判断所给输入串是否为该文法的句子。5、课前思考 什么是自下而上语法分析的策略? 什么是移进-归约分析? 移进-归约过程和自顶向下最右推导有何关系? 自下而上语法分析成功的标志

3、是什么? 什么是可归约串? 移进-归约过程的关键问题是什么? 如何确定可归约串? 如何决定什么时候移进,什么时候归约? 什么是算符文法?什么是算符优先文法? 算符优先分析是如何识别可归约串的? 算符优先分析法的优缺点和局限性有哪些?6、章节内容第一节 自下而上语法分析第二节 算符优先分析法6.1 自下而上语法分析自底向上的语法分析是从给定的符号串本身出发,试图逐步将它归约为文法的开始符号,由于在进行自底向上的语法分析时,通常所采用的是最左归约,即规范归约,因此实现此种语法分析的关键,是在分析的每一步,如何寻找或确定当前句型的句柄以及确定将句柄归约为什么非终结符号。 一、自下而上语法分析方法的分

4、类根据寻找句柄策略的不同,形成不同的自底向上的分析方法,如优先分析法及LR分析法。1、优先分析法优先分析法是在文法的一些符号之间建立优先关系,并根据此优先关系来确定句型的句柄。2、LR分析法LR分析法则根据分析过程中迄今已经取得的信息,并向前查看若干个输入符号来确定当前应采取的分析动作。二、自下而上分析法的实现思想实现自底向上的分析,使用一个先进后出的分析栈存放分析过程中所得的文法符号;开始状态:分析栈底放置一个界符#,然后将输入符号逐个推入栈内;一旦在分析栈的栈顶出现句柄,就用相应产生式的左部去替换这个句柄,即进行一次归约,由于归约,得到新的栈顶,此时再查看栈的顶部是否形成新的句柄,若是,再

5、进行归约;反之,则继续将后续的输入符号移入栈内;分析成功:重复上述过程,若最终能将全部输入符号移掉,且分析栈中只留下栈底符号#及最后一步归约所得文法开始符号,则表明输入串的分析成功;语法错误:若全部输入符号已被移掉,而分析栈不能出现上述格局,则表明输入符号串不是文法的句子,存在语法错误。三、自下而上语法分析过程例:有文法GS:SAB|c,A bA|a,B aSb|c,用上述“移进归约”分析方法对输入串bbaacb所作的分析过程:移进归约分析过程可能采取的动作有四种:移进、归约、接受和报错。因采用最左归约,故一旦句柄在分析栈形成,必然出现在栈顶。当一个貌似句柄的符号串出现在栈顶时,不能贸然按某一

6、产生式进行归约,否则将导致错误结果。如上例步骤7。如何正确确定句型的句柄,如何正确地用产生式进行归约,是实现自底向上语法分析的关键。6.2 算符优先分析法一、概述算符优先分析法是仿照算术式的四则运算过程的一种语法分析方法,该方法首先规定运算符之间的优先关系和结合性质,然后利用这种关系,用比较相邻运算符的优先顺序来确定句型的“句柄”和进行归约,这种归约未必是严格的最左归约,每一步未必是当前句型的句柄。例:有文法GE:E E+E|E-E|E*E|E/E|(E)|i该文法为二义性文法,其句子有不同的规范推导,归约过程中句柄不唯一,若采用运算符优先顺序和结合原则的规定,并按这种规定进行归约,则该句子的

7、归约过程就是唯一的。如i+i*i的归约过程:(1) i+i*i 按E i 归约(2)E+i*i 按E i 归约(3) E+E*i 按E i 归约(4) E+E*E 按E E*E 归约(5) E+E按E E+E 归约(6) E该归约过程是唯一的。在上述的整个归约过程中,起决定作用的是相邻两个终结符的优先关系,所以应用算符优先分析法自底向上地分析句子。可以只根据相邻运算符的优先关系,就能方便地并且唯一的确定归约的“句柄”。可以用来分析二义性文法所产生的语义。直观算符优先分析对一个给定文法G,人为地规定其算符的优先顺序,即给出优先级别和同一个级别中的结合性质,算符间的优先关系有三种: a ba的优先

8、级高于b a ba的优先级等于b a ba的优先级低于b 这三个关系不同于数学中的,=,它们是有序的,如a b不意味着b a,a b不意味b a。如有文法GE:EE+E|E*E|(E)|i,其终结符的优先关系如下表:优先关系矩阵二、直观算符优先分析法用已经建立起来的文法GE的优先关系矩阵,构造一个分析该文法句子的算法,即直观算符优先分析法,为便于比较相邻运算符的优先级,使用两个工作栈,一个为运算符栈,以OPTR表示,用来存放运算符(包括括号和#);另一个称运算对象栈,以OPND表示,用来存放运算对象(包括最基本的运算对象和运算结果),用#代表分析句子的左右分界符。分析开始时,OPTR栈中压入左

9、界符#,OPND栈为空,同时令q代表OPTR当前栈顶符号,a存放新输入的符号,则分析算法的步骤:(1)把下一个输入符号读至a中;(2)若a为i,则把它推进OPND栈,转第一步。(3)若q a,则应根据规则E E1q E2进行归约,E1和E2代表OPND栈顶的次高元和最高元中的运算对象,先将E1和E2从OPND栈中弹出,然后把代表该子表达式运算结果的E压入OPND中,同时把q从OPTR栈顶弹出,然后重新进入第(2)步;(4)若q a,则只有一种情况, q=“(”,a=“)”,此种情况下,弹出OPTR栈顶最高元的“(”,放弃a中的右括号,转第(1)步;(5)若q a,把a移进OPTR栈,转第(1)

10、步;(6)若q=a=“#”,分析过程结束;(7)若q与a不存在优先关系,即矩阵元素为空,输入串有错,调错误处理程序进行处理。分析成功的标志是(必要条件):OPTR栈底的“#”与输入串后的“#”相遇,而OPND栈中仅含一项,这一项代表整个表达式的分析结果,若非这种情况,意味着分析失败,即表达式有语法错误;在(3)和(4),当要形成Eq E和(E)时,若OPND栈中没有足够的项数,也表示输入串有错。上面算法对GE所定义的算术表达式的分析有效,所有算符优先分析大体上如此工作。在该分析过程中由于使用了两个栈,当读进的符号一旦被判断出是运算对象时,就立即推进运算对象栈,而不与运算符栈的栈顶符号比较优先级

11、,故没有用到作为终结符的运算对象与其它算符之间的优先关系。使用算符优先分析法便于直接将表达式翻译成目标指令。三、算符优先文法的定义1、算符文法定义设有一文法G,如果G中没有形如A BC的产生式,其中B和C为非终结符,称G为算符文法(OG文法),即在OG文法中,不存在包含两个相邻非终结符号的产生式的右部。2、算符文法性质(性质一)在算符文法中,任何句型都不包含两个相邻的非终结符。证明:用归纳法,设r是句型,有S=W0W1.Wn=r,推导长度为n。(1)归纳基础:n=1时, S=W0W1=r,即Sr,必存在产生式S r,而有算符文法定义,文法的产生式中无相邻的非终结符,该性质成立。(2)假设n1,

12、 Wn-1满足性质若Wn-1=aAd,AVN,由假设a的尾符号与的d首符号不可能为非终结符,否则与假设矛盾,又若Ab是文法的产生式,则有Wn-1 Wn = dba= r, Ab不含有两个相邻的非终结符,所以adb也不含有两个相邻的非终结符。(性质二)如果Ab或bA出现在算符文法的句型r中,其中AVN , bVT,则r中任何含b的短语必含有A。证明:用反证法, S r=abAb,若存在B ab,则A和B不同时归约,则有S B Ab,与性质一矛盾。得证。含b的短语必含A,含A的短语不一定含b。四、算符优先关系定义设G是一个算符文法,a和b是任意两个终结符,A,B,C VN,算符优先关系定义如下:

13、a b,当且仅当G中含有形如Aab或AaBb的产生式。 a b,G中含有形如AaB,且B b或B Cb a b,G中含有形如ABb,且B a或B aC。以上关系可用语法树说明:五、算符优先文法的定义设一不含e产生式的算符文法,如果任意两个终结符对a,b之间至多有, 三种关系的一种成立,则称G是一个算符优先文法(OPG文法)。两个终结符之间的优先关系是有序的,允许有a b,b a同时存在,而不允许有ab,ab,ab中两种同时存在。例1、有文法GE:EE+T|T,T T*F|F,F (E)|i因为 EE+T,EE+T,故+ ET T*F, 故*+ ET F (E) 故)+ ET F i 故i+可得

14、前面优先关系矩阵,文法GE是OG文法,并在任意两个终结符号之间至多有一个优先关系成立,故该文法为OPG文法。例2、GE:EE+E|E*E|(E)|iE E1+E2,E1E*E, *+E E1*E2,E2E+E,*+故该文法是算符文法,但不是算符优先文法。六、算符优先关系表的构造通过检查G的每条规则的每一个选择,可以找出所有满足ab的终结符号对,为找出所有满足关系和的终结符号对,首先需要对G的每个非终结符号B构造两个集合FIRSTVT(B)和LASTVT(B): FIRSTVT(B)=b|Bb.或BCb LASTVT(B)=a|Ba或BaC三种关系: 关系:A ab或A aBb则有ab 关系:求出每个非终结符B的FIRSTVT(B),对形如产生式A aB,对于每一 b FIRSTVT(B),则有ab成立。 关系:求出每个非终结符B的LASTVT(B),对形如产生式A Bb,对于每一a LASTVT(B),则有ab成立。例3、有表达式文法E#E#, EE+T|T,TT*F|F,FPF|P,P (E)|i(1)计算优先关系由E#E#, P (E)有

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号