编译原理概述

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

  编译就是将源代码文件以字符流的形式进行处理,进行词法和语法的分析,然后通过汇编器将源代码指令转变成汇编指令。

  汇编实际上指把汇编语言代码翻译成目标机器指令。

  翻译是指将一种语言等价转换成另外一种语言,继续传达同样的意思或者功能。

  三者之间都改变了原本代码,但是区别程序的不同也代表着改变的形式不同,编译程序将源代码转变成汇编指令,汇编程序则将编译程序转发成的汇编指令转化成目标机器指令,而编译程序跟汇编程序都属于翻译程序。

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

  编译过程包括以下六个程序:

  1.词法分析:读入程序,扫描、分解和识别构成源程序的字符流和单词;

  2.语法分析:在词法分析的基础上将单词序列分解成各类语法短语;

  3.语义分析:审查源程序有无语义错误,为代码生成阶段收集类型信息;

  4.中间代码生成:通过编译程序将源程序变成中间语言或中间代码;

  5.代码优化:将中间代码进行变换或改造,生成更高效的代码;

  6.目标代码生成:把中间代码变换成特定机器上的汇编指令代码。

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

  编译指将高级语言转化成低级语言,工作效率高,即时间快、空间省;交互性与动态特性差、可移植性差。

  解释指接受高级语言的一句输出,并解释、执行跟得到结果之后再接受下一句,工作效率低,即时间慢、空间费;交互性与动态特性好、可移植性好。

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

  现在的 Android 是 解释执行 + 还算可以的JIT + AOT 的模式。在方舟编译器里面,已经编译好的APK,会通过静态编译的方式先转换成机器码再安装,这其实是AOT,无需麻烦的虚拟机,提升运行速度和效率。并且作为开发者,还可以根据不同的程序特点,选择不同的编译优化方案,不像安卓官方的方式使用统一的虚拟机方案。华为方舟编译器则是利用程序多线程运行的特点。方舟编译器是AOT、中间层、JIT三种模式进行编译,能够大幅度提高安卓软件的安装、运行速度。

原文地址:https://www.cnblogs.com/dengweijiang/p/11452086.html