- 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分析法
在第5章中已经讨论过,自底向上分析方法是一种移进归约过程,当分析的栈顶符号串形成句柄时就采取归约动作,因而自底向上分析法的关键问题是分析过程中如何确定句柄。LR分析法正是给出一种能根据当前分析栈中的符号串(通常以状态表示)和向右顺序查看输入串的K个(K≥0)符号就可唯一地确定分析器的动作是移进还是归约和用哪个产生式归约,因而也就能唯一地确定句柄。LR分析法的归约过程是规范推导的逆过程,所以LR分析过程是一种规范归约过程。
LR(K)分析方法是1965年Knuth先生提出的,括号中的K表示向右查看输入串符号的个数。这种方法比起自顶向下的LL(K)分析方法和自底向上的优先分析方法对文法的限制要少得多,也就是说对于大多数用无二义性上下文无关的文法描述的语言都可以用相应的LR分析器进行识别,而且这种方法还具有分析速度快,能准确、即时地指出出错位置。但是,由于它的主要缺点是对于一个实用语言文法的分析器的构造工作量相当大,K愈大构造愈复杂,实现相当困难。因此,目前对于真正实用的编译程序,所采用的LR分析器都是借助于美国Bell实验室1974年推出的“一个编译器的编译器—YACC”来实现的。它能接受一个用BNF描述的满足LALR(1)的上下文无关文法并将自动构造出LALR(1)语法分析器。
本章将主要介绍LR分析的基本思想和当K≤1时LR分析器的基本构造原理和方法。其中LR(0)分析器是在分析过程中不需向右查看输入符号,因而它对文法的限制较大,对绝大多数高级语言的语法分析器是不能适用的,然而,它是构造其它LR类分析器的基础。当K=1是,已能满足当前绝大多数高级语言编译程序的需要。其中SLR(1)和LALR(1)分别是LR(0)和LR(1)的一种改进。
本章重点:LR(0)、SLR(1)
第一节 LR分析概述
图6-1-1(a)LR分析器结构示意图 (b)分析栈示意图总控程序分析表
图6-1-1
(a)LR分析器结构示意图 (b)分析栈示意图
总控程序
分析表
a1? --- ?ai?????--- ?#
Xm
┇
#
Sm ?Xm
Sm-1 Xm-1
┇ ?┇
S1 ?X1
SO ?#
在分析的每一时刻,分析栈中记录了迄今为止的分析历程。因此,为了方便,对于分析过程的每一步,我们可将迄今的分析历程用一种“状态”来刻画,并将此状态名置于分析栈的栈顶,如图6-1-1(b)所示。分析刚开始时,栈中仅有一个句子的左界符号#,此时分析器处于初始状态SO。此SO不仅刻画了分析栈中当前仅有一个符号#这一事实,而且还预示着:即将扫视的输入符号,应正好是可作为句子首符号的那些符号。类似地,状态S1刻画了分析栈中已存有符号#X1的情况,S2刻画了栈中存有符号串?#?X1X2的情况,…,栈顶状态Sm刻出了栈中已存有符号串?#?X1X2…Xm,等等。此外,根据分析栈栈顶状态,还可对当前可能遇到的输入符号进行预测。例如,对于前面所述的文法G[E],设分析栈中已移进和归约出的符号串为?# E+T时的栈顶状态为Si,则Si不仅表征了迄今所扫描过的输入符号业已被归约成# E+T,而且由Si还可作这样的预测:若输入符号串无语法错误,则当前可遇到的输入符号,仅能是(+,*,),或#。显然,对于上述栈顶状态Si,若当前所扫视到的符号为*,则应将*移入栈中;当扫视到的符号为+、)或#时,则应将符号串E+T归约为E;若扫视到的不是上述四种符号之一,则应按语法错误处理。由此可见,知道了栈顶状态Sm和正扫视到的输入符号ai,就知道了当前所需的全部有用信息,从而也就可唯一地确定当前分析器所应完成的动作。所以,在具体实现时,并不需要将已归约出的文法符号串也记入分析栈中。
作为LR(1)分析器核心的分析表由两个子表组成:其一是分析动作表,另一个为状态转换表,分别如图6-1-2(a)和6-1-2(b)所示。其中:S1,S2,…Sn为分析器的各个状态;a1,a2,…,ae为文法的全部终结符号或句子的界符;X1,X2,…X为文法字汇表中的全部文法符号。分析表中的每一元素ACTION[Sm,ai]指明,当栈顶状态为Sm且扫视到的输入符号为ai时应完成的动作。状态转移表中的元素GOTO[Sm,Xi]则指明,当栈顶状态为Sm且面临文法符号Xi时所应转移到的下一状态。
a1
a2
……
ae
S1
ACTION[S1,a1]
ACTION[S1,a2]
……
ACTION[S1,ae]
S2
ACTION[S2,a1]
ACTION[S2,a2]
……
ACTION[S2,ae]
…
……
……
……
……
Sn
ACTION[Sn,a1]
ACTION[Sn,a2]
……
ACTION[Sn,ae]
图6-1-2(a)分析动作表
X1
X2
……
Xp
S1
您可能关注的文档
最近下载
- 2025年重庆市中考英语试题(A卷)(含听力音频和答案).pdf VIP
- 低温冰雪天气安全教育.pptx VIP
- 医疗机构睡眠门诊建设和管理专家共识2025版.docx VIP
- 《小狗钱钱》读书笔记.docx VIP
- 2024事业单位招聘药剂岗位考试题.pdf
- STA无痛麻醉仪课件-sta无痛麻醉仪课件.ppt VIP
- Eurotherm欧陆 Mini8 Firmware v5.0+用户指南.pdf VIP
- 《水运工程建设期碳排放计算标准》.pdf
- 小学音乐教学中小乐器进课堂的实践与研究.docx VIP
- 云南省昆明市官渡区2023_2024学年五年级上学期语文期末学业质量监测试卷.doc VIP
原创力文档


文档评论(0)