了解编译原理(2019.9.4)
1)简述编译程序与翻译程序、汇编程序的联系与区别。
编译程序是现代计算机系统的基本组成部分之一,编译程序把高级编程语言(如Java、C#)编写的程序转换为可执行的机器语言。
翻译程序是一种系统程序,它将计算机编程语言编写的程序翻译成另外一种计算机语言的一般来说等价的程序
汇编程序是一个翻译程序,它把汇编指令转换为可执行的机器语言。
编译程序和汇编程序都是一个翻译程序,可将目标指令或语言转化为可执行的机器语言,而翻译程序是一种系统程序。
2)编译过程包括哪几个主要阶段及每个阶段的主要功能。
编译过程可划分成词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成6个阶段。
第一个阶段:词法分析
这个阶段的任务是从左到右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词。
第二个阶段:语法分析
语法分析的任务是在词法分析的基础上将单词序列分解成各类语法短语,如“程序”、“语句”、“表达式”等。
第三个阶段:语义分析
该阶段任务是审查源程序有无语义错误,为代码生成阶段收集类型信息。
第四个阶段:中间代码生成
在进行了上述的语法分析和语义分析阶段的工作之后,有的编译程序将源程序变成一种内部表示形式,这种内部表示形式叫做中间代码或者中间语言。
第五个阶段:代码优化
这一阶段的任务是对前一阶段产生的中间代码进行变换或进行改造,目的是生成的目标代码更为高效,即省时间和省空间。
第六个阶段:目标代码生成
这一阶段的任务是把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。
3)简述解释程序与编译程序的区别。
编译程序是整体编译完了,再一次性执行。而编译程序是一边解释一边执行。
解释程序直接执行源程序或源程序的内部形式,一般是第一句源程序,翻译一句,执行一句,不产生目标代码。编译程序是将高级语言书写的源程序翻译成与之等价的目标程序。
编译程序与解释程序区别在于前者生成目标代码,而后者不生成。且编译程序的执行速度快于解释程序。
4)了解新开源的华为方舟编译器(https://www.openarkcompiler.cn/home),理解并谈谈它的基本思想与采用的技术路线,以及它对安卓软件生态会有什么影响
华为方舟编译器是华为公司专门为软件厂商研发的统一编程平台,包含编译器、工具链、运行时等关键部件。该编译器支持多种编程语言、多种芯片平台的联合编译与运行,能够有效解决安卓程序“边解释边执行”的低效率问题。华为方舟编译器采取了静态编译的方式,是首个取代了安卓虚拟机模式的静态编译器。我认为它将会提高安卓软件的速度。