- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
S.P
O.P
表
格
管
理
程
序
错
误
处
理
程
序
1
第7章 LR分析法
2
(属于自底向上语法分析法)
LR(0)、SLR(1)、LR(1)、 LALR(1)
L表示从左至右扫描输入串,R表示构造一个最右推导的逆过程
第7章 LR分析法
第一种,也是最简单的,叫LR(0)分析法,在分析过程中不需要向右查看输入符号,因而它对文法的限制比较大,但它是建立其它LR分析法的基础。
第二种是简单LR分析法(简称SLR)。虽然有些文法构造不出SLR分析表,但这是一种比较容易实现又极具使用价值的方法。
第三种是规范LR分析法(即LR(1))。这种分析表能力最强,能够适用一大类文法,但实现代价过高,或者说分析表的体积太大。
第四种是向前LR分析法(简称LALR)。这种分析表的能力介SLR和LR(1)之间,稍加努力即可高效率地实现。
3
4
复习:移进-归约分析
5
文法G[S]:(1) S → aAcBe(2) A → b(3) A → Ab(4) B → d
a
b
b
c
d
e
步骤
符号栈
输入符号串
动作
1) # abbcde# 移进
2) #a bbcde# 移进
4) #aA bcde# 移进
6) #aA cde# 移进
7) #aAc de# 移进
9) #aAcB e# 移进
11) #S # 接受
分析符号串abbcde是否G[S]的句子
对输入串abbcde#的移进-规约分析过程
6
3) #ab bcde# 归约(A→b)
5) #aAb cde# 归约(A→Ab)
4) #aA bcde# 移进
6) #aA cde# 移进
在步骤3中,用A→b归约
在步骤5中,用A→Ab归约
问题:何时移进?何时归约?用哪个产生式归约?
7
7.1 LR分析概述
根据前面的介绍我们知道:自下而上分析的中心思想是“移进-归约”,关键问题就是“寻找规范句型的句柄”。当一貌似句柄的符号串呈现于分析栈顶时,如何确定用哪一个产生式来归约?这是我们一直未能解决的问题。
8
在分析过程中我们没有利用到已移进和归约出的整个符号串——“历史资料”,也没有根据产生式去“展望”未来可能遇到的输入符号,而LR分析法就是在这些方面对“移进-归约”进行改造的。
LR分析法的基本思想:根据“历史资料”、“现实输入符号”以及对未来的“展望”等三个方面来确定栈顶的符号是否构成了相对于某一产生式的句柄。它是由Knuth在1965年首先提出的,后经Aho等人改造而成。
9
一、可归前缀与活前缀
文法G[S]:(1) S → aAcBe[1](2) A → b[2](3) A → Ab[3](4) B → d[4]
是否推导出abbcde?
S ?aAcBe[1] ?aAcd[4]e[1] ?aAb[3]cd[4]e[1] ?ab[2]b[3]cd[4]e[1]
每次归约句型的前部分依次为:ab[2]aAb[3]aAcd[4]aAcBe[1]
规范句型的这种前部分符号串称为可归前缀,它不含句柄之后的任何符号。
我们把形成可归前缀之前包括可归前缀在内的所有规范句型的前缀都称为活前缀。
活前缀例: ?,a,ab ? ,a,aA,aAb ? ,a,aA,aAc,aAcd ? ,a,aA,aAc,aAcB,aAcBe
10
二、LR分析要解决的问题
LR分析需要构造识别活前缀的有穷自动机
可以把文法的终结符和非终结符都看成有穷自动机的输入符号,每次把一个符号进栈看成已识别过了该符号,同时状态进行转换,当识别到可归前缀时,相当于在栈中形成句柄,认为达到了识别句柄的终态。
一种比较实用的构造方法:------由文法的产生式直接构造识别活前缀和可归前缀的有限自动机。
三、 LR分析器
LR分析器的组成
由3部分组成:总控程序、分析表、分析栈。
2. LR分析器的构造
(1) 构造识别文法活前缀的确定
文档评论(0)