编译原理第一次作业
1)简述编译程序与翻译程序、汇编程序的联系与区别。
翻译程序是指把高级语言源程序翻译成机器语言源程序的软件。
编译程序是将高级语言源程序一次性全部翻译成目标程序,每次执行程序时,只要执行目标程序。
汇编程序是一种语言翻译程序,它把汇编语言源程序翻译成机器语言程序。
编译程序与汇编程序的区别:如果源语言是诸如C、C++、Java等“高级语言”,而目标语言是诸如汇编语言或机器语言之类的“低级语言”,这样的一个翻译程序称为编译程序。如果源语言是汇编语言,而目标语言是机器语言,这样的一个翻译程序称为汇编程序。
2)编译过程包括哪几个主要阶段及每个阶段的主要功能。
编译过程划分为六个阶段:
1.词法分析:从左到右一个一个字符地读入源程序,对构成源程序地字符流进行扫描和分解,识别出一个个单词。
2.语法分析:在词法分析的基础上将单词序列分解成各类语法短语。这种语法短语也称为语法单位,可表示成语法树。
3.语义分析:审查程序有无语义错误,为代码生成阶段收集类型信息。
4.中间代码生成:在经过语法分析和语义分析阶段的工作后,有的编译程序将源程序变成了一种内部表示形式,这种形式叫做中间语言或中间代码。
5.代码优化:对前一阶段产生的中间代码进行变换或进行改造,目的是使目标代码更为高效。
6.目标代码生成:把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。
3)简述解释程序与编译程序的区别。
解释程序是一种翻译程序,它将源程序作为输入并执行它,边解释边执行。
解释程序与编译程序的主要区别在于在解释程序执行的过程中不产生目标程序,而是按照源语言的定义解释执行源程序本身。
4)了解新开源的华为方舟编译器(https://www.openarkcompiler.cn/home),理解它的基本思想与采用的技术路线,谈谈它对安卓软件生态会有什么影响。
方舟编译器的优势:
- 多语言联合:将同一应用中的不同语言代码联合编译、联合优化,消除语言间的性能“鸿沟”,降低开发者的优化成本。
- 轻量运行时,通过编译器的语言实现能力和优化能力增强,应用运行时的开销更小。
- 软硬件协同:编译器与芯片实现软硬件协同优化,充分发挥硬件能效,应用体验更佳。
- 多平台支持:支持面向多样化的终端设备平台进行编译和运行,根据设备特征提供便捷的开发与部署策略,提高开发效率。
当前的安卓系统使用Java作为编程语言,易于开发,但是不会将代码直接编译成机器语言,程序运行时有相当一部分代码还需要通过手机上的虚拟机临时同步编译,影响程序执行的效率。华为方舟编译器采取了静态编译的方式,是首个取代了安卓虚拟机模式的静态编译器。
华为方舟编译器采用全程执行机器码高效运行程序,架构进一步得到优化,性能也有明显提升。相较与此前流畅度,通过华为方舟编译器编译后的程序系统,操作流畅度提升24%,系统响应速度提升44%,三方应用操作流畅度提升60%。有效解决安卓程序“边解释边执行”的低效率问题