zoukankan      html  css  js  c++  java
  • 编译原理概论 01 190904

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

    1.简单来讲,编译程序 是语言处理程序,将汇编语言(即我们所知的C,C++等)这一类的源程序进行输入,然后通过翻译并再转换之后,最后产出机器语言的程序,简单来讲就是一个属于计算机语言的翻译过程。编译程序工作时,先词法分析和语法分析,然后代码优化,存储分配和代码生成,从而得到目标程序。

    2.翻译程序:而我们也可以得知,翻译程序是指把高级语言源程序翻译成机器语言源程序的软件,都是直接代码执行的范畴。

    3.汇编程序:汇编程序的话,和以上的一样,就是将汇编语言程序进行转化,转化为机器语言程序。

    了解三个程序的基本概况后,我们可以看出联系和区别:

    联系:三者最后都会编译成机器语言,而且都可以和转化完全。都是语言翻译程序。

    区别:编译程序一般来讲,源语言是诸如C、C++、Java等,而目标语言是诸如汇编语言或机器语言之类的。

              汇编程序,一般是使用汇编语言,所以源语言是汇编语言,而目标语言是机器语言

              翻译程序,不产生目标程序文件,逐字逐句地去翻译,并不是想前两者直接对程序进行完整的翻译。

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

    编译过程包括词法分析,语法分析,词义分析与中间代码产生,优化,最终代码生成共5个主要阶段。

    1、词法分析:

        输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词(亦称单词符号或简称符号),如begin、end、if、for、while等基本字,标识符、常数、运算符和界符。

    2.语法分析:

        在词法分析的基础上,根据语言的语法规则,把单词符号串分解成各类语法单位(语法范畴),如“短语”、“句子”、“程序段”和“程序”等。通过语法分析,确定整个输入串是否构成语法上正确的“程序”。语法分析所依循的是语言的语法规则。语法规则通常用上下文无关文法描述。词法分析是一种线性分析,而语法分析是一种层次结构分析。

    3.词义分析与中间代码产生:

    对语法分析所识别出的各类语法范畴,分析其含义,并进行初步翻译(产生中间代码)。这里分为两个工作,对每种语法范畴进行语义i安插。当语义正确之后,就会进行中间代码的解释。

    5、最终代码生成:

       把中间代码(或经优化处理之后)变换成特定机器上的低级语言代码。实现最终的翻译,它的工作十分有赖于硬件系统结构以及机器指令的含义。

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

    解释程序直接解释执行源程序,或者将源程序翻译成某种中间表示形式后再加以执行;

    编译程序将源程序翻译成目标语言程序,然后在计算机上运行目标程序。

    区别:编译程序运行的是经过源程序转化之后的目标程序,编译过后的源程序,编译过后编译程序都不可以与目标程序共同执行,解释程序和源程序则是要与程序一起运行,解释程序控制运行程序。

    解释程序翻译源程序时不生成独立的目标程序,而编译程序则将源程序翻译成独立的目标程序。

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

             对于华为方舟编译器,目前肯定处于观望态度的人居多,对于我们广大群总来讲,手机是否卡顿作为区分安卓系统和iOS系统的重要标准。不过,近两年,随着安卓方面不断收回系统操作权限以及加强对生态环境的控制,安卓旗舰的手机运行流畅度已经大幅提升。而华为更是带来了方舟编译器,号称可以让安卓机获得到不输iPhone的流畅度,从此告别卡顿。

       我认为他的基本思想是迎合硬件发展趋势,软件生态发展诉求所进行的创新,将同一应用中的不同语言代码联合编译、联合优化,消除语言间的性能“鸿沟”,降低开发者的优化成本,这样我们就可以降低机器性能的高功率使用,提高机器的使用寿命。根据华为方面给出的数据来看,华为手机在使用方舟编译器后,系统操作流畅度获得了24%的提升,系统响应速度则提升44%,第三方应用操作流畅度提升60%。

    当前大部分安卓应用都涉及不同开发语言,不同语言形成的代码需要在运行态中进行协同从而产生额外消耗。而方舟编译器是业界首个多语言联合优化的编译器,开发者在开发环境中可以一次性将多语言统一编译为一套机器码,运行时无需产生跨语言带来的额外消耗,并可以进行跨语言的联合优化,提升运行效率。

            可以看出,如果方舟编译器的使用以及开发遍布开来,肯定会给予安卓软件生态带来更多的活力以及资源。

  • 相关阅读:
    从零搭建Spring Boot脚手架(6):整合Redis作为缓存
    MyBatis初级实战之三:springboot集成druid
    table布局
    【JVM之内存与垃圾回收篇】直接内存
    【JVM之内存与垃圾回收篇】对象实例化内存布局与访问定位
    【JUnit测试】总结
    【JVM之内存与垃圾回收篇】方法区
    【JVM之内存与垃圾回收篇】堆
    【JVM之内存与垃圾回收篇】本地方法栈
    【JVM之内存与垃圾回收篇】本地方法接口
  • 原文地址:https://www.cnblogs.com/longlog/p/11457928.html
Copyright © 2011-2022 走看看