网站大量收购独家精品文档,联系QQ:2885784924

编译原理 7章.6-7.ppt

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理 7章.6-7

7.6 无二义性规则的使用 简单的无二义规则 “移进-归约”冲突,移进优先。 “归约-归约”冲突,序号优先 文法G[S] (1) S→IF S ELSE S (2) S→IF S (3) S→S;S (4) S→a 拓广G[S’],简化 (0) S’→S (1) S→iSeS (2) S→iS (3) S→S;S (4) S→a Follow(s)={#,e,;} 7.6 无二义性规则的使用 简单的无二义规则 “移进-归约”冲突,移进优先。 “归约-归约”冲突,序号优先 文法G[S] (1) S→IF S ELSE S (2) S→IF S (3) S→S;S (4) S→a 拓广G[S’],简化 (0) S’→S (1) S→iSeS (2) S→iS (3) S→S;S (4) S→a Follow(s)={#,e,;} G[S’]的LR(0)项目族 (0) S’→S (1) S→iSeS (2) S→iS (3) S→S;S (4) S→a G[S’]的SLR(1)分析表 (0) S’→S (1) S→iSeS (2) S→iS (3) S→S;S (4) S→a Follow(s)={#,e,;} G[S’]的LR(1)项目族 (0) S’→S (1) S→iSeS (2) S→iS (3) S→S;S (4) S→a 7.7.1 LR分析程序 ① LR(k)分析程序可以分析几乎所有能用上下文无关文法描述的高级语言的结构,而且对于大多数高级语言而言,k=1即可; ② LR分析程序比前述的优先分析程序适用面更广,且能以同样的功效来实现; ③ LR分析程序在从左至右分析输入串时,只要输人符号串中有一错误出现,就能及时发现; ④ 为一个典型的高级语言,构造一个LR分析程序的工作量常常大得难以用手工实现,因此,得借助自动方法来构造。 7.7.2 LR分析表的自动构造(1) 如前所述,一个LR分析程序主要由总控程序和分析表组成,对于不同的文法,总控程序是基本相同的,只是分析表不同。一个LR分析程序的自动构造就是指它的分析表的自动构造。 LR(K)文法---分析表自动生成器---LR分析表 为了自动构造分析表,需先设计一个“分析表自动生成器”。 设计“分析表自动生成器”并不困难,可按前述的过程进行,主要是 ①构造LR(0)或LR(1)项目集规范族; ②构造识别活前缀的有穷自动机. 关键是选用什么样的数据结构把它们表示到计算机中。 7.7.2 LR分析表的自动构造(2) Unix环境中的YACC程序接收LALR(1)文法,并采用LALR分析方法自动生成相应的分析表。 当在构造分析表过程中发现存在动作冲突时,它还要求用户提供关于优先级及结合性等附加信息,以便对每个状态作出正确的选择。 YACC解决冲突的基本思路是:对每个产生式和每个终结符号赋一个优先级,若在扫描输入符号a时,不能确定是按“A→α归约”还是执行“移进”动作,就比较A→α与终结符号a的优先级,若前者高,就用A→α归约,否则就执行移进动作(移进a). 此外YACC还允许指明某终结符号是具有左结合性还是右结合性等(参见第14章)。 7.7.3 文法间的关系 文法间的关系如图7.7所示.其中,OPG可以是二义性的,因而它不是任何一类LR文法.LL(1)文法集略小于LALR(1)文法; LR文法的形式要求不很严格,因而容易给出各种语言的LR文法.相比之下,给出一种语言的LL(1)文法则需精心思考,但构造LR分析表比构造LL(1)分析表要复杂得多. 简单优先文法的优先关系矩阵的大小约为|VT∪VN|2 (这里,|VT∪VN| 表示终结符号和非终结符号的个数,下同).算符优先文法的优先关系矩阵的大小约为|VT|2。若采用优先函数,则分别下降为2|VT∪VN|和2×|VT|。LL(1)分析表的大小约为|VT|×|VN|,比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)文法的问题是不可判定的. * 6 S2 S3 4 r1 S4 r1 8 r4 r4 r4 3 8 S2 S3 7 5 S2 S3 2 r3 S4 r3 6 Acc S4 1 7 r2 S4 S7 5 1 S2 S3 0 S # ; i e a S # ; i e a ACTION 状态 AC

文档评论(0)

cgtk187 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档