编译原理(第3版)习题精选与解析(第三章部分解析)

内容

3ư17给出接受文法S→(L)|aL→L,S|S的活前缀的一个DFA。答首先将文法进行如下拓广,其中S′是拓广文法的开始符号。S′→SS→(L)|aL→L,S|S接受该文法活前缀的一个DFA的状态转换图见图3ư5,开始状态是I0,所有的状态都是接受状态。图3ư5识别文法活前缀的DFA分析文法活前缀是LR分析的一个重要概念,接受文法活前缀的DFA是构造LR分析表过程中的重要一步。一些同学在构造LR分析表时会画这样的状态转换图,但是却未理解这是接受文法活前缀的DFA。构造SLR(1)分析表、规范LR(1)分析表和LALR(1)分析表时都需要先构造这样的DFA,由于用SLR(1)方法得到的DFA的状态数最少[实际上这个DFA就是用LR(0)方法构造的DFA],因此用SLR(1)方法。3ư18一个文法如下:S→(S)13
S→a请给出该文法中对活前缀(((有效的LR(1)项目。答该文法中对活前缀(((有效的LR(1)项目如下:S→(ưS),)S→ư(S),)S→ưa,)分析构造识别该文法活前缀的DFA时,实际上只要画出三个LR(1)项目集就可以看出结果了,这三个项目集见图3ư6。图3ư6识别文法活前缀的三个项目集3ư19接受文法S→Aa|bAc|dc|bdaA→d活前缀的DFA见图3ư7。请根据这个DFA来构造该文法的SLR(1)分析表,并说明该文法为什么不是SLR(1)文法。图3ư7识别文法活前缀的DFA答分析表见表3ư4,注意FOLLOW(A)={a,c}。因为有两处有移进-归约冲突,所以该文法不是SLR(1)文法。23
表3ư4为3ư19题的文法构造的分析表状态动作转移abcd$SA0s3s4121acc2s53s764r5s8,r55r16s97s10,r58r39r210r43ư20证明文法S→AaAb|BbBaA→εB→ε是LL(1)文法,但不是SLR(1)文法。答先证明它是LL(1)文法。因为仅非终结符S有两个不同的选择,因此只需考察它的两个右部。由于FIRST(AaAb)={a}FIRST(BbBa)={b}它们的交集为空,所以该文法是LL(1)文法。这里不是通过构造SLR(1)分析表,而是通过简单的分析来判断该文法不是SLR(1)。根据该文法,不管对什么句子,在面临第一个符号时进

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值