- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第六章 LR分析程序及其自动构造new.ppt
第6章LR分析程序及其自动构造 6.1 自下而上分析及其LR分析概述 6.2 LR 0 分析 6.3 SLR 1 分析 6.4 LR(1)分析 6.5 LALR分析 6.6 使用二义文法 自下而上分析算法 能力强 构造复杂 最常用和最有效的模型----移进归约 动作) 将输入分成两部分:未消化和半消化的 S – E E – T | E + T T – int | E Reduce: 如能找到一产生式 A – w 且栈中的内容是 qw q 可能为空 , 则可以将其归约为 qA.即倒过来用这个产生式. 如上例, 若栈中内容是 int ,我们使用产生式 T– int柄把栈中内容归约为 T Shift: 如不能执行一个归约且在未消化的输入中还有 token ,就把它从输入移到栈中. 如上例,假定栈中内容是 ,输入中还有 int+int #.不能对 执行一个归约,因为它不和任何产生式的右端匹配.所以把输入的第一个符号移到栈中,于是栈中内容是 int ,而余留的输入是 +int # . Reduce的一个特殊情况:栈中的全部内容w归约为开始符号S (即施用 S – w) ,且没有余留输入了,意味着已成功分析了整个输入串. 移进归约分析中还会出现一种情况,就是出错,比如当前的token不能构成一个合法句子的一部分,例如上面的文法,试分析 int+ 时就会发生错误. STACK REMAINING INPUT PARSER ACTION 1 int + int # Shift 2 int + int # Shift 3 int + int # Reduce: T – int 4 T + int # Reduce: E – T 5 E + int # Shift 6 E + int # Shift 7 E + int # Reduce: T – int 8 E + T # Reduce: E – E + T 9 E # Shift 10 E # Reduce: T – E 11 T # Reduce: E – T 12 E # Reduce: S – E 13 S # E + T # Reduce:E – E + T why?不用 E – T E # 若使用了E – T,在栈中形成的 E+E不是规范句型的活前缀(viable prefixes) (E+E不能和任何产生式的右端匹配 (E+E)不是规范句型 活前缀 是规范句型(右句型)的前缀,但不超过句柄 移进归约分析的栈中出现的内容加上余留输入构成规范句型 规范推导 规范句型 规范归约 最右推导:在推导的任何一步α?β,其中α、β是句型,都是对α中的最右非终结符进行替换 最右推导被称为规范推导。 由规范推导所得的句型称为规范句型 G[S]: S→E E→E+T|T T→ E |intS?E ?T ? E ? E+T ? E+int ? T+int ? int+int 规范归约 假定α是G的一个句子,称序列αn ,αn-1 …,α0是 α的一个规范归约 如果该序列满足: (1) αn α (2) α0为文法的开始符号 (3)对任何j,0 j n, αj-1是从αj经把句柄替换为相应产生式的左部而得到的 文法要求 shift-reduce or reduce-reduce 冲突(conflicts) 分析程序不能决定是shift 还是 reduce 或者分析程序归约时有多个产生式可选 例子 ( dangling else) : S – if E then S | if E then S else S 如输入if E then if E then S else S 分析某一时刻,栈的内容:if E then if E then S 而 else 是下一 token 归约还是移进? 特定的一种shift-reduce实现技术LR分析 L R 最右推导 分析器模型和分析算法 LR 分析特征讨论 LR分析器模型 LR分析算法 置ip指向输入串w的第一个符号 令S为栈顶状态 a是ip指向的符号 重复 begin if ACTION[S,a] Sj then begin PUSH j,a 进栈 ip 前进 指向下一输入符号 end else if ACTION[S,a] rj 第j条产生式为A?? LR分析程序 then begin pop |?| 项 令当前栈顶状态为S’ push GOTO[S’,A]和A 进栈 end else if ACTION[s,a] acc then return 成
原创力文档


文档评论(0)