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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

编译原理第二版答案张素琴.docx

1、编译原理第二版答案张素琴编译原理第二版答案张素琴【篇一:清华大学编译原理第二版课后习答案】ss=txt第 1 章引论 第 1 题 解释下列术语: (1)编译程序 (2)源程序 (3)目标程序 (4)编译程序的前端 (5)后端 (6)遍 答案: (1) 编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语 言,则此翻译程序称为编译程序。 (2) 源程序:源语言编写的程序称为源程序。 (3) 目标程序:目标语言书写的程序称为目标程序。 (4) 编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与 目标机无关。通常前端包括词法分析、语法分析、语义分析和中间代码

2、生成这些阶 段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符 号表管理等工作。 (5) 后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段, 即目标代码生成,以及相关出错处理和符号表操作。 (6) 遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。 第 2 题 一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程 序的总体结构图。 答案: 一个典型的编译程序通常包含 8 个组成部分,它们是词法分析程序、语法分析程序、语 义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和 错误处理

3、程序。其各部分的主要功能简述如下。 词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。 语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。 语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表 中。 中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式 的中间语言代码,如三元式或四元式。 编译原理课后习题答案第一章 目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。 表格管理程序:负责建立、填写和查找等一系列表格工作。表格的作用是记录源程序的 各类信息和编译各阶段的进展情况,编译的每个阶段所需信

4、息多数都从表格中读取,产生的 中间结果都记录在相应的表格中。可以说整个编译过程就是造表、查表的工作过程。需要指 出的是,这里的“表格管理程序”并不意味着它就是一个独立的表格管理模块,而是指编译 程序具有的表格管理功能。错误处理程序:处理和校正源程序中存在的词法、语法和语义错误。当编译程序发现源 程序中的错误时,错误处理程序负责报告出错的位置和错误性质等信息,同时对发现的错误 进行适当的校正(修复),目的是使编译程序能够继续向下进行分析和处理。 注意:如果问编译程序有哪些主要构成成分,只要回答六部分就可以。如果搞不清楚, 就回答八部分。 第 3 题 何谓翻译程序、编译程序和解释程序?它们三者之间

5、有何种关系? 答案: 翻译程序是指将用某种语言编写的程序转换成另一种语言形式的程序的程序,如编译程 序和汇编程序等。 编译程序是把用高级语言编写的源程序转换(加工)成与之等价的另一种用低级语言编 写的目标程序的翻译程序。 编译原理课后习题答案第一章 是哪种方式,其加工结果都是源程序的执行结果。目前很多解释程序采取上述两种方式的综 合实现方案,即先把源程序翻译成较容易解释执行的某种中间代码程序,然后集中解释执行 中间代码程序,最后得到运行结果。 广义上讲,编译程序和解释程序都属于翻译程序,但它们的翻译方式不同,解释程序是 边翻译(解释)边执行,不产生目标代码,输出源程序的运行结果。而编译程序只负

6、责把源 程序翻译成目标程序,输出与源程序等价的目标程序,而目标程序的执行任务由操作系统来 完成,即只翻译不执行。 第 4 题 对下列错误信息,请指出可能是编译的哪个阶段(词法分析、语法分析、语义分析、 代码生成)报告的。 (1) else 没有匹配的if (2) 数组下标越界 (3) 使用的函数没有定义 (4) 在数中出现非数字字符 答案: (1) 语法分析 (2) 语义分析 (3) 语法分析 (4) 词法分析 第 5 题 编译程序大致有哪几种开发技术? 答案: (1)自编译:用某一高级语言书写其本身的编译程序。 (2)交叉编译:a 机器上的编译程序能产生b 机器上的目标代码。(3)自展:首先

7、确定一个非常简单的核心语言l0,用机器语言或汇编语言书写出它的编译 程序t0,再把语言l0 扩充到l1,此时l0 ? l1 ,并用l0 编写l1 的编译程序t1,再把语 言l1 扩充为l2,有l1 l2 ,并用l1 编写l2 的编译程序t2,?,如此逐步扩展下去, 好似滚雪球一样,直到我们所要求的编译程序。 ? (4)移植:将 a 机器上的某高级语言的编译程序搬到 b 机器上运行。 编译原理课后习题答案第一章 第题 计算机执行用高级语言编写的程序有哪些途径?它们之间的主要区别是什么? 答案: 计算机执行用高级语言编写的程序主要途径有两种,即解释与编译。 像basic 之类的语言,属于解释型的高

8、级语言。它们的特点是计算机并不事先对高级语 言进行全盘翻译,将其变为机器代码,而是每读入一条高级语句,就用解释器将其翻译为一 条机器代码,予以执行,然后再读入下一条高级语句,翻译为机器代码,再执行,如此反复。 总而言之,是边翻译边执行。 像c,pascal 之类的语言,属于编译型的高级语言。它们的特点是计算机事先对高级语 言进行全盘翻译,将其全部变为机器代码,再统一执行,即先翻译,后执行。从速度上看, 编译型的高级语言比解释型的高级语言更快。 编译原理课后习题答案第二章 第 2 章 pl/0 编译程序的实现 第 1 题 pl/0 语言允许过程嵌套定义和递归调用,试问它的编译程序如何解决运行时的

9、存储管 理。 答案: pl/0 语言允许过程嵌套定义和递归调用,它的编译程序在运行时采用了栈式动态存储 管理。(数组code 存放的只读目标程序,它在运行时不改变。)运行时的数据区s 是由 解释程序定义的一维整型数组,解释执行时对数据空间s 的管理遵循后进先出规则,当每 个过程(包括主程序)被调用时,才分配数据空间,退出过程时,则所分配的数据空间被释放。 应用动态链和静态链的方式分别解决递归调用和非局部变量的引用问题。 第 2 题 若pl/0 编译程序运行时的存储分配策略采用栈式动态分配,并用动态链和静态链的方 式分别解决递归调用和非局部变量的引用问题,试写出下列程序执行到赋值语句b=10 时

10、 运行栈的布局示意图。 var x,y; procedure p; var a; procedure q; var b; begin (q) b=10; end (q); procedure s;var c,d; procedure r; var e,f; begin (r) call q; end (r); begin (s) call r; end (s); begin (p) call s; 编译原理课后习题答案第二章 end (p); begin (main) call p; end (main). 答案: 程序执行到赋值语句 b=10 时运行栈的布局示意图为: 第 3 题 写出题 2

11、 中当程序编译到r 的过程体时的名字表table 的内容。 name kind level/val adr size 答案: 题 2 中当程序编译到r 的过程体时的名字表table 的内容为: name kind level/val adr size x variable 0 dx y variable 0 dx+1 p procedure 0 过程p 的入口(待填) 5 编译原理课后习题答案第二章 a variable 1 dx q procedure 1 过程q 的入口4 s procedure 1 过程s 的入口(待填) 5 c variable 2 dx d variable 2 dx

12、 r procedure 2 过程r 的入口5 e variable 3 dx f variable 3 dx+1 注意:q 和s 是并列的过程,所以q 定义的变量b 被覆盖。 第 4 题 指出栈顶指针t,最新活动记录基地址指针b,动态链指针dl,静态链指针sl 与返 回地址ra 的用途。 答案: 栈顶指针 t,最新活动记录基地址指针b,动态链指针dl,静态链指针sl 与返回地址ra 的用途说明如下: t: 栈顶寄存器t 指出了当前栈中最新分配的单元(t 也是数组s 的下标)。 b:基址寄存器,指向每个过程被调用时,在数据区s 中给它分配的数据段起始 地址, 也称基地址。 sl: 静态链,指向

13、定义该过程的直接外过程(或主程序)运行时最新数据段的基地址, 用以引用非局部(包围它的过程)变量时,寻找该变量的地址。 dl: 动态链,指向调用该过程前正在运行过程的数据段基地址,用以过程执行结束释 放数据空间时,恢复调用该过程前运行栈的状态。 ra: 返回地址,记录调用该过程时目标程序的断点,即调用过程指令的下一条指令的 地址,用以过程执行结束后返回调用过程时的下一条指令继续执行。 在每个过程被调用时在栈顶分配3 个联系单元,用以存放sl,dl, ra。 第 5 题 pl/0 编译程序所产生的目标代码是一种假想栈式计算机的汇编语言,请说明该汇编语 言中下列指令各自的功能和所完成的操作。 ()

14、 int 0 a () opr 0 0 () cal l a 答案: pl/0 编译程序所产生的目标代码中有3 条非常重要的特殊指令,这3 条_指令在code 中 的位置和功能以及所完成的操作说明如下: 编译原理课后习题答案第二章 int 0 a 在过程目标程序的入口处,开辟a 个单元的数据段。a 为局部变量的个数+3。 opr 0 0 在过程目标程序的出口处,释放数据段(退栈),恢复调用该过程前正在运行的过程的 数据段基址寄存器b 和栈顶寄存器t 的值,并将返回地址送到指令地址寄存器p 中,以使 调用前的程序从断点开始继续执行。 cal l a 调用过程,完成填写静态链、动态链、返回地址,给

15、出被调用过程的基地址值,送入基 址寄存器b 中,目标程序的入口地址a 的值送指令地址寄存器p 中,使指令从a 开始执行。 第 6 题 给出对 pl/0 语言作如下功能扩充时的语法图和ebnf 的语法描述。 (1) 扩充条件语句的功能使其为: if条件then语句else语句 (2) 扩充repeat 语句为: repeat语句;语句until条件 答案: 对 pl/0 语言作如下功能扩充时的语法图和ebnf 的语法描述如下: (1) 扩充条件语句的语法图为: ebnf 的语法描述为: 条件语句:= if条件then语句else语句 (2) 扩充repeat 语句的语法图为: ebnf 的语法描

16、述为: 重复语句:= repeat语句;语句until条件【篇二:编译原理复习题2(第二版张素琴吕映芝蒋维杜戴桂兰编著)】|e+t|e-t t?f|t*f|t/ff?(e)|i 1) 2) 给出i+i*i的最左推导和最右推导; 给出i-i-i的语法树。 e=e+t=e+t*f e+t*f是文法ge的一个句型 此句型相对于e的短语有:e+t*f;相对于t的短语有t*f, 直接短语为:t*f;。 句柄为:t*f 2、设有文法gs:(12分) 1)请给出句子(a,(a,a)的最左,最右推导 2)给出(a,(a,a)的语法树 3、下面的文法生成的是以x和y为操作数、二元运算符+、*和-为运算符的前缀表

17、达式: e?+ee|*ee|-ee|x|y 1) 给出串+*-xyxy的最左推导和最右推导; 2) 给出+*-xyxy的语法树。 4、将下图中的自动机确定化并最小化。 5、将下图中的自动机确定化并最小化。 6、设有dfa m=(k,f,s,z) 其中: k=0,1,2,3 =a,bs=0 z=3 f为: f(0,a)=1 f(1,b)=1 f(0,b)=2f(2,a)=1 f(1,a)=3 f(2,b)=3 试画出其状态转换矩阵和状态转换图。 7、将下图中的自动机确定化。 8、考虑下面文法g1:(18分) s?a|?|(t) t?t,s|s1) 消去g1的左递归; 2) 经改写后的文法是否是l

18、l(1)的?给出它的预测分析表(要求写出详细过程,应先 求出每个非终结符的first和follow集合)。 9、构造正规式1(0|1)101相应的自动机 * 10、考虑下面文法g1: e?e+t|t t?t*f|f f?i|(e) 3) 消去g1的左递归; 4) 经改写后的文法是否是ll(1)的? (要求写出详细过程,应先求出改写后的每个非 终结符的first和follow集合)。 11、对于文法g(s): s?(l)|as|a l?l,s|s 1)画出句型(s,(a)的语法树。 2)写出上述句型的所有短语、直接短语、句柄和素短语。 12、对于文法g(s): s?(l)|as|a l?l,s|

19、s 1)画出句型(s,(a)的语法树。 2)写出上述句型的所有短语、直接短语、句柄和素短语。 13、对于文法g(e): e?t|e+tt?f|t*f f?(e)|i|j|k 1)画出句型i*j+k的语法树。 2)写出上述句型的所有短语、直接短语、句柄和素短语。 14、设文法g(s): s?(a)|a a?a+s|s 1)构造各非终结符的firstvt集合和lastvt集合。 2)构造优先关系表。 15、设文法g(s): s?(a)|a a?a+s|s 1)构造各非终结符的firstvt集合和lastvt集合。 2)构造优先关系表。 16、设文法g(s): s?(a)|a a?a+s|s 1)构

20、造各非终结符的firstvt集合和lastvt集合。 2)构造优先关系表。【篇三:编译原理课后习题答案(清华大学_张素琴)复习例题】、lr(1)、lalr(1)等。但要求至少要按照作业题的范围复习。) 一 选择题 1编译的各阶段工作都涉及 。 a词法分析 b表格管理 c语法分析 d语义分析 2 型文法也称为正规文法。 a 0 b 1c 2 d 3 3 文法不是ll(1)的。 a递归b右递归c2型d含有公共左因子的 4文法ee+e|e*e|i的句子i*i+i*i有 棵不同的语法树。 a 1 b 3c 5 d 7 5文法 saas|abc 定义的语言是 。 aa2kbc|k0 ca2k-1bc|k

21、0 bakbc|k0 dakakbc|k0 6若b为非终结符,则 a?.b? 为 。 a移进项目 b归约项目 c接受项目 d待约项目 7同心集合并可能会产生新的 冲突。 a二义 b移进/移进 c移进/归约 d归约/归约 8代码优化时所依据的是 。 a语法规则 b词法规则 c等价变换规则d语义规则 9表达式a-(-b)*c的逆波兰表示(为单目减)为 。 aa-bc* babc*- cab- dabc-* 10过程的display表是用于存取过程的 。 a非局部变量 b嵌套层次 c返回地址 d入口地址二 填空题 1词法分析阶段的任务式从左到右扫描 字符流 ,从而逐个识别 一个个的单词 。 2对于文

22、法ge:et|e+t tf|t*f fpf|pp(e)|i,句型t+t*f+i的句柄是 。 3最右推导的逆过程称为 规范归约 ,也称为 最 左归约 。 4符号表的每一项是由名字栏和 两个栏目组成。在目标代码生成阶段,符号表是的依据。 三 判断题(认为正确的填“t”,错的填“f”) 【】1同心集的合并有可能产生“归约/归约”冲突。 【】2一个文法所有句子的集合构成该文法定义的语言。 【】3非终结符可以有综合属性,但不能有继承属性。 【】4逆波兰表示法表示表达式时无需使用括号。 【】5一个有穷自动机有且只有一个终态。 【】6若过程p第k次被调用,则p的display表中就有 k+1个元素。 四 解

23、答题 1给定文法g和句型(t+f)*i+t, g: ee+t | ttt*f | ff(e) | i (1)画出句型的语法树; (2)写出句型的全部短语、简单短语和句柄。 解:(略) 2设有文法g:ss+s|s*s|i|(s)。 (1)对于输入串i+i*i 给出一个最左推导; (2)该文法是否是二义性文法?请证明你的结论。 解:(1)i+i*i的最左推导: s = s+s = i+s = i+s*s = i+i*s = i+i*i (2)该文法是二义性的。因为对于句子i+i*i可以画出两棵 语法树(语法树略)。 3给出语言ambmcn|m1,n0的上下文无关文法(2型)。解: g: sab|a

24、 aaab|ab bcb|c 4给出语言akbmcn|k,m,n1的正规文法(3型)。 解: g: aaa|ab bbb|bc ccc|c 5将文法g改写成等价的正规文法(3型)。 g: sdab aaa|a bbb|b 解: g: sda aaa|ab bbb|b 6构造一文法产生任意长的a,b串,使得 |a|b|2|a| 其中,“|a|”和“|b|”分别表示串中的字符a和b的个数。 解:b的个数在a的个数和其2倍之间,串的结构形如asbs和 bsas,其中b为1或2个b。故得文法 bb|bb 7设有字母表a,b上的正规式r=(ab|a)*。 (1)构造r的相应有限自动机; 解: (2)构造

25、r的相应确定有限自动机; (3)构造r的相应最小确定有限自动机; 解:对(2)得到的dfa化简,合并状态0和2 为状态2: + (4)构造与r等价的正规文法 解:令状态1和2分别对应非终结符b和a 可化简为: 8写出如图所示的自动机描述的语言的正规式 解:abb*|abb*aa*b|aaa*b 9写出在a,b上,不以a开头,但以aa结尾的字符串集合的正规式(并构造与之等价的最简dfa)。 解:依题意,“不以a开头”,则必以b开头,又要“以aa结尾”, 故正规式为:b(a|b)*aa (构造与之等价的最简dfa,此略) 10写一个ll(1)文法g,使其语言是 l(g)= ambnc2n | m=

26、0,n0 并证明文法是ll(1)。 解:文法g(s):s ? as | e e ? be e? ecc | cc 故文法为ll(1)的 11将文法g改写成等价的ll(1)文法,并构造预测分析表。 t+at|+a (编写递归下降子程序) 解:消除左递归后的文法g: sats|*ats t+at|+a 提取左公因子得文法g:sats|*ats t+at select(sats)=a select(s*ats)=* select(s*ats)=* select(t+at)=+ select(tt)=first(t) =+ 所以该文法是ll(1)文法。 12对文法gs: s asb | p p bpc | bqc q qa | a (递归下降子程序,略)

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

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