编译原理概论 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%。

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

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

原文地址:https://www.cnblogs.com/longlog/p/11457928.html

时间: 2024-10-09 00:36:12

编译原理概论 01 190904的相关文章

编译原理--概论

编译器:源程序-->目标程序,离线offline 解释器:处理程序的一种程序, 输出的是结果,在线online(把结果打印出来了) 编译原理集中体现了计算机科学的很多核心思想:算法,数据结构,软件工程 编译器本身就是很重要的研究领域. 编译器也可以把功能分为前端,后端.前端可以分为词法分析,语法分析.后端指令生成的部分,指令优化的部分. 汇编代码--->汇编器-->连接器 词法分析 主要作用 字符流--词法分析切分为->记号流 C语言,字符流所在的集合是ASCII  JAVA的话是

Atitit.编译原理与概论

编译原理 词法分析 Ast构建,语法分析 语意分析 6 数据结构  1. ? 记号 2. ? 语法树 3. ? 符号表 4. ? 常数表 5. ? 中间代码 1. ? 临时文件 7 其他问题  2. ? 分析和综合 3. ? 前端和后端 4. ? 遍 5. ? 语言定义和编译器 1.3 程序设计语言的发展历程1.3.1 走向高级程序设计语言1.3.2 对编译器的影响1.3.3 1.3节的练习1.4 构建一个编译器的相关科学1.4.1 编译器设计和实现中的建模1.4.2 代码优化的科学1.5 编译

编译原理--01 复习大纲(清华大学出版社第3版)

前言 目前以手中这本清华大学出版社出版的编译原理(第3版,张素琴等编著)作为复习总结,因为考试都是大题,一部分概念会被忽略.所有内容都需要通过举例和推导来帮助加深理解,优先为过几天的考试服务.该文实现了教材中那些特别复杂的推导符号,并且这几天会加紧持续更新. 第2章 文法和语言 符号和符号串 空符号串用\(\varepsilon\)表示,长度为0 若 \(\Sigma=\{0,1\}\) ,则 \(\Sigma^*=\{\varepsilon,0,1,00,11,000,001,...\}\),

编译原理 (预处理>编译>汇编>链接)(转)

一般高级语言程序编译的过程:预处理.编译.汇编.链接.gcc在后台实际上也经历了这几个过程,我们可以通过-v参数查看它的编译细节,如果想看某个具体的编译过程,则可以分别使用-E,-S,-c和 -O,对应的后台工具则分别为cpp,cc1,as,ld.下面我们将逐步分析这几个过程以及相关的内容,诸如语法检查.代码调试.汇编语言等. 1.预处理 预处理是C语言程序从源代码变成可执行程序的第一步,主要是C语言编译器对各种预处理命令进行处理,包括头文件的包含.宏定义的扩展.条件编译的选择等.打印出预处理之

实况:《编译原理》期末考试一天复习

大学的编译原理课程是讲解如何设计编译器的.我要做的,是在一学期没怎么听课的条件下,用我对算法的理解能力,和互联网以及身边同学的帮助,来在不足一天的时间中复习完考试所需的所有知识. 我手上有两份可用资料: 复习课上记录的,老师对考试知识点的回顾. 同学总结的,会考的算法的列表. 而现在的时间是晚上6:33,我刚刚看完大约四分之一,明天下午1:10就考试了.由于时间紧迫,我必须对自己的任务有个计划,不能浪费一点时间.这个计划会花去我大概半个小时的时间,但它是一定要做的,否则我一定复习不完. 考试涉及

编译原理123

1.编译原理就是什么? 个人理解,编译就是像翻译一样,将一种语言翻译成另一种语言,编译就是将高级语言或汇编语言翻译成电脑能识别的二进制机器语言,编译原理就是讲解这 个编译的过程.内容包括语言和文法.词法分析.语法分析.语法制导翻译.中间代码生成.存储管理.代码优化和目标代码生成. 编译原理是计算机专业设置的一门重要的专业课程.虽然只有少数人从事编译方面的工作,但是这门课在理论.技术.方法上都对学生提供了系统而有效的训练,有 利于提高软件人员的素质和能力. 2.学习编译原理有什么好处? 学习编译原

编译原理的理解

编译原理内容包括语言和文法.词法分析.语法分析.语法制导翻译.中间代码生成.存储管理.代码优化和目标代码生成.大一点的应用可以做到一定的技术先进性,从而让你在本行业站稳脚跟:分析和分解用户输入的SQL语句,理解是否有害和是否有SQL注入等.如果不学,对于不是不是本行业的人来说就没损失,如果是本行业的专业人士,不学只会令自己的编译理解更慢.

编译原理

1.编译原理是什么? (1)就是对程序语言进行翻译: (2)介绍编译程序构造的原理和基本方法: (3)从本质上讲是一个算法问题: 2.学习编译原理有什么好处? (1)接触一些新的算法,如,贪心算法,图论算法等: (2)学习一些新的思想,如,有限状态机,递归下降等: (3)多了一项技能: 3.不学有什么损失? (1)将来出社会可能比较难混: (2)不学好这门课程期末可能不及格: (3)有学不一定有用,不学肯定没用: 4.如何学习编译原理? (1)上课跟上老师的步伐,课前预习,课后复习: (2)多从

编译原理第二次作业 编译器任务总结

在学习了编译原理后我开始明白编译的工作原理了,也更了解编译语言的结构.明白了编译器的编写中需要注意的各项问题,更了解了编译器的编译过程为我之后的编程提供了一些必不可少的经验,还是我的改错能力有所提高.因为写编译器使我在编程发生错误后能及时了解程序在编译过程中的原理是什么,这样我就能知道我的程序是何处的问题. 而且在学习编译原理的时候,学到了一些比较难理解的东西,通过实践不断地消化书本上的理论,最终就会有一个雏形出现.而且在编写的过程时候有一些不知道如何解决的问题时,我就会和组员讨论以得出一个可行