ImageVerifierCode 换一换
格式:DOCX , 页数:35 ,大小:119.25KB ,
资源ID:5572266      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5572266.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(编译原理龙书答案.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

编译原理龙书答案.docx

1、编译原理龙书答案编译原理龙书答案 作者: 日期: 第四章部分习题解答Aho:编译原理技术与工具书中习题(Aho)4.1 考虑文法 S ( L ) | a L L, S | Sa) 列出终结符、非终结符和开始符号解:终结符:(、)、a、,非终结符:S、L开始符号:Sb) 给出下列句子的语法树i) (a, a)ii) (a, (a, a)iii) (a, (a, a), (a, a) c) 构造b)中句子的最左推导i) S(L)(L, S) (S, S) (a, S) (a, a)ii) S(L)(L, S) (S, S) (a, S) (a, (L) (a, (L, S) (a, (S, S)

2、(a, (a, S) (a, (a, a)iii) S(L)(L, S) (S, S) (a, S) (a, (L) (a, (L, S) (a, (S, S) (a, (L), S) (a, (L, S), S) (a, (S, S), S) (a, (a, S), S) (a, (a, a), S) (a, (a, a), (L) (a, (a, a), (L, S) (a, (a, a), (S, S) (a, (a, a), (a, S) (a, (a, a), (a, a)d) 构造b)中句子的最右推导i) S(L)(L, S) (L, a) (S, a) (a, a)ii) S(L

3、)(L, S) (L, (L) (L, (L, S) (L, (L, a) (L, (S, a) (L, (a, a) (S, (a, a) (a, (a, a)iii) S(L)(L, S) (L, (L) (L, (L, S) (L, (L, (L) (L, (L, (L, S) (L, (L, (L, a) (L, (L, (S, a) (L, (L, (a, a) (L, (S, (a, a) (L, (L), (a, a) (L, (L, S), (a, a) (L, (L, a), (a, a) (L, (S, a), (a, a) (L, (a, a), (S, S) (S, (

4、a, a), (a, a) (a, (a, a), (a, a)e) 该文法产生的语言是什么解:设该文法产生语言(符号串集合)L,则 L = (A1, A2, , An) | n是任意正整数,Ai=a,或AiL,i是1n之间的整数(Aho)4.2考虑文法SaSbS | bSaS | a) 为句子构造两个不同的最左推导,以证明它是二义性的SaSbSabSabaSbSababSababSaSbSabSaSbSabaSbSababSababb) 构造abab对应的最右推导SaSbSaSbaSbSaSbaSbaSbabababSaSbSaSbabSaSbabSabababc) 构造abab对应语法树d

5、) 该文法产生什么样的语言?解:生成的语言:a、b个数相等的a、b串的集合(Aho)4.3 考虑文法bexpr bexpr or bterm | btermbterm bterm and bfactor | bfactorbfactor not bfactor | ( bexpr ) | true | falsea) 试为句子not ( true or false) 构造分析树解:b) 试证明该文法产生所有布尔表达式证明:一、首先证明文法产生的所有符号串都是布尔表达式变换命题形式以bexpr、bterm、bfactor开始的推导得到的所有符号串都是布尔表达式最短的推导过程得到true、fals

6、e,显然成立假定对步数小于n的推导命题都成立考虑步数等于n 的推导,其开始推导步骤必为以下情况之一bexpr bexpr or btermbexpr btermbterm bterm and bfactorbexpr bfactorbfactor not bfactorbfactor ( bexpr )而后继推导的步数显然n,因此由归纳假设,第二步句型中的NT推导出的串均为布尔表达式,这些布尔表达式经过or、and、not运算或加括号,得到的仍是布尔表达式因此命题一得证。二、证明所有布尔表达式均可由文法生成变换命题所有析取式均可由bexpr推导出来,所有合取式均可由bterm(bexpr)推导

7、出来,所有对子布尔表达式施加not运算或加括号或简单true、false都可由bfactor(bexpr、bterm)推导出来最简单的布尔表达式true和false显然成立假定对长度小于n的布尔表达式,均可由文法推导出来考虑长度等于n的布尔表达式B,显然,B只能是以下形式之一B = B1 or B2B = B1 and B2B = not B1B = ( B1 )以上几种情况,B1、B2的长度均小于n对于情况1:B为析取式,B1可为析取式也可为合取式,B2为合取式,根据假设可由bexpr合bterm推导出来,显然可构造推导过程,由bexpr推导出B其他情况类似,命题二得证综合一、二,可知文法产

8、生的语言就是布尔表达式c) (Aho)4.4考虑文法RR | R | RR | R* | (R) | a | bc) 构造等价的非二义性文法RR | A | AAA B | BBB* | CC( R ) | a | b(Aho)4.5下面if-then-else文法试图消除空悬else的二义性,证明它仍是二义性的stmtif expr then stmt | matched_stmtmatched_stmtif expr then matched_stmt else stmt | other解:用S、M、E表示stmt、matched_stmt和expr,用i、t、e、o表示if、then、e

9、lse和other则句子i E t i E t o e i E t o e o对应两个最左推导:Si E t Si E t Mi E t i E t M e Si E t i E t o e Si E t i E t o e Mi E t i E t o e i E t M e Si E t i E t o e i E t o e S i E t i E t o e i E t o e Mi E t i E t o e i E t o e oSMi E t M e Si E t i E t M e S e S i E t i E t o e S e S i E t i E t o e i E

10、t S e S i E t i E t o e i E t M e S i E t i E t o e i E t o e S i E t i E t o e i E t o e M i E t i E t o e i E t o e o因此文法是二义性文法直接构造比较困难,可从SLR分析表的构造角度考虑,LR(0)项目集规范族中,项目I8=Mi E t M e S, SM,有移进/归约冲突,这就是是二义性所在。显然,存在句型.i E t M e S.和.i E t S e S.,当M位于栈顶时,产生移进/归约冲突。按此思路,构造形如. i E t S e S.的句型即可(Aho)4.6 为下

11、列语言设计上下文无关文法。哪些语言是正规式?a) 满足这样条件的二进制串:每个0之后都紧跟着至少一个1S0 A | 1 S | A1 S正规式:(1 | 01)*b) 0和1个数相等的二进制串S0 S 1 S | 1 S 0 S | d) 不含011子串的二进制串S0 A | 1 S | A0 A | 1 B | B0 A | 正规式:1*(0 | 01)*e) 具有形式xy的二进制串,xyS A | B | A B | B AA D A D | 0B D B D | 1D 0 | 1A、B分别表示中心符号为0、1的长度为奇数的二进制串将AB串接,长度为偶数,将它从中间分为长度相等的两部分,x

12、、y虽然A、B长度可能不一样,但容易得到,A的中心0在x中的位置,与B的中心1在y中的位置是相同的,因此xyBA的情况类似f) 形如xx的0、1串解:此语言无法用上下文无关文法描述(Aho)4.11 对习题4.1中文法a) 消除左递归S( L ) | aLS LL, S L | b) 构造预测分析表,对4.1(b)中句子,给出预测分析器的运行过程FIRST(S) = (, a )FIRST(L) = (, a FIRST(L) = , FOLLOW(S) = , ), $FOLLOW(L) = ) FOLLOW(L) = ) 预测分析表:a(),$SSaS( L )LLS LLS LLLL,

13、S L(a, a)的分析过程栈输入输出$S(a, a)$) L (a, a)$S( L )$) La, a)$LS L$) L Sa, a)$Sa$) L aa, a)$) L, a)$L, S L$) L S , a)$) L Sa)$Sa$) L aa)$) L)$L$)$其他两个句子的分析过程类似(Aho)4.13 下面文法产生除外所有长度为偶数的a的串 S a S a | a aa)试为该文法构造一个带回溯的递归下降语法分析器,对S的两个候选式首先考虑aSa。证明:S所对应的过程可以成功分析2、4、8个a的串,但6个a的串不行。解:aa的分析过程,其中表示匹配成功,表示匹配失败,匹配失

14、败则尝试下个候选式aaaa分析过程:aaaaaa分析过程:aaaaaaaa分析过程:b)此语法分析器能识别什么样的语言?解:由a)的解可以看出,2N个a的串分析过程中,步骤如下1) 产生2N+1个S的语法树,对第2N+1个S进行扩展时输入缓冲已空,失败2) 对第2N个S尝试候选式aa,第二个a匹配失败3) 对第2N-1个S尝试候选式aa,左边N-1个a匹配,右边最后一个a匹配,倒数第二个a失败4) 对第2N-2个S尝试候选式aa,左边N-2个a匹配,右边最后一个a和倒数第二个a匹配,倒数第三个a失败5) 对第2N-4个S尝试候选式aa,左边N-4个a匹配,右边最后一个a倒数第四个a匹配,倒数第

15、五个a失败6) 对第2N-8个S尝试候选式aa,最后正确识别的情况必然是:对第N个S尝试aa,左边N个a和右边N个a恰与输入匹配显然,可以正确识别的符号串的N满足2N 1 1 2 4 - = NN=2i(Aho)4.25 试给出图460中的优先关系表对应的优先级函数解:有向图如下优先级函数为a(),$f20220g33010(Aho)4.26 对习题4.1中文法,利用讲义中给出的算法计算终结符之间的优先关系解: S ( L ) | a L L, S | S由于S ( L ),因此 ( )S ( L ),而LL , S,LS( L ),LSa因此 ( , ,( (,( a;, ),) ),a )

16、由于L L, S,而LL , S,LS( L ),LSa,因此 , ,,) ,,a ,而S( L ),Sa,因此 , ( ,, a非终结符与$优先关系的计算方法:如果存在Sa,或SQa,则$ a,若存在Sa,或SaQ,则a $因此,$ (,$ a,) $,a $算符优先关系表为:a(),$a(),$(Aho)4.27 试给下列文法构造算符优先关系a) 练习4.2中文法解:SaSbS | bSaS | 由SaSbS可得ab由SbSaS可得ba由SaSbS,和SbSaS可得ab、bb、ab,和SaSbS可得aa、ba、bb由SbSaS,和SbSaS可得bb、ab、aa,和SaSbS可得ba、aa、

17、aa文法不是算符优先文法,二义性文法,很自然b) 练习4.3中文法bexpr bexpr or bterm | btermbterm bterm and bfactor | bfactorbfactor not bfactor | ( bexpr ) | true | false解:无论分析语法含义,还是利用4.26算法计算,均可得到truefalsenotandor()$truefalsenotandor()$(Aho)4.30 一个文法称为Greibach范式(GNF)文法,如果它无产生式,且每个产生式(S除外)均形如Aa,其中,a是终结符,是非终结符串,也可能为空。a) 试编写一个算法,

18、将给定文法转换为Greibach范式解:算法步骤如下1 先将文法消除左递归、消除产生式、删除无用符号,然后对每个非终结符A的每个产生式,执行22 若产生式右部以终结符开始,则略过,考虑其他产生式,否则产生式必为AA1的形式,A1为A的NT,a为语法符号串,对它执行以下操作i. 将A1的所有产生式的右部替换A1,产生新的关于A的产生式ii. 对于这些产生式,若右部以T开始,略过,不予处理,考虑那些以NT开始的产生式,反复执行i、iiiii. 由于文法的NT个数是有限的(设为k),且已消除左递归,则最多k个步骤后,处理完毕,此时,A的产生式右部应该均以T开始。否则,若某个产生式右部以NT开始,表明

19、A无论经过怎样的推导过程,均不可能得到一个以终结符开始的串,当然也就不可能得到一个终结符串,这显然是一个错误的文法,矛盾。这样,A的某个产生式处理完毕,其右部均以T开始。转向2,继续考虑其他产生式,所有产生式处理完毕,则转向33 此时,每个产生式均为Aa的形成,a为NT,为语法符号串,若中包含T,则进行如下处理i. 假定中包含k个T,则产生式形为Aa0a11akk,其中ai为T,i为NT串或ii. 引入k个新的NT A1、A2、Ak,和k个新的产生式A1a11A2A2a22A3Ak-1ak-1k-1AkAkakk而将原产生式改为Aa0A14 经过2、3处理,所有产生式必然满足Greibach范

20、式的格式b) 将你的算法应用到表达式文法4-10上解:文法410消除左递归、消除产生式后得到ET E | TE+ T E | + TTF T | FT* F T | * FF( E ) | id将每个产生式转换为以T开始的形式,得到E( E ) T E | id T E | ( E ) E | id E | ( E ) T | id T | ( E ) | idE+ T E | + TT( E ) T | id T | ( E ) | idT* F T | * FF( E ) | id将每个产生式右部转换为T NT*的形式,最后结果为:E( E E| id T E | ( E E | id E

21、 | ( E | id T | ( E E | idE) T EE) EE) TE)E+ T E | + TT( E E | id T | ( E E | idT* F T | * FF( E E | id(Aho)4.33 考虑文法 SAS | b ASA | aa) 构造此文法的LR(0)项目集规范族解:I0 = SS, SAS, Sb, ASA, Aa goto(I0, S) = SS, ASA, ASA, Aa, SAS, Sb = I1goto(I0, A) = SAS, SAS, Sb, ASA, Aa = I2goto(I0, a) = Aa = I3goto(I0, b) =

22、Sb = I4goto(I1, S) = ASA, ASA, Aa, SAS, Sb = I5goto(I1, A) = ASA, SAS, SAS, Sb, ASA, Aa = I6goto(I1, a) = I3, goto(I1, b) = I4goto(I2, S) = SAS, ASA, ASA, Aa, SAS, Sb = I7goto(I2, A) = I2, goto(I2, a) = I3, goto(I2, b) = I4goto(I5, S) = I5, goto(I5, A) = I6, goto(I5, a) = I3, goto(I5, b) = I4goto(I6

23、, S) = I7, goto(I6, A) = I2, goto(I6, a) = I3, goto(I6, b) = I4goto(I7, S) = I5, goto(I7, A) = I6, goto(I7, a) = I3, goto(I7, b) = I4c) 构造SLR分析表解:FIRST(S) = FIRST(A) = a, bFOLLOW(S) = $, a, b FOLLOW(A) = a, bSLR分析表为:actiongotoab$SA0s3s4121s3s4acc562s3s4723r4r44r2r2r25s3s4566s3/r3s4/r3727s3/r1s4/r1r1

24、56SLR分析表冲突,分析过程有多种可能路径,选择其中一种导致正确结果的即可。d) 对输入串abab,给出SLR分析器运行过程栈输入动作0abab$移进0a3bab$归约Aa0A2bab$移进0A2b4ab$归约Sb0A2S7ab$归约SAS0S1ab$移进0S1a3b$归约Aa0S1A6b$归约ASA0A2b$移进0A2b4$归约Sb0A2S7$归约SAS0S1$接受e) 构造规范LR分析表解:I0 = SS, $, SAS, $/a/b, Sb, $/a/b, ASA, a/b, Aa, a/b goto(I0, S) = SS, $, ASA, a/b, ASA, a/b, Aa, a/

25、b, SAS, a/b, Sb, a/b = I1goto(I0, A) = SAS, $/a/b , SAS, $/a/b, Sb, $/a/b, ASA, a/b, Aa, a/b = I2goto(I0, a) = Aa, a/b = I3, goto(I0, b) = Sb, $/a/b = I4goto(I1, S) = ASA, a/b, ASA, a/b, Aa, a/b, SAS, a/b, Sb, a/b = I5goto(I1, A) = ASA, a/b, SAS, a/b, SAS, a/b, Sb, a/b, ASA, a/b, Aa, a/b = I6goto(I1, a) = I3, goto(I1, b) = Sb, a/b = I7goto(I2, S) = SAS, $/a/b, ASA, a/b, ASA, a/b, Aa, a/b, SAS, a/b, Sb, a/b = I8goto(I2, A) = I2, goto(I2, a) = I3, goto(I2, b) = I4goto(I5, S) = I5, goto(I5, A) = I6, goto(I5, a) = I3,

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1