作业一——编译原理概述

1)简述编译程序与翻译程序、汇编程序的联系与区别。

  编译程序是先完整编译后运行的程序,如C、C++等;

  翻译程序是指把高级语言源程序翻译成机器语言源程序(目标代码)的软件。

  汇编程序也是一种语言翻译程序,它把汇编语言源程序翻译成机器语言程序。

  编译程序与汇编程序的区别:如果源语言是诸如C、C++、Java等“高级语言”,而目标语言是诸如汇编语言或机器语言之类的“低级语言”,这样的一个翻译程序称为编译程序。如果源语言是汇编语言,而目标语言是机器语言,这样的一个翻译程序称为汇编程序。

2)编译过程包括哪几个主要阶段及每个阶段的主要功能。

  编译过程划分成词法分析、语法分析、语义分析、中间代码生成、代码优化生成、中间代码生成、代码优化和目标代码生成6个阶段。

  每个阶段的主要功能如下:

  a. 词法分析

  主要功能:从左到右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词(一些场合下也称单词符号或符号)。

  b. 语法分析

  主要功能:在词法分析的基础上将单词序列分解成各类语法短语,如“程序”、“语句”、“表达式”等。

  c. 语义分析

  主要功能:进行类型审查,审查每个算符是否具有语言规范允许的运算对象,当不符合语言规范时,编译程序应报告错误。

  d. 中间代码

  主要功能:根据语义规则产生一种介于源语言与目标代码之间的一种中间代码。

  e. 代码优化

  主要功能:对前一阶段产生的中间代码进行变换或进行改造,目的是使生成的目标代码更为高效,即省时间和省空间。

  f. 目标代码生成

  主要功能:把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。

3)简述解释程序与编译程序的区别。

  解释程序接受某高级语言的一个语言输入,进行解释并控制计算机执行,马上得到这句的执行结果,然后再接受下一句。没有区分编译与执行,执行程序时不产生中间代码,直接给出运行结果。

  编译程序专指将高级语言转换为低级语言。源程序经过编译程序之后生成目标程序,再得到执行结果。

4)了解新开源的华为方舟编译器(https://www.openarkcompiler.cn/home),理解它的基本思想与采用的技术路线,谈谈它对安卓软件生态会有什么影响。

  基本思想:

  方舟编译器则是在开发的时候就已经完成了静态编译,不需要依赖手机本身编译。同时,方舟编译器还提供了更高效的内存回收机制。由于不需要经过虚拟机,应用在运行过程中不需要暂停,同时随时回收内存,而不是将垃圾堆在一起回收。方舟编译器对代码进行优化,为程序带来更高的性能。并且其学习和使用成本低。

  采用的技术路线:

  支持多语言联合优化的编译,在面对采用混合语言开发的安卓应用,方舟编译器可以在开发环境中编译成统一的流程,通过统一的程序表示和优化来执行,效率更高。

  对安卓生态的影响:

  华为方舟编译器成为了安卓生态圈中企业的领头羊,在新技术的开发方面已经远远超过了国内外其他电子科技企业。华为方舟编译器的开源,将凭其一己之力带动整个安卓生态圈的发展,为企业之间的竞争、人才的发展、安卓生态的成长起推波助澜的作用。无论是手机厂商,还是应用开发者都可以使用方舟编译器来优化应用的性能。安卓生态圈被华为方舟编译器打破了原有的禁锢,突破手机机能限制,根据不同的应用采用不同的编译和优化算法,提高了应用执行效率,为广大的用户提供更加愉快的体验。

 

参考资料:http://www.leikeji.com/article/25904

     https://www.cnblogs.com/zdcaolei/archive/2012/04/04/2432094.html

     https://blog.csdn.net/IWGoo/article/details/85528562

posted @ 2019-09-03 11:08  Mr-Lin  阅读(...)  评论(... 编辑 收藏