(1)简述编译程序与翻译程序、汇编程序的联系与区别。
翻译程序是指把高级语言源程序翻译成机器语言源程序(目标代码)的软件。
翻译程序有两种:一种是编译程序,它将高级语言源程序一次性全部翻译成目标程序,每次执行程序时,只要执行目标程序。
另一种是解释程序,它的执行过程是翻译一句执行一句,并且不会生成目标程序。
编译程序是先完整编译后运行的程序,如C、C++等;解释程序是一句一句翻译且边翻译边执行的程序,如JavaScript、Python等。
汇编程序也是一种语言翻译程序,它把汇编语言源程序翻译成机器语言程序。
编译程序与汇编程序的区别:如果源语言是诸如C、C++、Java等“高级语言”,而目标语言是诸如汇编语言或机器语言之类的“低级语言”,这样的一个翻译程序称为编译程序。
如果源语言是汇编语言,而目标语言是机器语言,这样的一个翻译程序称为汇编程序。
(2)编译过程包括哪几个主要阶段及每个阶段的主要功能。
①词法分析 任务:输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词。
单词:是高级语言中有实在意义的最小语法单位,它由字符构成。
词法分析依照词法规则,识别出正确的单词,转换成统一规格,备用。
描述词法规则的有效工具是正规式和有限自动机。
②语法分析
任务:根据语言的语法规则,把单词流组成各类语法单位,如:短语、句子、过程、程序
语法规则:语言的规则,又称为文法;规定单词如何构成短语、语句、过程和程序。
语法规则通常用上下文无关文法描述。
语法分析有两种方法:推导(Derive)和规约(Reduce)
语法分析过程也可以用一棵倒着的树来表示,这棵树叫做分析树
③语义分析
任务:检查程序的语义正确性,以保证程序各部分能有意义的结合在一起,为以后的代码生成阶段收集类型信息
语义分析阶段的重要工作:类型检查
④ 中间代码生成
任务:根据语义规则产生一种介于源语言与目标代码之间的一种中间代码。
中间代码是不依赖于机器但是又便于生成依赖于机器的目标代码的一种结构简单、含义明确的记号系统
中间代码形式
逆波兰式、 四元式、三元式
⑤ 代码优化
任务:对前面产生的中间代码进行加工变换,以期在最后阶段能产生更为高效的目标代码。
原则:等价变换
主要方面:公共子表达式的提取、合并已知量、删除无用语句、循环优化等
⑥ 目标代码生成
任务:把经过优化的中间代码转化成特定 机器上的低级语言代码
目标代码的形式
绝对指令代码:可立即执行的目标代码。
汇编指令代码:汇编语言程序,需要通过汇编程序汇编后才能运行。
可重定位指令代码:先将各目标模块连接起来,确定变量、常数在主存中的位置,装入主存后才能成为可以运行的绝对指令代码。
(3)简述解释程序与编译程序的区别。
解释程序(为高级服务)直接执行源程序或源程序的内部形式,一般是读一句源程序,翻译一句,执行一句,不产生目标代码,如BASIC解释程序。
编译程序(为高级服务)是将高级语言书写的源程序翻译成与之等价的低级语言的目标程序。
编译程序与解释程序最大的区别之一在于前者生成目标代码,而后者不生成;
前者产生的目标代码的执行速度比解释程序的执行速度要快;
后者人机交互好,适于初学者使用。用COBOL、FORTRAN等语言编写的程序考虑到执行速度一般都是编译执行。
————————————————
版权声明:本文为CNBLOGS博主蔡云桓的文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
本文链接:https://i.cnblogs.com/EditPosts.aspx?postid=11451992
借鉴链接:https://blog.csdn.net/IWGoo/article/details/85528562
https://www.cnblogs.com/zdcaolei/archive/2012/04/04/2432094.html
https://zhidao.baidu.com/question/202834348.html