- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
定义5.14 ( LR(1)有效项目) 其中:ω∈VT*, γ=δα,a∈FIRST(ω)或a 为 ’#’(当ω=ε),称a为搜索符。 若文法G的一个LR(1)项目[A→ α ·β,a] 对活前缀γ是有效的,当且仅当存在规范推导 * * Ch5 语法分析 5.6 LR(1 )分析 5.6.2 LR(1)分析实现思想 例5.16 : 设有文法G S → BB B → aB | b LR(1)项目 [ B → a.B , a ] 对活前缀aaa有效 Q ? 规范推导 S = BB = BaB = Bab = aBab + LR(1)项目 [ B → a.B , # ] 对活前缀Baa有效 + ω δα αβ Ch5 语法分析 5.6 LR(1 )分析 5.6.2 LR(1)分析实现思想 当ω=ε 例如,对例5.15 有 I2={ S→ L·= R,R→L·} FOLLOW( R)={=,#} 从 [ R→L·, = ] 项目考察知,它对L无效。 而 [ R→L·, # ] 项目考察知,它对L无效。 Ch5 语法分析 5.6 LR(1 )分析 5.6.2 LR(1)分析实现思想 Ch5 语法分析 5.6 LR(1 )分析 5.6.3 LR(1)项目集族的构造 算法5.7 closure ( I ) { do { if ( 对 I 的每个项目 [A→α · Bβ, a ], G′中的 每个产生式 B→γ和 FRIST( βa)的每个终结符 b , 如果[ B→?γ]不在I中) 则把 [ B→?γ, b ] 加到I中 ; } while ( 没有更多的项目可以加入 I ) ; return I ; } * 注意:待约项目扩展的项目 的搜索符的求法。 Ch5 语法分析 5.6 LR(1 )分析 5.6.3 LR(1)项目集族的构造 算法5.8 Go ( I, X ) { 令J是项目[ A→ αX?β, a]的集合, 使得 [A→ α ?Xβ, a]在 I 中 ; return closure(J); } LR(1)的C的GO函数:GO(I, X)是I中LR(0) 的项目圆点右移一个位置的项目且搜索符 不变,加入的项目若是待约项目则对该项 目求closure。 Ch5 语法分析 5.6 LR(1 )分析 5.6.3 LR(1)项目集族的构造 算法5.9 items(G′) { C= closure ({S ′ →?S , # } ); do { if ( 对C的每个项目I和每个文法符号 X, 若go(I, X) 非空且不在C中) 把go(I, X) 加入C中; } while (没有更多的项目集可以加入C中); } Ch5 语法分析 5.6 LR(1 )分析 5.6.4 LR(1)分析表的构造 算法5.10 ( LR(1)分析表构造) 输入:拓广的文法G ′和文法G ′的LR(1)项目集规 范族C 和GO函数 输出:文法G ′的LR(1)分析表 方法:设构造G ′的LR(1)项目集规范族 C={I0, I1,…, In} 令每个Ik的下标K为分析表的状态。 令含有 [S ′ →·S,#]的项目集为分析表的初态。 则有: Ch5 语法分析 5.6 LR(1 )分析 5.6.4 LR(1)分析表的构造 算法5.10 (续) ① 对于每个项目集Ii中形如[A→α·Xβ,b]的 项目,若GO (Ii, X )=Ij,且X=a,( a∈VT)时,置 action[Ii , a]=Sj。 若 X∈VN时,则置: GOTO[Ii, X]=j。 ② 若归约项目[A→α·, a]∈Ij,A→α为文法的 第j个产生式,则置 action [Ii, a]=rj。 ③ 若项目[S‘→S·,#]∈Ii,则置 : action[Ii,#]= “acc”。 ④ 对分析表中不能按上述规则填入信息的元素, 则置“出错”标志。 Ch5 语法分析 5.6 LR(1 )分析 5.6.4 LR(1)分析表的构造 定义5.15 按照LR(1)的项目集规范族构造的文法G 的LR (1)分析表,如果每个入口不含多重定义 ,则称它为G的LR(1)分析表。具有LR(1)分析 表的文法G称为LR(1)文法。使用LR(1)分析表
文档评论(0)