精华内容
下载资源
问答
  • 一张图解释典型编译程序结构框图

    千次阅读 2017-10-04 11:10:14
    编译程序结构框图

    编译程序结构框图

    这里写图片描述

    展开全文
  • 编译程序总体结构

    千次阅读 2019-10-25 23:53:30
    编译程序总体结构 文章目录编译程序总体结构1、词法分析2、语法分析3、语义分析4、中间代码生成4、中间代码生成5、代码优化与机器无关的优化与机器有关的优化6、目标代码生成7、表格管理8、错误处理9、模块分类 1、...

    编译程序总体结构

    在这里插入图片描述

    1、词法分析

    在这里插入图片描述
    词法分析由词法分析器(Lexical Analyzer)完 成,词法分析器又称为扫描器(Scanner)
    词法分析器从左到右扫描组成源程序的字符 串,并将其转换成单词(记号—token)串;同 时要:查词法错误,进行标识符登记——符 号表管理。
    输入:字符串
    输出:(种别码,属性值)——序对

    • 属性值——token的机内表示

    2、语法分析

    语法分析由语法分析器(Syntax Analyzer)完成,语 法分析器又叫Parser。

    功能:

    • Parser实现“组词成句” :将词组成各类语法成分:表达式、因子、项,语句,子程序…
    • 构造分析树
    • 指出语法错误
    • 指导翻译

    输入:token序列
    输出:语法成分

    在这里插入图片描述

    3、语义分析

    语义分析(semantic analysis)一般和语法 分析同时进行,称为语法制导翻译 (syntax-directed translation)

    功能:分析由语法分析器识别出来的语 法成分的语义

    • 获取标识符的属性:类型、作用域等
    • 语义检查:运算的合法性、取值范围等
    • 子程序的静态绑定:代码的相对地址
    • 变量的静态绑定:数据的相对地址

    4、中间代码生成

    中间代码(intermediate Code)

    波兰表示问题——Lukasiewicz1929年发明

    1. 中缀表示(Infix notation):(a+①b)*(-c+②d)+③e/f
    2. 波兰表示(Polish / Prefix / Parenthesis-free / Lukasiewicznotation)
      • ——也就是前缀表示 +③*+①a b+②@cd/ef
    3. 逆波兰表示(Reverse Polish / Suffix / Postfix notation)
      • ——也就是后缀表示 a b +①c@ d +②*ef/+ ③运算顺序从左向右

    中间代码的特点:

    • 简单规范
    • 与机器无关
    • 易于优化与转换

    5、代码优化

    代码优化(optimization)是指对中间代码进 行优化处理,使程序运行能够尽量节省存 储空间,更有效地利用机器资源,使得程 序的运行速度更快,效率更高。当然这种 优化变换必须是等价的。

    • 与机器无关的优化
    • 与机器有关的优化

    与机器无关的优化

    局部优化 :

    • 常量合并:常数运算在编译期间完成,如8+9*4
    • 公共子表达式的提取:在基本块内进行的

    循环优化:

    • 强度削减 ==>用较快的操作代替较慢的操作
    • 代码外提 ==>将循环不变计算移出循环

    与机器有关的优化

    寄存器的利用

    • 将常用量放入寄存器,以减少访问内存的次数

    体系结构

    • MIMD、SIMD、SPMD、向量机、流水机

    存储策略

    • 根据算法访存的要求安排:Cache、并行存储体 系——减少访问冲突

    任务划分

    • 按运行的算法及体系结构,划分子任务(MPMD)

    6、目标代码生成

    将中间代码转换成目标机上的机器指令代码 或汇编代码

    • 确定源语言的各种语法成分的目标代码结构 (机器指令组/汇编语句组)
    • 制定从中间代码到目标代码的翻译策略或算法

    目标代码的形式

    • 具有绝对地址的机器指令
    • 汇编语言形式的目标程序
    • 模块结构的机器指令(需要链接程序)

    7、表格管理

    管理各种符号表(常数、标号、变量、过程、 结构……),查、填(登记、查找)源程序 中出现的符号和编译程序生成的符号,为 编译的各个阶段提供信息。

    • 辅助语法检查、语义检查
    • 完成静态绑定、管理编译过程

    Hash表、链表等各种表的查、填技术

    “数据结构与算法”课程的应用

    8、错误处理

    进行各种错误的检查、报告、纠正,以及相 应的续编译处理(如:错误的定位与局部化)
    词法:拼写……
    语法:语句结构、表达式结构……
    语义:类型不匹配、参数不匹配……

    9、模块分类

    分析:词法分析、语法分析、语义分析
    综合:中间代码生成、代码优化、目标 代码生成
    辅助:符号表管理、出错处理
    8项功能对应8个模块

    展开全文
  • 编译程序完成从源程序到目标程序的翻译工作,是一个复杂的整体的过程。从概念上来讲,一个编译程序的整个工作过程是划分成阶段进行的,每个阶段将源程序的一种表示形式转换成另一种表示形式,各个阶段进行的操作在...

    编译过程概述:
    编译程序完成从源程序到目标程序的翻译工作,是一个复杂的整体的过程。从概念上来讲,一个编译程序的整个工作过程是划分成阶段进行的,每个阶段将源程序的一种表示形式转换成另一种表示形式,各个阶段进行的操作在逻辑上是紧密连接在一起的,典型的划分方法主要分为6个阶段、如下:
    源程序 -> 词法分析 -> 语法分析 -> 语义分析 -> 中间代码生成 -> 代码优化 -> 目标代码生成 -> 目标程序


    下面分别简单介绍一下6个阶段的任务

    1、词法分析:
    词法分析是编译过程的第一个阶段,这个阶段的任务是从左到右一个字符一个字符的读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词(一些场合下也称单词符号或符号)。这里所谓的单词是指逻辑上紧密相连的一组字符,这些字符具有集体含义。
    在这个阶段,会将程序变成由标识符、保留字、算符、界符等组成的单词序列。并且自动把空格过滤掉。其中标识符会以id1、id2、id3……这样的内部形式存在。

    2、语法分析:
    语法分析是编译过程的第二个阶段。语法分析的任务是在词法分析的基础上将单词序列分解成各类语法短语,如“程序”、“语句”、“表达式”等。这种语法短语也称为语法单位,可以表示成语法树
    这里写图片描述
    语法分析所依据的是语言的语法规则,即描述程序结构的规则。通过语法分析确定整个输入串是否构成一个语法上正确的程序。程序的结构通常是由递归规则表示的。

    词法分析和语法分析本质上都是对源程序的结构进行分析。但词法分析的任务仅对源程序进行线性扫描即可完成,比如识别标识符,因为标识符的结构是字母打头的字母和数字串,这只要顺序扫描输入流,遇到既不是字母又不是数字的字符时,将前面所发现的所有字母和数字组合在一起构成标识符单词即可。但这种线性扫描不能用于递归定义的语法成分,比如不能用此办法去匹配表达式中的括号。

    3、语义分析:
    语义分析是审查源程序有无语义错误,为代码生成阶段收集类型信息。例如,语义分析的一个工作是进行类型审查,审查每个算符是否具有语言规范允许的运算对象,当不符合语言规范时,编译程序应报告错误。

    4、中间代码生成:
    在进行了上述的语法分析和语义分析阶段的工作后,有的编译程序将源程序变成一种内部表示形式,这种内部表示形式叫做中间语言或中间代码。所谓“中间代码”是一种结构简单、含义明确的记号系统,这种记号系统可以设计为多种多样的形式,重要的设计原则为两点:
    (1)容易生成
    (2)容易将它翻译成目标代码
    很多编译程序采用了一种近似“三地址指令”的“四元式”中间代码,这种四元式形式为:
    (运算符,运算对象1,运算对象2,结果)

    5、代码优化:
    这一阶段的任务是对前一阶段产生的中间代码进行变换或进行改造,目的是使生成的目标代码更为高效,即省时间和省空间。一系列的优化工作诸如公共子表达式的删除、强度削弱、循环优化等优化工作将会在后面的博客里详细介绍。

    6、目标代码生成:
    这一阶段的任务是把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。这是编译的最后阶段,它的工作与硬件系统结构和指令含义有关,这个阶段的工作很复杂,涉及硬件系统功能部件的运用、机器指令的选择、各种数据类型变量的存储空间分配以及寄存器和后缓寄存器的调度等。


    上述就是编译程序的几个工作阶段。但事实上并非所有的编译程序都分成这样几个阶段,有些编译程序并不需要生成中间代码,有些编译程序不进行优化,即优化阶段可省去,有些最简单的编译程序在语法分析的同时产生目标指令代码,如 PL/0 语言编译程序。不过多数实用的编译程序都包含上述几个阶段的工作。

    展开全文
  • 编译原理:编译程序结构

    千次阅读 2018-05-18 12:00:25
    此外,一个完整的编译程序还必须包括表格管理程序和出错处理程序。如下图: 表格管理和出错处理与上一篇讲的6个阶段都有联系,编译过程中源程序的各种信息被保留在种种不同的表格里,编译各阶段的工作都涉及构造...

    在上一篇编译过程的文章讲到编译过程的6个阶段的任务可以分别由6个模块完成,分别称作词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序和目标代码生成程序。此外,一个完整的编译程序还必须包括表格管理程序和出错处理程序。如下图:
    这里写图片描述

    表格管理和出错处理与上一篇讲的6个阶段都有联系,编译过程中源程序的各种信息被保留在种种不同的表格里,编译各阶段的工作都涉及构造、查找或更新有关的表格,因此需要有表格管理的工作。如果编译过程中发现源程序有错误,编译程序应报告错误的性质和错误发生的地点,并且将错误所造成的影响限制在尽可能小的范围内,使得源程序的其余部分能继续被编译下去,有些编译程序还能自动校正错误,这些工作由出错处理程序完成。

    展开全文
  • 图1 编译程序的逻辑结构
  • 编译程序的逻辑结构

    千次阅读 2013-08-09 19:35:21
    典型的编译器所做的工作: 源程序-->词法分析-->语法分析-->语义分析-->中间代码-->代码优化-->目标代码
  • 翻译程序和编译程序

    千次阅读 2020-08-03 13:13:41
    翻译程序和编译程序 机器语言对计算机的依赖性强、直观性差、编写程序工作量大、程序的结构也欠清晰。 翻译程序:所谓翻译程序是指这样一种程序,它把一种语言(称作源语言)所写的程序(源程序)翻译成与之等价的...
  • 由于PL/0语言功能简单、结构清晰、可读性强,又具备了一般高级语言的必须部分,因而PL/0语言的编译程序能充分体现一个高级语言编译程序实现的基本技术和步骤,是一个非常合适的编译程序教学模型。
  • 编译原理-编译程序基础知识

    千次阅读 2018-03-18 18:15:33
    本文主要讲的什么是编译程序,编译的各个阶段 什么是编译程序 源语言是像FORTRAN、Pascal或C那样的高级语言,目标语言是像汇编语言或机器语言那样的低级语言,这种翻译程序就叫做编译程序 翻译程序:就是把一种...
  • 编译程序基本原理

    千次阅读 2018-06-25 21:40:01
    编译程序和解释程序 人们利用高级语言与计算机进行交互, 但计算机仍然只能理解和执行由 0, 1序列构成的机器语言, 因此高级程序设计语言需要翻译, 担负这一任务的程序称为"语言处理程序", 由于应用的不同, 语言之间...
  • 编译程序工作过程

    千次阅读 2018-04-26 15:21:22
    问:编译程序绝大多数时间花在 _____ 上。 答:表格管理 编译程序也叫编译系统,是把用高级语言编写的面向过程的源程序翻译成目标程序的语言处理程序。编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段...
  • 编译原理的学习介绍编译程序的一般原理,重点掌握如何设计和构造编译程序,即编译程序构造的原理和技术。 1.2 程序设计语言与程序 程序及其结构 程序设计语言的定义 程序的执行
  • 编译程序原理VS解释程序原理

    千次阅读 热门讨论 2015-10-29 20:22:06
    引言  在备战软考的过程中在复习程序设计语言的时候遇到这么一个考点——解释和编译的原理,并且在做真题的过程中... 一、编译程序原理  首先让大家看一张来自百度百科上面的编译工作阶段的示意图    这张图看
  • 源程序、目标程序、汇编程序、编译程序、解释程序之间的关系 翻译程序是这样一种程序:它能把用甲种语言编写的程序翻译成在功能上与之等价的用乙种语言编写的程序。我们把甲种语言称为源语言,把乙种语言称为目标...
  • 其理论基础坚实,其形式化系统不仅用于编译程序,还大量用于人工智能、多媒体技术、数据库等领域。 程序设计语言 低级程序语言 特定的计算机系统所固有的语言 即:机器语言、汇编语言 特点:执行效率高、编制效率...
  • 什么是编译程序

    千次阅读 2017-05-19 16:04:45
    编译程序也叫编译系统,是把用高级语言编写的面向过程的源程序翻译成目标程序的语言处理程序。 编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;中间代码生成;代码优化;目标代码...
  • 编译程序和解释程序有什么区别?

    千次阅读 2020-05-26 22:52:19
    1. 编译程序和解释程序的区别: 编译型是使用编译器编译后生成计算机硬件可直接执行的指令,解释型是在运行时才由解释器逐语句去执行。 编译型代表:C&C++,C#,Java,解释型代表:html,javascript。区别有很多...
  • llvm编译系统结构分析

    千次阅读 2019-05-21 22:40:14
    LLVM 编译系统分析中间代码工具集编译流程 整个 LLVM 编译系统的组成可分成三部分:LLVM 中间代码,用于分析、 优化、代码生成等工作的集成库,以及建立在以上集成库基础之上的工具,包括汇 编器、链接器、调试器...
  • 什么是编译程序 编译程序概述 编译程序结构 编译程序的总框架
  • 编译概述与引论

    千次阅读 2016-07-20 20:02:08
    本博文中,介绍编译程序的基本概念,概述编译过程和编译程序结构,编译程序和程序设计环境以及编译程序的生成过程和构造工具知识。什么叫编译程序通常,我们所说的翻译程序是指这样的一个程序,它能够把某一种语言...
  • 编译程序的五个阶段

    千次阅读 2019-04-03 10:53:24
    第一阶段 词法分析:任务是输入源程序,对构成源程序的...词法分析和语法分析本质都是对源程序结构进行分析。 第三阶段 词义分析:任务是对语法分析所识别出的各类语法范畴,分析其含义。语义分析一个主要工作是...
  • C# 程序结构

    千次阅读 2021-08-15 19:05:11
    C#程序结构 一个 C# 程序主要包括以下部分:这里以控制台程序为实例 命名空间声明(Namespace declaration) 一个 class Class 方法 Class 属性 一个 Main 方法 语句(Statements)& 表达式(Expressions) ...
  • 如果编译过程中发现源程序有错误,编译程序应报告错误的性质和错误发生的地点,并且将错误所造成的影响限制在尽可能小的范围内,使得源程序的其余部分能继续被编译下去,有些编译程序还能自动校正错误,这些工作称之...
  • 第一阶段:词法分析:任务是输入源程序,对构成源...词法分析和语法分析本质都是对源程序结构进行分析。第三阶段:词义分析:任务是对语法分析所识别出的各类语法范畴,分析其含义。语义分析一个主要工作是进行...
  • 程序结构

    千次阅读 2020-02-27 17:17:37
    程序结构 5.1全局变量 全局变量具有全局的作用域和生存周期 全局变量的使用与函数无关 局部变量的作用域和生存期是一致的 全局变量的初始化,未初始化的全局变量会被编译器自动初始化为0...
  • Qt开发:windows下发布动态编译程序

    千次阅读 2015-02-08 20:20:16
    Qt开发发布程序有两种:静态编译和动态编译。 静态编译将所有用到的库及资源文件打包成一个exe执行文件,能保证在不同的机器上都能运行,不依赖于某个运行库。动态编译只生成一个最小的可执行exe,其他的依赖库dll...
  • 上篇我们介绍了什么是编译程序,简单提到了这个“工厂”工作的六个阶段。本篇介绍一下这六个阶段。 “工厂”导航图(翻译工作的过程):
  • Java Web程序结构

    千次阅读 2017-02-25 14:55:29
    简单的WEB程序结构 认识简单的WEB程序结构  认识了解Java web的基本程序结构是学习使用web的第一步,首先在下面通过一个对比看看简单的web程序结构 在myeclipse下我们新建一个普通的Java
  • VB6程序编译工具,直接打开目标exe文件,选择菜单“discompile”-“Export Project”导出整个工程。
  • golang 工程结构编译

    千次阅读 2017-12-12 17:53:08
    golang 工程结构编译

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 811,292
精华内容 324,516
关键字:

编译程序的结构