第一次作业——编译原理概述
翻译程序是指把高级语言源程序翻译成机器语言源程序(目标代码)的软件。
翻译程序有两种:一种是编译程序,它将高级语言源程序一次性全部翻译成目标程序,每次执行程序时,只要执行目标程序。另一种是解释程序,它的执行过程是翻译一句执行一句,并且不会生成目标程序。
编译程序是先完整编译后运行的程序,如C、C++等;解释程序是一句一句翻译且边翻译边执行的程序,如JavaScript、Python等。附C语言编译链接过程:
汇编程序也是一种语言翻译程序,它把汇编语言源程序翻译成机器语言程序。
编译程序与汇编程序的区别:如果源语言是诸如C、C++、Java等“高级语言”,而目标语言是诸如汇编语言或机器语言之类的“低级语言”,这样的一个翻译程序称为编译程序。如果源语言是汇编语言,而目标语言是机器语言,这样的一个翻译程序称为汇编程序。
2.编译过程包括哪几个主要阶段及每个阶段的主要功能。
答:编译过程通常分为词法分析、语法分析、中间代码生成、代码优化和目标代码生成六个主要阶段。各个阶段的主要功能如下:
词法分析阶段:读入源程序,对构成源程序的字符流进行扫描和分解,识别出一个个单词,并表示成计算机内部的形式。
语法分析阶段:在词法分析的基础上,讲单词序列分解成各类语法短语,如“表达式”、“语句”、“程序”等,确定整个输入串是否构成语法上正确的程序。
语义分析阶段:审查源程序有误语义错误,为代码生成阶段收集类型信息。
中间代码:讲源程序翻译成一种复杂性介于源程序和目标程序的内部形式。
代码优化:对前阶段产生的中间代码进行等价交换,目的是使将来生成的目标代码更为高效。
目标代码生成:把中间代码变换成特点机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。
3.简述解释程序与编译程序的区别。
编译方式把源程序的执行过程严格地分成两大步:编译和运行。即先把源程序全部翻译成目标代码,然后再运行此目标代码,获执行结果。解释方式则不然。它是按照源程序中语句的动态顺序,直接地逐句进行分析解释,并立即执行。所以,解释程序是这样一种程序,它能够按照源程序中语句的动态顺序,逐句地分析解释并执行,直至源程序结束。
4.了解新开源的华为方舟编译器(https://www.openarkcompiler.cn/home),理解它的基本思想与采用的技术路线,谈谈它对安卓软件生态会有什么影响。
多语言联合编译和跨语言调用开销是影响Android性能开销的最核心原因之一,目前Android应用市场里面Top级别的APP 95%以上都是由多种开发语言来实现的。举例说明,这些APP的逻辑部分是Java代码,但是为了增强app应用的安全性、可靠性、兼容性,开发者会用效率更高的C语言写库,供Java来调用。直接导致的结果是应用真正运行起来的时候,一定会有Java和C语言之间调用问题,就会形成额外的性能开销。而方舟编译器在不同语言代码的开发环境中,就编译成一套可执行文件,在运行环境中高效执行。
而方舟编译器在开发环境中就可以完成全部代码的编译,无论业务逻辑是Java写的还是C语言写的,不需要再次编译,手机安装应用程序后无需依赖虚拟机资源,即可全速运行程序,带来效率上的极大提升,消除了影响性能的虚拟机机制。EUMI 9.1仅仅对系统组件System Server应用了华为方舟编译器后,就带来了系统操作流畅度提升24%,系统响应性能提升44%的收益。华为方舟编译器提供了全新的系统及应用的编译和运行机制,从动态编译变为静态编译,就是直接将高级语言直接编译成机器码,消除了虚拟机动态编译的额外开销,实现了开发和运行效率的兼容并举。