欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    第07章 LR 分析.docx

    • 资源ID:13371227       资源大小:258.70KB        全文页数:46页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第07章 LR 分析.docx

    1、第07章 LR 分析第 7 章 LR 分析第1题 已知文法 AaAd|aAb|判断该文法是否是 SLR(1)文法,若是构造相应分析表,并对输入串 ab#给出分析过程。答案: 文法:AaAd|aAb|拓广文法为 G,增加产生式 SA 若产生式排序为:0 S A1 A aAd2 A aAb3 A 由产生式知:First (S ) = ,a First (A ) = ,a Follow(S ) = # Follow(A ) = d,b,#G的 LR(0)项目集族及识别活前缀的 DFA 如下图所示:在 I0 中:A .aAd 和 A .aAb 为移进项目,A .为归约项目,存在移进-归约冲突,因此所给

    2、文法 不是 LR(0)文法。在 I0、I2 中:Follow(A) a= d,b,# a=所以在 I0、I2 中的移进-归约冲突可以由 Follow 集解决,所以 G 是 SLR(1)文法。 构造的 SLR(1)分析表如下:题目 1 的 SLR(1)分析表状态(State)ActionGotoadb#A0S2r3r3r311acc2S2r3r3r333S4S54r1r1r15r2r2r2题目 1 对输入串 ab#的分析过程状态栈(state stack)文法符号栈剩余输入串(input left)动作(action)0#ab#.Shift0 2#ab#.Reduce by :A 0 2 3#a

    3、Ab#.Shift0 2 3 5#aAb#.Reduce by :A aAb0 1#A#.分析成功,说明输入串 ab 是文法的句子。第2题 若有定义二进制数的文法如下: SLL|LLLB|B B0|1(1) 试为该文法构造 LR 分析表,并说明属哪类 LR 分析表。 (2) 给出输入串 101.110 的分析过程。答案: 文法:SL.L|L LLB|B B0|1拓广文法为 G,增加产生式 SS 若产生式排序为:0 S S1 S L.L2 S L3 L LB4 L B5 B 06 B 1 由产生式知:First (S ) = 0,1 First (S ) = 0,1 First (L ) = 0

    4、,1 First (B ) = 0,1 Follow(S ) = # Follow(S ) = # Follow(L ) = .,0,1,# Follow(B ) = .,0,1,#G的 LR(0)项目集族及识别活前缀的 DFA 如下图所示:在 I2 中:B .0 和 B .1 为移进项目,S L.为归约项目,存在移进-归约冲突,因此所给文法不 是 LR(0)文法。在 I2、I8 中:Follow(s) 0,1= # 0,1=所以在 I2 、I8 中的移进-归约冲突可以由 Follow 集解决,所以 G 是 SLR(1)文法。 构造的 SLR(1)分析表如下:题目 2 的 SLR(1)分析表状

    5、态(State)ActionGoto 0 1 #S L B012345678S4 S5acc S6 S4 S5 r2 r4 r4 r4 r4 r5 r5 r5 r5 r6 r6 r6 r6S4 S5r3 r3 r3 r3S4 S5 r11 2 3.7.8 3.7题目 2 对输入串 101.110#的分析过程状态栈(state stack)文法符号栈剩余输入串(input left)动作(action)00 50 30 20 2 40 2 70 20 2 50 2 70 20 2 60 2 6 50 2 6 30 2 6 80 2 6 8 50 2 6 8 70 2 6 80 2 6 8 40

    6、2 6 8 70 1#1#B#L#L0#LB#L#L1#LB#L#L.#L.1#L.B#L.L#L.L1#L.LB#L.L#L.L0#L.LB#S101.110#.01.110#.01.110#.01.110#.1.110#.1.110#.1.110#.110#.110#.110#.110#.10#.10#.10#.0#.0#.0#.#.#.#.ShiftReduce by :B 1Reduce by :S LB ShiftReduce by :B 0Reduce by :S LB ShiftReduce by :B 1Reduce by :S LB ShiftShiftReduce by :

    7、B 1Reduce by :S B ShiftReduce by :B 1Reduce by :S LB ShiftReduce by :B 0Reduce by :S L.L分析成功,说明输入串 101.110 是题目 2 文法的句子。第3题 考虑文法 S A S | bA S A | a(1)构造文法的 LR(0)项目集规范族及相应的 DFA。(2)如果把每一个 LR(0)项目看成一个状态,并从每一个形如 B X的状态出发画一 条标记为 X 的箭弧刀状态 B X,而且从每一个形如 B A的状态出发画标 记为的箭弧到所有形如 A 的状态。这样就得到了一个 NFA。说明这个 NFA 与(a)

    8、中的 DFA 是等价的。(3)构造文法的 SLR 分析表。(4)对于输入串 bab,给出 SLR 分析器所作出的动作。 (5)构造文法的 LR(1)分析表和 LALR 分析表。答案: (1)令拓广文法 G为(0) S S (1)S A S (2)S b (3)A S A (4)A a其 LR(0)项目集规范族及识别该文法活前缀的 DFA 如下图所示: FOLLOW(S)=#,a,bFOLLOW(A)=a,bLR(0)项目:(2)显然,对所得的 NFA 求闭包,即得上面的 LR(0)项目集,即 DFA 中的状态。故此 NFA与(a)中 DFA 是等价的。(3)文法的 SLR 分析表如下:状态ac

    9、tiongotoab#SA0S4S3121S4S3acc652S4S3723r2r2r24r4r45S4/ r3S3/r3726S4S3657S4 / r1S3 / r1r165因为 I5 中:FOLLOW(A)a,bI7 中:FOLLOW(S)a,b 所以,该文法不是 SLR(1)文法。或者:从分析表中可看出存在歧义,所以不是该文法 SLR(1)文法。 注意:不是 SLR(1)文法就不能构造 SLR(1)分析表,也不能作分析过程。(4)对于输入串 bab,SLR 分析器所作出的动作如下:步骤状态栈符号栈当前字符剩余字符串动作(1)0#bab#移进(2)03#bab#归约 Sb(3)01#Sa

    10、b#移进(4)014#Sab#归约 Aa(5)015#SAb#归约 ASA(6)02#Ab#移进(7)023#Ab#归约 Sb(8)027#AS#归约 SAS(9)01#S#接受(在第 5 个动作产生歧义)(5)LR(1)项目集族为: I0 :S S, # S AS, #S b, #S SA, a / bA a, a / bI1 : S S,# A SA, a / bA a, a / bA SA, a / bS AS, a / bS b, a / bI2 : S AS, # S b, #S AS, #A SA, a / bA a, a / bI3 : S b, #I4 : A a, a / b

    11、I5 : A SA, a / bS AS, a / b S AS, a / b S b, a/ bA SA, a / bA a, a / bI6 : A SA,a/bA SA, a / bA a, a / bS AS, a / bS b, a / bI7: S b, a / bI8 : S AS, #A SA, a / bA SA, a / bA a, a / bS AS, a / bS b, a / bI9 :S AS, # S AS, # S b, #S SA, a / bA a, a / bI10 :S AS, a/bA SA, a/bA S A, a/b A a, a / b S b,

    12、 a/bS AS, a / bI11 :S AS, a/bS b, a/bS AS, a / bA S A, a/bA a, a / bI12 :S SA, a/b S AS, a/b S b, a/bS AS, a / bA S A, a/bA a, a / bI5 状态集中存在“归约移进”冲突,故无法构造 LR(1)分析表,因而也就无 法构造 LALR 分析表。注意:其实是可以构造的,这个题目出得不太严格。因为书上的定义是:根据这种文 法构造的 LR(1)分析表不含多重定义时,称 这样的分析表为 LR(1)分析表,能用 LR(1) 分析表的分析器称为 LR(1)分析器(规范的 LR 分析器

    13、),能构造的 LR(1)分析表的文法 称为 LR(1)文法。教材习题:(1)列出这个文法的所有 LR(0)项目(2)按(1)列出的项目构造识别这个文法活前缀的 NFA,把这个 NFA 确定化为 DFA,说明 这个 DFA 的所有状态全体构成这个文法的 LR(0)规范族(3)这个文法是 SLR 的吗?若是,构造出它的 SLR 分析表(4)这个文法是 LALR 或 LR(1)的吗?答:(1)令拓广文法 G为0 S S1 S A S2 S b3 A S A4 A a其 LR(0)项目:(2) 识别这个文法活前缀的 NFA 如上图所示: 确定化为 DFA 如下图所示:(3)因为 I5 中:FOLLOW

    14、(A)a,bI7 中:FOLLOW(S)a,b 所以,该文法不是 SLR(1)文法。(4)LR(1)项目集族为: I0 :S S, # S AS, #S b, #S SA, a / bA a, a / bI1 : S S,# A SA, a / bA a, a / bA SA, a / bS AS, a / bS b, a / bI2 : S AS, #S b, #S AS, #A SA, a / bA a, a / bI3 : S b, #I4 : A a, a / bI5 : A SA, a / bS AS, a / b S AS, a / b S b, a/ bA SA, a / bA

    15、a, a / bI6 : A SA,a/bA SA, a / bA a, a / bS AS, a / bS b, a / bI7: S b, a / bI8 : S AS, #A SA, a / bA SA, a / bA a, a / bS AS, a / bS b, a / bI9 :S AS, # S AS, # S b, #S SA, a / bA a, a / bI10 :S AS, a/bA SA, a/bA S A, a/bA a, a / bS b, a/bS AS, a / bI11 :S AS, a/bS b, a/bS AS, a / bA S A, a/bA a, a

    16、 / bI12 :S SA, a/b S AS, a/b S b, a/bS AS, a / bA S A, a/bA a, a / b因为 I5 状态集中存在“归约移进”冲突,所以不是 LR(1)文法,也不是 LALR 文法。第6题 文法 G=(U,T,S,a,b,c,d,e,P,S) 其中 P 为:SUTa|Tb TS|Sc|d UUS|e(1) 判断 G 是 LR(0),SLR(1),LALR(1)还是 LR(1),说明理由。 (2) 构造相应的分析表。答案: 文法:SUTa|Tb TS|Sc|d UUS|e拓广文法为 G,增加产生式 SS 若产生式排序为:0 S S1 S UTa2 S

    17、 Tb3 T S4 T Sc5 T d6 U US7 U e由产生式知:First (S ) = d,e First (S ) = d,e First (U ) = e First (T ) = d,eFollow(S ) = #Follow(S ) = a,b,c,d,e,# Follow(U ) = d,eFollow(T ) = a,bG的 LR(0)项目集族及识别活前缀的 DFA 如下图所示:在 I1 中:S S.为接受项目,T S. 为归约项目,T S.c 为移进项目,存在接受-归约和移进-归 约冲突,因此所给文法不是 LR(0)文法。在 I1 中:Follow(S) Follow(

    18、T)= # a ,b= Follow(T) c= a ,b c=在 I8 中:Follow(U) Follow(T) c=d,e a ,b c=所以在 I1 中的接受-归约和移进-归约冲突与 I8 中的移进-归约和归约-归约冲突可以由 Follow 集解决,所以 G 是 SLR(1)文法。构造的 SLR(1)分析表如下:状态(State)ActionGotoabcde#SUT0S5S41231r3r3S6Acc2S5S48273S94r7r75r5r56r4r47S10S98r3r3S6r6r69r2r2r2r2r2r210r1r1r1r1r1r1第8题 证明文法: SA$ ABaBb|DbD

    19、a BD是 LR(1)但不是 SLR(1)。(其中$相当于#)答案: 文法:ABaBb|DbDaBD拓广文法为 G,增加产生式 SA 若产生式排序为:0 SA1 A BaBb2 A DbDa3 B 4 D 由产生式知:First (S ) = a,bFirst (A ) = a,bFirst (B ) = First (D ) = Follow(S ) = # Follow(A ) = # Follow(B ) = a,b Follow(D ) = a,bG的 LR(1)项目集族及识别活前缀的 DFA 如下图所示:在 I0 中:B .,a 和 T .,b 为归约项目,但它们的搜索符不同,若当前

    20、输入符为 a 时用产生式 B 归约,为 b 时用产生式 D 归约,所以该文法是 LR(1)文法。 若不看搜索符,在 I0 中项目 B .和 T .为归约-归约冲突,而Follow(B ) Follow(D ) = a,b a,b,冲突不能用 Follow 集解决,所以该文法 不是 SLR(1)文法。构造的 LR(1)分析表如下: 题目 4 的 LR(1)分析表StateActionGotoa . b . #A B D0123456789r3 r4.AccS4.S5 r3 r4. S8S9. r1 r21 2 3.67第 16题 给定文法:Sdo S or S|do S|S;S|act (1)

    21、构造识别该文法活前缀的 DFA。(2) 该文法是 LR(0)吗?是 SLR(1)吗?说明理由。(3) 若对一些终结符的优先级以及算符的结合规则规定如下:a) or 优先性大于 do;b) ;服从左结合;c) ;优先性大于 do ;d) ;优先性大于 or ;请构造该文法的 LR 分析表,并说明 LR(0)项目集中是否存在冲突和冲突如何解决的。 答案:首先化简文法,用 d 代替 do;用 o 代替 or;用 a 代替 act;文法可写成: SdSoS|dS|S;S|a拓广文法为 G,增加产生式 SS 若产生式排序为:0 S S1 S dSoS2 S dS3 S S;S4 S a由产生式知:Fir

    22、st (S ) = d,a First (S ) = d,a Follow(S ) = # Follow(S ) = o,;,#(1)识别该文法活前缀的 DFA 如下图。(2) 该文法不是 LR(0)也不是 SLR(1)因为:在 I5、I6、和 I8 中存在移进-归约冲突,因此所给文法不是 LR(0)文法。 又由于 Follow(S ) = o, ; ,#在 I6、和 I8 中:Follow(S ) ; =o, ; ,# ; =; 在 I5 中:Follow(S ) ; , o =o , ; ,# ; , o =; , o 所以该文法也不是 SLR(1) 文法。此外很容易证明所给文法是二义性的

    23、, SSdSoSddSoSSSdSddSoS 因此该文法不可能满足 LR 文法。(3) 若对一些终结符的优先级以及算符的结合规则规定如下:a) or 优先性大于 do;b) ;服从左结合;c) ;优先性大于 do ;d) ;优先性大于 or ;则:在 I5 中:“or 和;优先性都大于 do”,所以遇输入符 o 和; 移进;遇#号归约。 在 I6 中:“; 号服从左结合”,所以遇输入符属于 Follow(S )的都应归约。在 I8 中:“; 号优先性大于 do ”, 所以遇输入符为;号 移进;遇 o 和#号归约。 此外,在 I1 中:接受和移进可以不看成冲突,因为接受只有遇#号。 由以上分析,所有存在的移进-归约冲突可用规定的终结符优先级以及算符的结合规则解决, 所构造的 LR 分析表如下:状态(State)ActionGotodo;a#S0S2S311S4Acc2S2S353r4r4r44S2S365S7S4r26r3r3r37S2S388r1r4r1附加题问题 1:试判别如下文法是否 LR(0)或 SLR(1)文法:a) 文法 GE: E E + T TT (E) id id E 其中 E,T 为非终结符,其余符号为终结符b) 文法 GS: S Ab ABcA aA aB b其中 S,A,B 为非终结符,其余符号为终结符答案:a) 增加产


    注意事项

    本文(第07章 LR 分析.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开