01 了解编译原理 09/04

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

  汇编程序是一个翻译程序,它把汇编语言程序编译成机器语言程序。

  编译程序是一个语言处理程序,它把一个高级语言翻译成某个机器的汇编语言程序或二进制代码程序,这个二进制代码程序在机器上运行以生成结果。它的基本任务是将源语言程序翻译成等价的目标语言程序。

  翻译程序是指把高级语言源程序翻译成机器语言源程序(目标代码)的软件。

  区别与联系:汇编程序是属于面向机器的低级语言,编译程序是属于面向应用的高级语言。编译程序和汇编程序都属于翻译程序。

 

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

  一共分为6个阶段。

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

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

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

  4、中间代码生成:编译程序将源程序变成一种内部表示形式。

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

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

 

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

  1、编译程序是先翻译再执行,解释程序是边翻译边执行。

  2、编译程序产生目标程序,解释程序不产生目标程序。

  3、编译程序适合对通用性,重复性,高效性有要求的系统,相比解释程序更具灵活性。

 

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

  方舟编译器提供了表示(IR)和语言编译实现,同时搭配编译器其他二进制组件,实现Java程序到aarch64汇编指令的编译过程。开发者可基于开源代码+二进制,编译构建出编译器工具链,尝试对Java程序进行编译。

  方舟编译器并不仅仅是从高级语言到机器码进行了“万能翻译”,而是成为一个编译运行系统。这个编译系统不仅实现了词法分析、语法分析、代码生成等功能,更在IR设计和算法优化方面进行了深入地尝试,它可供开发者,在开发环境一次性将高级语言编译为机器码,可以让手机安装的APP运行效率明显提升。

  相比于安卓原生系统,方舟编译器可以明显提升系统运行效率。值得一提的是,华为在国内EMUI在历代版本的更新当中,除了Linux的安卓内核外,已逐步把安卓系统的很多部分替代了。方舟编译器也是其中关键步骤之一,取代了安卓原生系统虚拟机的位置。

 

参考文档:

1、华为方舟编译器开源正式上线  https://consumer.huawei.com/cn/press/news/2019/fangzhou-complier-launch/

2、最前线 华为编译器正式开源 https://36kr.com/p/5241961

 

 

posted @ 2019-09-04 11:27  sj!  阅读(207)  评论(0编辑  收藏  举报