收藏 分享(赏)

第6章 LR分析法.ppt

上传人:tkhy51908 文档编号:8010127 上传时间:2019-06-04 格式:PPT 页数:37 大小:202KB
下载 相关 举报
第6章 LR分析法.ppt_第1页
第1页 / 共37页
第6章 LR分析法.ppt_第2页
第2页 / 共37页
第6章 LR分析法.ppt_第3页
第3页 / 共37页
第6章 LR分析法.ppt_第4页
第4页 / 共37页
第6章 LR分析法.ppt_第5页
第5页 / 共37页
点击查看更多>>
资源描述

1、第六章 LR分析法,前言 LR分析与简单优先分析的异同点 相同点:均是移进归约思想、规范归约 不同点:分析范围不同、寻找句柄方法不同、一旦句柄形成LR分析器能立刻查出用哪条产生式归约 LR分析法的分类 四种LR分析法的异同,Input,LR 分析程序,Stack,Output,分析表 action.,. goto.,.,(输入串 + #),当前分析器应采取的动作依赖于栈顶与输入字符,分析器的动作: s : 栈顶 a : 当前输入 1. 若 actions,a=“accept” 报告成功! 若 actions,a=“用产生式 A 归约” 执行以下动作: 2a. 文法符号栈与状态栈分别弹出|个 符

2、号。 2b. 文法符号栈中压入A 2c. Push goto s* ,A ,其中s*为状态栈弹出符号后的栈顶状态 若 actions,a=“移进状态 s* ” 将a移入文法符号栈,将 s* 移入状态栈 若actions,a=“空白”则报错,SP,LR分析器工作过程示意图,LR分析概述: 一个LR分析器由以下三部分组成: LR分析程序 对于同类的LR分析器,分析程序是相同的。 分析表 是核心,分为动作表(ACTION)和状态转换表(GOTO)。 分析栈 使用两个栈:文法符号栈、状态栈,GS:S aABeA Abc | bB d 输入串 abbcde的最右推导如下: S aABe aAde aAb

3、cde abbcde 下划线标识的是每一步的句柄(唯一).活前缀: , a, aA, aAB, aABe,aAd, aAb,aAbc, ab, 非活前缀: aAde, Abc, aAA,移进/归约分析,# abbcde# 移进 #a bbcde# 移进 #ab bcde# 归约 #aA bcde# 移进 #aAb cde# 移进 (?) #aAbc de# 归约 #aA de# 移进 #aAd e# 归约 #aAB e# 移进 #aABe # 归约 #S # 成功,栈,输入串,动作,注意: 栈中所有的 串均是活前缀。,注意: 能归约吗?,GS:S aAcBeA Ab | bB d 输入串 ab

4、bcde的最右推导如下: S aAcBe aAcde aAbcde abbcde 下划线标识的是每一步的句柄(唯一).活前缀: , a, aA, aAb, aAcBe,aAc, aAcd, 非活前缀: aAA,移进/归约分析,# abbcde# 移进 #a bbcde# 移进 #ab bcde# 归约 #aA bcde# 移进 #aAb cde# 归约 (?) #aA cde# 移进 #aAc de# 移进 #aAcd e# 归约 #aAcB e# 移进 #aAcBe # 归约 #S # 成功,栈,输入串,动作,注意: 如何知道按哪条 产生式归约?,LR(0)项目集规范族的构造: LR(0)项

5、目 在文法G中每个产生式的右部适当位置添加一个圆点构 成项目。 例如:对AXYZ对应项目A XYZA XYZA XYZA XYZ 对于A 只有项目 A ,注意:圆点左部表示该句柄已识别部分,右部表示待识别部分。,项目分类 根据圆点所在的位置和圆点后是VT还是VN把项目分为以 下几种: 移进项目,形如A a , 其中, V *, aVT 待约项目,形如A B , 其中, V *, BVN 归约项目,形如A ,其中 V * 接受项目,形如S S , S S 为拓广文法,LR(0)项目集规范族的构造 步骤如下: 变为拓广文法 构造识别可归前缀的有穷自动机 构造LR(0)分析表 利用分析表来分析句子,

6、GE: E Aa | bB A cA | dB cB | d,构造LR(0)分析表并分析bcccd是否是文法的句子,SLR(1)分析: 先看如下文法: S rD D D,i D i 它是LR(0)文法吗?如何解决冲突?,E EE E + T | TT T * F | FF ( E ) | id,构造SLR(1)分析表并分析i+i*i是否是文法的句子,E E closure(E .E) = E E+T E .E kernel items E T E .E+T T T*F E .T T F T .T*F F (E) T .F F id F .(E)F .id ,I = E .E, E .E+T,

7、E .T, T .T*F, T .F, F .(E), F .id goto(I, E) = E E., E E.+T goto(I, T) = E T., T T.*F goto(I, F) = T F. goto(I, () = F (.E), E .E+T, E .T, T .T*F, T .F, F .(E), F .id goto(I, id) = F id. ,I0: E .E I1: E E. I6: E E+.T I9: E E+T. E .E+T E E.+T T .T*F T T.*FE .T T .FT .T*F I2: E T. F .(E) I10: T T*F.T

8、.F T T.*F F .id F .(E) F .id I3: T F. I7: T T*.F I11: F (E). F .(E) I4: F (.E) F .id E .E+T E .T I8: F (E.) T .T*F E E.+T T .F F .(E) F .id I5: F id.,Action Table,Goto Table,冲突的例子,S L=R I0: S .S I1:S S. I6:S L=.R I9: S L=R. S R S .L=R R .L L *R S .R I2:S L.=R L .*R L id L .*R R L. L .id R L L .idR .

9、L I3:S R.I4:L *.R I7:L *R.问题 R .LFOLLOW(R)=,$ L .*R I8:R L.= shift 6 L .idreduce by R Lshift/reduce conflict I5:L id.,冲突的例子2,S AaAb I0:S .S S BbBa S .AaAb A S .BbBa B A .B .问题FOLLOW(A)=a,bFOLLOW(B)=a,ba reduce by A b reduce by A reduce by B reduce by B reduce/reduce conflict reduce/reduce conflict,L

10、R(1)分析: LR(1)项目集族的构造 S S ,属于初始项目集中, 为向前搜索符。 构造LR(1)项目集的闭包函数。 I的任何项目都属于CLOSURE(I)中。 若有项目A B,a属于CLOSURE(I), B是文法中的产生式, V*, b FIRST(a)。则B ,b也属于CLOSURE(I)中。 转换函数的构造 若 A X,a 属于 I 则A X,a 属于GOTO(I , X)。,若有 A .,a1. A .,an可被写为A .,a1/a2/./an,(0) S S(1) S aAd(2) S bAc(3) S aec(4) S bed(5) A e,试构造该文法的LR(1)项目集族,

11、LR(1)分析表的构造 LR(1)项目分为:心( LR(0) 项目)、向前搜索符集合,故 LR(1)分析表的构造与LR(0)分析表的构造大部分相同,只是 对LR(1),归约动作取决于该归约项目的向前搜索符集。,例1,S AaAb I0:S .S ,$ I1: S S. ,$ S BbBa S .AaAb ,$ A S .BbBa ,$ I2: S A.aAb ,$ B A . ,aB . ,b I3: S B.bBa ,$ I4: S Aa.Ab ,$ I6: S AaA.b ,$ I8: S AaAb. ,$A . ,bI5: S Bb.Ba ,$ I7: S BbB.a ,$ I9: S

12、BbBa. ,$B . ,a,例2,S S 1) S L=R 2) S R 3) L *R 4) L id 5) R L,I0:S .S,$S .L=R,$S .R,$L .*R,$/=L .id,$/=R .L,$,I1:S S.,$,I2:S L.=R,$R L.,$,I3:S R.,$,I4:L *R,$/=R L,$/=L *R,$/= L id,$/=,I5:L id,$/=,I6:S L=.R,$R .L,$L .*R,$L .id,$,I7:L *R,$/=,I8: R L,$/=,I9:S L=R.,$I10:R L,$I11:L *R,$R L,$L *R,$L id,$I1

13、2:L id,$,I13:L *R,$,to I6,to I7,to I10,to I11,to I12,to I13,id,S,L,L,L,R,R,R,id,id,id,R,L,*,*,*,*,I4 and I11I5 and I12I7 and I13I8 and I10,LR(1) 分析表 (例2),无移进-归约、归约-归约 冲突 所以它是 LR(1)文法,S SS AAA Aa | a,该文法是否是LR(1)文法?若是给出分析表,L LL MLb | aM ,该文法是否是LR(1)文法?并说明原因,若是给出分析表,LALR(1)分析: 问题的出现: LR(1)分析法适应的文法类广,但它

14、可能引 起状态数目的剧烈增长,为克服这一缺点,下面介绍 LALR(1)分析。,看以下这个例子,S S 1) S L=R 2) S R 3) L *R 4) L id 5) R L,I0:S .S,$S L=R,$S .R,$L *R,$/=L id,$/=R .L,$,I1:S S.,$,I2:S L.=R,$R L.,$,I3:S R.,$,I411:L *.R,$/=R .L,$/=L .*R,$/= L .id,$/=,I512:L id.,$/=,I6:S L=.R,$R .L,$L .*R,$L .id,$,I713:L *R.,$/=,I810: R L.,$/=,I9:S L=R

15、.,$,to I6,to I713,S,L,L,L,R,R,id,id,id,R,*,*,*,心相同的状态I4 and I11I5 and I12I7 and I13I8 and I10,LALR(1) 分析表 (例2),无移进-归约、归约-归约 冲突 所以它是LALR(1)文法,有关合并同心集的几个问题: 同心集是心相同的项目合并在一起,超前搜索符集合是他们的和集。 合并同心集后,转换函数自动合并。 若文法是LR(1)文法,合并同心集后若有冲突只可能是归约-归约冲突。 合并同心集后对某些错误发现的时间会产生推迟现象,但错误的出现位置仍是准确的。,S SS AaS dAbS cbS BBA cB BcB b,构造下列文法的LALR(1)分析表,S aAa | aBb | bAb | bBaA xB x,有人说,是LR(1)文法,但不是LALR(1)文法。你认为呢?为什么?,S bASB | bAA dSa | bB cAa | c,判别此文法是下列文法中的哪一种?并说明理由。 LR(0)、SLR(1)、LALR(1)、LR(1),作业(课本151页):1,2,3,本章要点,LR分析概述 LR分析法的分类及异同 掌握各类分析的分析表构造以及分析过程 比较与简单优先分析法的异同,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报