欢迎来到天天文库
浏览记录
ID:43809789
大小:400.00 KB
页数:12页
时间:2019-10-14
《编译原理 7章.6-7》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、7.6无二义性规则的使用简单的无二义规则“移进-归约”冲突,移进优先。“归约-归约”冲突,序号优先文法G[S](1)S→IFSELSES(2)S→IFS(3)S→S;S(4)S→a拓广G[S’],简化(0)S’→S(1)S→iSeS(2)S→iS(3)S→S;S(4)S→aFollow(s)={#,e,;}7.6无二义性规则的使用简单的无二义规则“移进-归约”冲突,移进优先。“归约-归约”冲突,序号优先文法G[S](1)S→IFSELSES(2)S→IFS(3)S→S;S(4)S→a拓广G[S’],简化(0)S’→S(1)S→iSeS(2)S→iS(3)S→S;S(4)S→aF
2、ollow(s)={#,e,;}G[S’]的LR(0)项目族(0)S’→S(1)S→iSeS(2)S→iS(3)S→S;S(4)S→aG[S’]的SLR(1)分析表(0)S’→S(1)S→iSeS(2)S→iS(3)S→S;S(4)S→aFollow(s)={#,e,;}状态ACTION状态ACTIONaei;#Saei;#S0S3S215S7S4r271S4Acc6r3S4r32S3S257S3S283r4r4r48r1S4r14S3S26G[S’]的LR(1)项目族(0)S’→S(1)S→iSeS(2)S→iS(3)S→S;S(4)S→a状态ACTIONaei;#S0S3S
3、211S4Acc2S7S653r44S3S285S9S10r3r36S7S6117r4r4r48S4r3r39S3S21210S7S61311S14r2S10r2r212S4r1r113S4r3r314S7S61515r1S10r1r1(0)S’→S(1)S→iSeS(2)S→iS(3)S→S;S(4)S→a同心:2-63-74-105-118-139-1412-157.7.1LR分析程序①LR(k)分析程序可以分析几乎所有能用上下文无关文法描述的高级语言的结构,而且对于大多数高级语言而言,k=1即可;②LR分析程序比前述的优先分析程序适用面更广,且能以同样的功效来实现;③LR
4、分析程序在从左至右分析输入串时,只要输人符号串中有一错误出现,就能及时发现;④为一个典型的高级语言,构造一个LR分析程序的工作量常常大得难以用手工实现,因此,得借助自动方法来构造。7.7.2LR分析表的自动构造(1)如前所述,一个LR分析程序主要由总控程序和分析表组成,对于不同的文法,总控程序是基本相同的,只是分析表不同。一个LR分析程序的自动构造就是指它的分析表的自动构造。LR(K)文法--->分析表自动生成器--->LR分析表为了自动构造分析表,需先设计一个“分析表自动生成器”。设计“分析表自动生成器”并不困难,可按前述的过程进行,主要是①构造LR(0)或LR(1)项目集规
5、范族;②构造识别活前缀的有穷自动机.关键是选用什么样的数据结构把它们表示到计算机中。7.7.2LR分析表的自动构造(2)Unix环境中的YACC程序接收LALR(1)文法,并采用LALR分析方法自动生成相应的分析表。当在构造分析表过程中发现存在动作冲突时,它还要求用户提供关于优先级及结合性等附加信息,以便对每个状态作出正确的选择。YACC解决冲突的基本思路是:对每个产生式和每个终结符号赋一个优先级,若在扫描输入符号a时,不能确定是按“A→α归约”还是执行“移进”动作,就比较A→α与终结符号a的优先级,若前者高,就用A→α归约,否则就执行移进动作(移进a).此外YACC还允许指明
6、某终结符号是具有左结合性还是右结合性等(参见第14章)。7.7.3文法间的关系文法间的关系如图7.7所示.其中,OPG可以是二义性的,因而它不是任何一类LR文法.LL(1)文法集略小于LALR(1)文法;LR文法的形式要求不很严格,因而容易给出各种语言的LR文法.相比之下,给出一种语言的LL(1)文法则需精心思考,但构造LR分析表比构造LL(1)分析表要复杂得多.简单优先文法的优先关系矩阵的大小约为
7、VT∪VN
8、2(这里,
9、VT∪VN
10、表示终结符号和非终结符号的个数,下同).算符优先文法的优先关系矩阵的大小约为
11、VT
12、2。若采用优先函数,则分别下降为2
13、VT∪VN
14、和2×
15、VT
16、
17、。LL(1)分析表的大小约为
18、VT
19、×
20、VN
21、,比SPG的优先关系矩阵要小一些;7.7.5有关LR文法的几个结论下面仅给出与LR分析有关的几个结论,有兴趣的读者可自行证明它.①LR(k)文法是无二义性的,而且满足LR(O)SLR(1)LALR(1)LR(1)此外,对所有的k都有LR(k)LR(k+1)②给定文法G和某个固定的k,G是否是LR(k)文法的问题是可判定的.③给定文法G,是否存在一个k使得G是一个LR(k)文法的问题是不可判定的.
此文档下载收益归作者所有