- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理 作业标准答案
制作人:李明新 共 NUMPAGES 18页第 PAGE 17页 DATE \@ yy-M-d 14-2-6
第一章 引 言
一、解释下列各词
源语言:编写源程序的语言(基本符号,关键字),各种程序设计语言都可以作为源语言。
源程序: 用接近自然语言(数学语言)的源语言(基本符号,关键字)编写的程序,它是翻译程序处理的对象。
目标程序: 目标程序是源程序经过翻译程序加工最后得到的程序。目标程序
(结果程序)一般可由计算机直接执行。
低级语言:机器语言和汇编语言。
高级语言:是人们根据描述实际问题的需要而设计的一个记号系统。如同自然语言(接近数学语言和工程语言)一样,语言的基本单位是语句,由符号组和一组用来组织它们成为有确定意义的组合规则。
翻译程序: 能够把某一种语言程序(源语言程序)改变成另一种语言程序(目
标语言程序),后者与前者在逻辑上是等价的。其中包括:编译程序,解释程序,汇编程序。
编译程序: 把输入的源程序翻译成等价的目标程序(汇编语言或机器语言),
然后再执行目标程序(先编译后执行),执行翻译工作的程序称为编译程序。
解释程序: 以该语言写的源程序作为输入,但不产生目标程序。按源程序中语句动态顺序逐句的边解释边执行的过程,完成翻译工作的程序称为解释程序。
二、什么叫“遍”?
指对源程序或源程序的中间形式(如单词,中间代码)从头到尾扫描一次,并作相应的加工处理,称为一遍。
三、简述编译程序的基本过程的任务。
编译程序的工作是指从输入源程序开始到输出目标程序为止的整个过程,整个过程可以划分5个阶段。
词法分析:输入源程序,进行词法分析,输出单词符号。
语法分析:在词法分析的基础上,根据语言的语法规则把单词符号串分解成各类语法单位,并判断输入串是否构成语法正确的“程序”。
中间代码生成:按照语义规则把语法分析器归约(或推导)出的语法单位翻译成一定形式的中间代码。
优化:对中间代码进行优化处理。
目标代码生成:把中间代码翻译成目标语言程序。
四、编译程序与解释程序的区别?
编译程序生成目标程序后,再执行目标程序;然而解释程序不生成目标程序,边解释边执行。
五、有人认为编译程序的五个组成部分缺一不可,这种看法正确吗?
编译程序的5个阶段中,词法分析,语法分析,语义分析和代码生成生成是必须完成的。而中间代码生成和代码优化并不是必不可少的。优化的目的是为了提高目标程序的质量,没有这一部分工作,仍然能够得到目标代码、
六、编译程序的分类
目前基本分为:诊断编译程序,优化编译程序,交叉编译程序,可变目标编译程序。
第二章 高级语言及其语法描述
一、P36
6、令文法为
N ? D?ND
D ? 0?1?2???9
= 1 \* GB2 ⑴文法描述的语言L(G)是什么?
= 2 \* GB2 ⑵给出句子34,568的最左推导和最右推导。
解: = 1 \* GB2 ⑴
L(G)={???为可带前导0的正整数}
或L(G)={(0?1?2???9)+ }
或 L(G)={???为数字串}
= 2 \* GB2 ⑵
最左推导:N?ND?DD?3D?34
N?ND?NDD?DDD?5DD?56D?568
最右推导:N?ND?N4?D4?34
N?ND?N8?ND8?N68?D68?568
7、写出一个文法,使其语言是奇数集,且每个奇数是不以0开头。
解:N ? C?AC?ABC
C ? 1?3?5?7?9
A ? 1?2???9
B ? B`?BB`
B` ? 0?A
8、令文法为
E ? T?E+T?E-T
T ? F?T*F?T/F
F ? (E)?i
= 1 \* GB2 ⑴给出i+i*i,i*(i+i)的最左推导和最右推导。
= 2 \* GB2 ⑵给出i+i+i,i+i*i的语法树。
解: = 1 \* GB2 ⑴
最左推导E?E+T?T+T?F+T?i+T?i+T*F?i+F*F?i+i*F?i+i*i
E?T?T*F?F*F?i*F?i*(E)?i*(E+T)?i*(T+T)?i*(F+T)?i*(i+T)
?i*(i+F)?i*(i+i)
最右推导E?E+T?E+T*F?E+T*i?E+F*i?E+i*i?T+i*i?F+i*i?i+i*i
E?T?T*F?T*(E)?T*(E+T)?T*(E+F)?T*(E+i)?T*(T+i)?T*(F+i)
?T*(
文档评论(0)