1. 编译原理概述

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

答:编译程序是一种翻译程序,它把高级语言所写的源程序翻译成等价的机器语言或汇编语言的目标程序。翻译程序把一种语言所写的源程序翻译成与之等价的另一种语言的目标程序。解释程序将源程序作为输入并执行它,边解释边执行。它与编译程序的主要区别在于在解释程序执行的过程中不产生目标程序,而是按照源语言的定义解释执行源程序本身。

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

答:编译过程包括词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成这六个主要阶段。每个阶段的主要功能如下:

词法分析:从左到右一个字符一个字符地输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词。

语法分析:在词法分析的基础上,把单词流组成各类语法单位

语义分析:审查源程序有无语义上的错误,为以后的代码生成阶段收集类型信息。

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

代码优化:对前一阶段产生的中间代码进行变换或进行改造,目的是产生更为高效的目标代码。

目标代码生成:把中间代码转化成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。

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

答:解释程序是一边解释一边执行,最终不生成目标程序。编译程序是整体编译完,然后才一次性执行,最终会生成目标程序。

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

答:方舟编译器是为支持多种编程语言、多种芯片平台的联合编译、运行而设计的统一编程平台。软件开发使用的语言是高级语言,程序在手机上运行需要转换成可以高效执行的机器码,这样的转换过程就是由编译器完成的。当前方舟编译器支持Java/Kotlin程序字节码的前端输入,其它编程语言的支持(如C/C++/JS等)还在规划中,方舟编译器的中间表示(IR)转换器将前端输入转换成方舟IR,并输送给后端的优化器,最终生成二进制文件,二进制文件与编译器运行时库文件链接生成可执行文件,在方舟的运行环境中就可执行该文件。当前的安卓系统使用Java作为编程语言,易于开发,但是不会将代码直接编译成机器语言,程序运行时有相当一部分代码还需要通过手机上的虚拟机临时同步编译,影响程序执行的效率。华为方舟编译器采取了静态编译的方式,是首个取代了安卓虚拟机模式的静态编译器。有效解决安卓程序“边解释边执行”的低效率问题。

 

posted @ 2019-09-03 11:30  linyanli  阅读(384)  评论(0编辑  收藏  举报