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的安卓内核外,已逐步把安卓系统的很多部分替代了。方舟编译器也是其中关键步骤之一,取代了安卓原生系统虚拟机的位置。

原文地址:https://www.cnblogs.com/jwwzone/p/11457979.html

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

01 了解编译原理 09/04的相关文章

2016/04/26 .net平台的重要组成部分以及.net程序简单的编译原理

.net平台的组成只要有两部分   FCL:框架类库    CLR:公共语言运行时 .net程序简单的编译原理 1.0:使用C#编译器(csc.exe) 将C#源代码编译成程序集+{编译之前:会检查C#源代码是否符合C#的语法规范,如果符合  才会编译成程序集,如果不符合,将会报错,就不会生成程序集了} 程序集: 哈哈  小伙伴  关于程序集的后缀有两种(exe, dll) 需要有.net平台生成的才是 生成程序集的时候最重要的部分是MSIL(微软中间语言),在编译的时候会将C#源代码编译成MS

编译原理--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语言编译器对各种预处理命令进行处理,包括头文件的包含.宏定义的扩展.条件编译的选择等.打印出预处理之

编译原理第六单元习题

获得更多资料欢迎进入我的网站或者 csdn或者博客园 这几篇关于编译原理的文章是,我学习中国科学技术大学<编译原理>时,所做的习题总结.之后会将这门课的所有习题补上,用于给大家参考: 题目要求 在这个题目中,你将完整的实现抽象语法树(包括数据结构的定义.语法树的生成等).首先,请下载我们提供的代码包: http://staff.ustc.edu.cn/~bjhua/mooc/ast.zip 代码的运行方式是: 首先生成语法分析器: $ bison exp.y 然后生成编译器: $ gcc ma

用antlr4来实现《按编译原理的思路设计的一个计算器》中的计算器

上次在公司内部讲<词法分析--使用正则文法>是一次失败的尝试--上午有十几个人在场,下午就只来了四个听众. 本来我还在构思如何来讲"语法分析"的知识呢,但现在看来已不太可能. 这个课程没有预想中的受欢迎,其原因可能是: 1.课程内容相对复杂,听众知识背景与基础差异比较大. 2.授课技巧不够,不能把复杂的知识简单化的呈现给基础稍差一点的人. 针对这两个可能的原因,我要尝试做出以下调整: 1.使用antlr来实现词法和语法的部分. 2.暂时把"编译"过程改为

编译原理学习:TINY语言词法扫描程序实现

最近对解释型程序(类似python或者是linux里的bc计算器)非常感兴趣,就开始学习一下编译原理.今天自己实现了TINY语言的词法扫描程序.大部分参考<编译原理及实践>一书.但是我做了一些小小的改进. 先说一下TINY语言: 1.注释:放在一对大括号内.书上的注释不能嵌套,我做了一点改进,允许嵌套. 2.关键字:read write if end repeat until else 3.类型:只支持整型和布尔型. 4.计算:+ - * / ( ) < = :=,其中:=为赋值运算,=

【我的书】Unity Shader的书 — 目录(2015.09.04更新)

写在前面 感谢所有点进来看的朋友.没错,我目前打算写一本关于Unity Shader的书. 出书的目的有下面几个: 总结我接触Unity Shader以来的历程,给其他人一个借鉴.我非常明白学Shader的艰难,在群里也见了很多人提出的问题.我觉得学习Shader还是一件有规律可循的事情,但问题是中文资料难觅,而大家又不愿意去看英文...这对我有什么好处呢?强迫我对知识进行梳理,对细节问题把握更清楚. 第二个原因你懂的. 关于本书的定位问题: 面向Unity Shader初学者,但要: 有一定的

MYSQL 源代码 编译原理 AST和解析树 代码语法解析

MYSQL 源代码 编译原理 AST和解析树 代码语法解析 http://blog.csdn.net/wfp458113181wfp/article/details/17082355 使用AST树 分类:             antlr              2013-12-02 22:39     255人阅读     评论(0)     收藏     举报 目录(?)[+] 第五章使用AST树中间结果来计算表达式值 创建ASTS 第五章.使用AST树中间结果来计算表达式值 现在我们已

编译原理:实现简单数学公式排版

这是大三下上编译原理时老师要求做的大作业 1.实验具体要求 [题目和测试程序来自 李卫海老师:http://staff.ustc.edu.cn/~whli] 一.         符号集 小写字母a.b.c.d.e.f.g.h.i.j.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z 数字0.1.2.3.4.5.6.7.8.9 特殊符号:\.(.).{.}._.^.$ 分隔符:空格.换行   二.         记号定义 标识符:由字母开始,由字母和数字组成 数字:无符号整型数