第01章 编译原理概述

合集下载

编译原理第一章课件计算机编译原理

编译原理第一章课件计算机编译原理
编译原理第一章课件计算机 编译原理
• 编译原理概述 • 语言基础知识 • 编译技术与方法 • 编译器构造实践 • 编译器的优化与改进 • 计算机编译原理的应用领域
01
编译原理概述
编译器的定义与作用
编译器定义
编译器是一种将高级语言程序翻译成机器语言程序的软件工 具。
编译器作用
将人类可读的源代码转换为计算机可执行的机器代码,实现 程序的运行。
语义分析技术
01
语义规则定义
定义程序语言的语义规则,包括类型检查、控制流分析、 数据流分析等。
02 03
语义分析算法
根据定义的语义规则,采用相应的语义分析算法对语法分 析得到的语法树进行语义分析,如类型检查算法、控制流 分析算法等。
语义错误处理
在语义分析过程中,对于不符合语义规则的输入,需要进 行错误处理,如报告语义错误信息或进行错误恢复。同时 ,还需要考虑如何处理程序中的异常情况,如异常捕获、 异常处理等。
执行效率。
THANKS
感谢观看
03
编译技术与方法
词法分析技术
词汇识别
将输入的字符流按照某种规则划 分成一个个的单词或符号,即词 法单元。
词法单元分类
将识别出的词法单元按照其性质 和作用进行分类,如关键字、标 识符、运算符、分隔符等。
错误处理
在词法分析过程中,对于不符合 词法规则的输入,需要进行错误 处理,如报告错误信息或进行错 误恢复。
死代码删除
识别和删除永远不会被执行的代码段,以减 小程序体积和提高执行效率。
编译器性能评估
编译速度
衡量编译器将源代码转换为目标代码所需的时间。
代码质量
评估编译器生成的目标代码在运行时所占用的内存和执行效率。

编译原理-陈火旺版-第一章

编译原理-陈火旺版-第一章

编译器的作用与重要性
01
编译器是将高级语言程序翻译成机器语言程序的软件工具,是 软件开发的基础设施之一。
02
编译器可以提高程序的执行效率,使得程序能够在各种计算机
上运行。
编译器还可以对程序进行优化,提程简介
01
02
03
词法分析
将输入的源程序分解成一 个个的单词符号,即词法 单元。
词法分析器的构造
构造原理
根据词法规则构造出识别相应单 词符号的有限自动机,然后将有 限自动机转换为对应的程序代码
构造方法
手工构造法、自动生成法
注意事项
处理好单词符号的二义性问题; 识别出源程序中的错误并进行适 当的处理。
04
语法分析
语法分析概述
语法分析的任务
根据语言的语法规则,对输 入的符号序列进行合法性检 查,并构造出相应的语法结
中间代码的形式
常见的中间代码形式有三地址码、四元式、树形表示等。
中间代码生成算法
根据源程序的语法结构和语义规则,生成相应的中间代码序列。
符号表管理
符号表的作用
符号表用于记录源程序中各种标识符的属性信息,如类型、作用域 和存储地址等。
符号表的组织方式
常见的符号表组织方式有线性表、散列表和树形结构等。
循环优化
通过循环展开、循环合并、循环交换等技术来改进循环的性能。
目标代码生成方法
机器无关代码生成
机器相关代码生成
生成与特定机器无关的中间代码,然后在 运行时将其转换为特定机器上的目标代码 。
直接生成特定机器上的目标代码,这需要 考虑机器的指令集、寄存器分配、内存访 问等因素。
汇编语言代码生成
高级语言虚拟机代码生成

编译原理课程设计教案

编译原理课程设计教案

编译原理课程设计教案第一章:编译原理概述1.1 编译器的作用与重要性解释编译器将高级语言程序转换为机器语言程序的过程强调编译器在软件开发中的关键角色1.2 编译原理的基本概念介绍编译程序的基本组成部分,如词法分析器、语法分析器、语义分析器、中间代码器、目标代码器和代码优化器等解释源程序、目标程序和中间代码的概念1.3 编译过程的阶段详细介绍编译过程的各个阶段,包括词法分析、语法分析、语义分析、中间代码、代码优化和目标代码强调每个阶段的目标和重要性第二章:词法分析2.1 词法分析的基本概念解释词法分析器的任务和作用介绍词法单位的概念,如标识符、关键字、常量和符号等2.2 词法分析的技术和方法介绍词法分析常用的技术和方法,如有限自动机、正则表达式和词法规则等解释词法分析过程中的扫描线和词法单元的产生过程2.3 词法分析器的实现介绍如何实现一个简单的词法分析器,包括词法规则的定义和词法分析器的构造提供相关的编程练习,让学生通过编写代码实现基本的词法分析功能第三章:语法分析3.1 语法分析的基本概念解释语法分析器的任务和作用介绍语法规则和语法树的概念3.2 语法分析的技术和方法介绍语法分析常用的技术和方法,如递归下降分析法、LL分析法、LR分析法等解释语法分析过程中的分析表和状态机的概念3.3 语法分析器的实现介绍如何实现一个简单的语法分析器,包括语法规则的定义和语法分析器的构造提供相关的编程练习,让学生通过编写代码实现基本的语法分析功能第四章:语义分析4.1 语义分析的基本概念解释语义分析器的任务和作用介绍语义规则和语义错误的概念4.2 语义分析的技术和方法介绍语义分析常用的技术和方法,如类型检查、上下文无关文法分析、语义规则等解释语义分析过程中的语义规则和语义冲突的解决方法4.3 语义分析器的实现介绍如何实现一个简单的语义分析器,包括语义规则的定义和语义分析器的构造提供相关的编程练习,让学生通过编写代码实现基本的语义分析功能第五章:中间代码5.1 中间代码的基本概念解释中间代码器的任务和作用介绍中间代码的概念和中间代码的原则5.2 中间代码的技术和方法介绍中间代码的常用技术和方法,如三地址代码、静态单赋值代码等解释中间代码过程中的基本规则和操作符的转换5.3 中间代码器的实现介绍如何实现一个简单的中间代码器,包括中间代码的定义和中间代码器的构造提供相关的编程练习,让学生通过编写代码实现基本的中间代码功能第六章:代码优化6.1 代码优化的基本概念解释代码优化器的任务和作用介绍代码优化的目标和常见的优化技术6.2 常见代码优化技术详细介绍各种代码优化技术,如常量折叠、死代码消除、循环优化、表达式简化等强调优化技术对提高程序性能的重要性6.3 代码优化器的实现介绍如何实现一个简单的代码优化器,包括优化规则的定义和代码优化器的构造提供相关的编程练习,让学生通过编写代码实现基本的代码优化功能第七章:目标代码7.1 目标代码的基本概念解释目标代码器的任务和作用介绍目标代码的概念和目标代码的原则7.2 目标代码的技术和方法介绍目标代码的常用技术和方法,如寄存器分配、指令调度等解释目标代码过程中的基本规则和操作符的转换7.3 目标代码器的实现介绍如何实现一个简单的目标代码器,包括目标代码的定义和目标代码器的构造提供相关的编程练习,让学生通过编写代码实现基本的目标代码功能第八章:调试技术8.1 调试技术的基本概念解释调试器的作用和重要性介绍调试过程中的常见问题和调试技术8.2 调试器的结构和原理详细介绍调试器的结构和原理,如断点、单步执行、查看变量等功能强调调试技术对发现和修复程序错误的重要性8.3 调试器的实现介绍如何实现一个简单的调试器,包括断点的设置、单步执行、变量查看等功能提供相关的编程练习,让学生通过编写代码实现基本的调试功能第九章:编译器性能评价9.1 编译器性能评价的基本概念解释编译器性能评价的目的和方法介绍编译器性能评价的指标和评价方法9.2 编译器性能评价的指标和评价方法详细介绍编译器性能评价的指标,如执行速度、内存占用、编译时间等介绍常用的编译器性能评价方法和工具9.3 编译器性能评价的实践介绍如何进行编译器性能评价的实践,包括评价指标的选取和评价方法的实施提供相关的实践练习,让学生通过实际操作评价编译器的性能第十章:编译原理应用与发展趋势10.1 编译原理在软件开发中的应用介绍编译原理在软件开发中的应用领域,如解释器设计、即时编译、程序分析等强调编译原理在提高程序性能和开发效率方面的重要性10.2 编译原理的研究现状与未来发展介绍编译原理研究领域的前沿技术和最新研究成果探讨编译原理未来的发展趋势和挑战10.3 编译原理在实践中的应用案例分析分析编译原理在实际项目中的应用案例,如开源编译器项目、商业编译器产品等引导学生思考如何将编译原理应用于实际工程实践中的问题重点和难点解析重点环节一:编译器的作用与重要性编译器作为程序设计语言和计算机硬件之间的桥梁,其作用不可忽视。

编译原理概念总结

编译原理概念总结

第一章 引论• 为什么要用编译器 • 与编译器相关的程序 • 翻译步骤• 编译器中的主要数据结构1、语言处理器 1、简单的说,一个编译器就是一个程序,它可以阅读以某一种语言(源语言)编写的程序,并把该程序翻译成一个等价的、用另一种语言(目标语言)编写的程序。

2、编译器的重要任务之一就是报告它在翻译过程中发现的源程序中的错误。

3、使用编译器是为了提高编程的速度和准确度。

4、与编译器相关的程序:解释程序(interpreter )、汇编程序(assembler )、连接程序(linker )、装入程序(loader )、预处理器(preprocessor )、编辑器(editor )、调试程序(debugger )、描述器(profiler )、项目管理程序(project manager )。

5、解释器是另一种常见的语言处理器。

它并不通过翻译的方法生成目标程序。

从用户的角度来看,解释器直接利用用户提供的输入执行源程序中指定的操作。

6、一个源程序可能被分割成多个模块,并存放于独立的文件中。

把源程序聚合在一起的任务有时会由一个被称为预处理器(preprocessor )的程序独立完成。

预处理器还负责把那些称为宏的缩写形式转换为源语言的语句。

7、连接器(linker )能够解决外部内存地址的问题。

8、加载器(loader )把所有的可执行目标文件放到内存中执行。

2、一个编译器的结构OutputSourceProgramFront endBack endObject1、将编译器看成黑盒,则源程序映射为在语义上等价的目标程序,而这个映射由两部分组成:分析部分和综合部分。

2、分析部分把源程序分解成多个组成要素,并在这些要素之上加上语法结构。

3、综合部分根据中间表示和符号表中的信息来构造用户期待的目标程序。

4、编译器的第一个步骤:词法分析(lexical)或扫描(scanning)。

词法分析器读入组成源程序的字符流,并且将它们组成有意义的词素(lexeme)的序列。

编译原理文档第一章

编译原理文档第一章

编译原理第一章编译程序概论使用过计算机的人都知道,多数用户是应用高级语言来实现他们所需要的计算的。

在计算机上执行高级语言程序一般分为两步:第一步,用一个编译程序把高级语言翻译成机器语言程序;第二步,运行所得的机器语言程序求得计算结果。

计算机语言由单一的机器语言发展到现今内容迥异的数千种高级语言,就是因为有了编译技术。

因此,对于计算机专业的学生来说,理解编译程序的工作原理显得尤其重要。

本章重点:编译程序概念、编译过程概述、编译程序的结构。

第一节什么是编译程序通常所说的翻译程序是指这样的一个程序,它能够把某一种语言(称为源语言)改造为另一种语言(称为目标语言),而后者与前者在逻辑上是等价的。

如果源语言是诸如FORTRAN、PASCAL、ALGOL或COBOL这样的“高级语言”,而目标语言是诸如汇编语言或机器语言之类的“低级语言”,这样的一个翻译程序就称为编译程序。

第二节编译过程概述编译程序完成从源程序到目标程序的翻译工作,是一个复杂的整体的过程。

从概念上来说,一个编译程序的整个工作过程是划分成阶段进行的,每个阶段将源程序的一种表示形式转换成另一种表示形式,各个阶段进行的操作在逻辑上是紧密连接在一起的,图1-2-1给出了一个编译过程的各个阶段,这是一种典型的划分方法。

事实上,某些阶段可能组合在一起,这些阶段间的源程序的中间表示形式就没必要构造出来了。

图1-2-1中将编译过程划分成了词法分析、语法分析、中间代码生成,代码优化和目标代码生成六个阶段,我们将分别介绍各阶段的任务。

另外两个重要的工作:表格管理和出错处理与上述六个阶段都有联系。

编译过程中源程序的各种信息被保留在种种不同的表格里,编译各阶段的工作都涉及到构造、查找或更新有关的表格,因此需要有表格管理的工作。

如果编译过程中发现源程序有错误,编译程Array序应报告错误的性质和错误发生的地点,并且将错误所造成的影响限制在尽可有小的范围内,使得源程序的其余部分能继续被编译下去,有些编译程序还能自动校正错误,这些工作称之为出错处理。

2-3-习题(含解答)

2-3-习题(含解答)

2-3 习题(含解答)目录第1章编译原理概述 (1)第2章PL/O编译程序的实现 (4)第3章文法和语言 (4)第4章词法分析 (13)第5章自顶向下语法分析方法 (28)第6章自底向上优先分析 (39)第7章LR分析 (42)第8章语法制导翻译和中间代码生成 (60)第9章符号表 (67)第10章目标程序运行时的存储组织 (70)第11章代码优化 (73)第12章代码生成 (76)综合练习一 (79)综合练习二 (84)综合练习三 (90)综合练习四 (95)综合练习五 (101)综合练习六 (107)第1章编译原理概述一、选择题1.一个编译程序中,不仅包含词法分析,语法分析,中间代码生成,代码优化,目标代码生成等五个部分,还应包括 (1) 。

其中, (2) 和代码优化部分不是每个编译程序都必需的。

词法分析器用于识别 (3) ,语法分析器则可以发现源程序中的 (4) 。

(1) A.模拟执行器 B.解释器 C.表格处理和出错处理 D.符号执行器(2) A.语法分析 B.中间代码生成 C.词法分析 D.目标代码生成(3) A.字符串 B.语句 C.单词 D.标识符(4) A.语义错误 B.语法和语义错误 C.错误并校正 D.语法错误2.程序语言的语言处理程序是一种 (1) 。

(2) 是两类程序语言处理程序,他们的主要区别在于 (3) 。

(1) A.系统软件 B.应用软件 C.实时系统 D.分布式系统(2) A.高级语言程序和低级语言程序 B.解释程序和编译程序C.编译程序和操作系统D.系统程序和应用程序(3) A.单用户与多用户的差别 B.对用户程序的查错能力C.机器执行效率D.是否生成目标代码3.汇编程序是将翻译成,编译程序是将翻译成。

A.汇编语言程序B.机器语言程序C.高级语言程序D. A 或者BE. A 或者CF. B或者C4.下面关于解释程序的描述正确的是。

(1) 解释程序的特点是处理程序时不产生目标代码(2) 解释程序适用于COBOL 和 FORTRAN 语言(3) 解释程序是为打开编译程序技术的僵局而开发的A. (1)(2)B. (1)C. (1)(2)(3)D.(2)(3)5.高级语言的语言处理程序分为解释程序和编译程序两种。

第一章 编译原理概述

第一章 编译原理概述

思考:最早的第一个高级语言的编译程序用什么编写?
目标机的汇编语言或机器语言
一个结构复杂庞大的高级语言的编译程序,若完全 用汇编语言或机器语言书写会非常困难,为解决该问 题而使用了自展技术。
自展的思想是先用目标机的汇编语言或机器语言书 写源语言的一个子集的编译程序,然后再用这个子集 作为书写语言,实现源程序的编译程序。
A
编译即可得到
C
L2 A
A
L2 A L2 A L1 L1 A A A
第四步:用L2 实现L得
CL
LA L2
2
A
A
C
L
A
L2
第五步:把 C LL2 A 经过 C L2 A
A
编译即可得到
C
L A
A
L
A
L
A
L2 L2 A A A
对两个图合并,如下所示
C LA
A
L A L A L2 A L2 L2 A A L1 L1 A A
2
利用A机器上已有的L语言的编译程序实现
B机器上L语言的编译程序,或者说把A机器实现 的一个高级语言编译程序移植到B机器上(缩短 开发时间)
移植:某个机器(称为宿主机)上已有的软件 移植到另一台机器(称为目标机)的过程。
汇编程序与编译程序都是翻译程序,主要区别是加工对象的 不同。由于汇编语言格式简单,常与机器语言之间有一一对 应的关系。汇编程序所要做的翻译工作比编译程序简单的多。
• 编译程序是翻译程序的一种,它将一个用面向 人的源语言书写的程序(高级语言程序)翻译成 一个等价的面向硬件的目标程序(低级语言程序)
源程序
1.2 编译程序的逻辑结构
典型的编译过程具有5个基本阶段 S.P

编译原理第一章PPT课件

编译原理第一章PPT课件

掌握编译原理有助于提高程序员对程序性能、代码质量和软件
03
工程实践的理解。
编译原理的应用领域
编译器设计
编译原理的核心应用领域之一 是编译器设计,包括源代码到
目标代码的转换、优化等。
解释器设计
解释器是另一种将源代码转换 为机器码的程序,编译原理同 样适用于解释器的设计。
程序分析
编译原理中的一些技术可以用 于程序分析,例如静态分析、 动态分析和程序切片等。
从高级语言的设计开始,逐步向下设计低级语言和机器语言。
数据结构和算法选择
选择合适的数据结构和算法,提高编译器的性能和可维护性。
代码优化
在生成目标代码之前,对中间代码进行优化,以提高目标代码的性能 和质量。
04 语言与语法
语言的定义与分类
总结词
语言的定义与分类是编译原理的重要基础,它涉及到语言的语法、语义和语用等方面。
语言的语义分析
总结词
语义分析是编译过程中的重要环节,它涉及 到对语言意义的解释和理解。
详细描述
语义分析是对源代码进行静态分析的过程, 目的是理解源代码的意义和功能。在语义分 析阶段,编译器会检查源代码中是否有语法 错误、类型错误、逻辑错误等,并对其进行 相应的处理。同时,语义分析还会进行符号 表管理、类型检查、控制流分析等工作,以
详细描述
中间代码生成是编译过程的第三步,其主要任务是将抽象语法树转化为中间代码。中间代码是一种抽象的、与具 体机器无关的代码形式,通常采用三地址码、四元式等表示方式。中间代码的主要目的是为了方便后续的优化和 目标代码生成。
代码优化
总结词
对中间代码进行优化,提高执行效率。
详细描述
代码优化是编译过程中非常重要的一步,其主要任务是对中间代码进行优化,以提高生成的目标代码 的执行效率。常见的优化技术包括常量折叠、无用代码删除、循环展开等。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目标程序
3、当源程序处理完后, 进行善后处理,优化目 标程序。 43
1.4.2 多遍编译程序
……
O.P
上一遍的结果是下一遍的输入,最后一遍生成目标程序。
41
1.4.1 单遍编译程序

单遍编译程序只对源程序进行一遍扫描,就完成 编译的各项任务,产生目标代码。在单遍编译程 序中,不产生中间代码,往往以语法分析程序为 中心,词法分析和语义分析作为语法分析的子程 序。
语法分析函数 { 词法分析子程序; 语义分析子程序; }
<表达式>::=“(”<表达式>“)” | <标识符> | <整数> | <实数>
27
语法分析与语文中分析句子成分相类似,根据句子 由主语、谓语组成,谓语由动词、宾语组成等语言规则, 可对句子“猴子吃香蕉”的进行分析,分析过程常用语 法树来表示句子。
句子
主语
谓语
名词(猴子)
动词(吃)
宾语
名词(香蕉) 图1.5句子“猴子吃香蕉”的语法分析树
运 行 结 果
编译阶段
汇编阶段
运行阶段
17
编译到被执行的过程
3、从源程序的编译到执行只有一个阶段—— 解释执行阶段(解释方式)
源程序
数据
解 释 程 序
结果
在解释方式下,最终并不生成目标程序,这是编译 方式与解释方式的根本区别。 18
1.3 编译程序的组成

按照编译程序的执行过程和所完成的任 务,编译分成前后两个阶段:分析阶段 和综合阶段。

编译程序
若源程序是用高级语言书写,经加工后得到目标程序, 上述翻译过程称“编译”(Compile)。
汇编程序与编译程序都是翻译程序,主要区别是加工对象的 不同。由于汇编语言格式简单,常与机器语言之间有一一对 应的关系。汇编程序所要做的翻译工作比编译程序简单的多。
15
编译到被执行的过程
1、编译程序的目标程序是机器语言(编译方式)
26
错 误 处 理
1.3.2 语法分析程序源自编译程序的核心 任务:根据语法规则(即语言的文法), 分析并识别出各种语法成分(如表达式、 语句、函数等),并进行语法正确性检 查。
文法
<赋值语句>::=<标识符>“=”<表达式> <表达式>::=<表达式>“+”<表达式> | <表达式>“*”<表达式>
标识符类型 类型 地址
1(表示变量) 1(表示整型) 0001

标识符名
aaa
每个阶段中都要有: 符号表管理和错误处理
38
1.3.7 错误处理

诊察错误,并能报告用户错误性质和位 置
出错处理能力的优劣是衡量编译程序质 量好坏的一个重要指标

39
典型的编译程序具有7个逻辑部分
S.P
词法分析程序
符 号 表 管 理
(+,x,1,t4)
(=,t4,_,z)
代码优化不是编译程序的必要组成部分,不同的 编译程序所进行的代码优化程度差别很大,能够 完成代码优化的编译程序称为“优化编译程序”。 35
S.P
词法分析程序 符 号 表 管 理
语法分析程序 语义分析及生成中间代码程序 代码优化程序 代码生成程序 O.P
36
错 误 处 理
[3] 陈意云等编著,《编译原理》,高等教育出版 社。
„„
3
成绩评定

平时成绩
出勤率
30%
课后作业
课程设计(编译器)

期末考试
70%
4
作业

课后题:

第1、2、3、4、7、10章全部课后习题 第5章:1、2、3小题 第6章:1小题

课程设计
5
程序语言中涉及编译的一些问题?
1. 为什么有些语言规定标识符不能超过8个字符?而有些语 言对标识符的长度无限制? 2. 为什么有些语言能实现递归,而有些语言不能?
28
如何画 a=10*(c+20) 的语法 表达式: a=10+c*20 分析树?
表达式 ID(a)
表达式
=
+
表达式
项 项 * 因子
项 因子
NUM (10)
因子
ID(c)
NUM(20)
29
S.P
词法分析程序 符 号 表 管 理
语法分析程序 语义分析及生成中间代码程序 代码优化程序 代码生成程序 O.P
源程序
用汇编语言或高级语言编写的程序称为源程序
目标程序
用目标语言所表示的程序 目标语言:可以是介于源语言和机器语言之间 的“中间语言”,可以是某种机器的机器语言,也可 以是某机器的汇编语言
翻译程序
将源程序转换为目标程序的程序称为翻译程序 。它是指各种语言的翻译器,包括汇编程序和编译 程序,是汇编程序、编译程序以及各种变换程序的 13 总称
34
错 误 处 理
1.3.4 代码优化

任务:对中间代码进行加工变换,以得 到高质量的目标代码
而优化后的代码如下:
(=,6.28,_,x) (*,10,a,y) (=,7.28,_,z)
有四元式指令代码如下:
(*,3.14,2,t1) (=,t1,_,x) (*,2,5,t2) (*,t2,a,t3) (=,t3,_,y)
表达式
ID(a) 表达式 项 因子 NUM (10) = + 项 因子 表达式 项 * 因子
NUM(20)
ID(c)
32
例如表达式
(a+b)*(c+d) 翻译成四元的中间 代码如下: (+ , a , b , t1) (+ , c , d , t2) (* , t1 , t2 , t3)
中间代码生成
文法和语言(文法、推导、句型、归约、语法树) 词法分析(词法分析、正规表达式、正规文法、NFA、 DFA) 语法分析(自顶向下:递归下降分析、LL(1);自底向 上:LR分析法)


语义制导翻译(属性文法翻译、语法制导翻译)
运行环境(符号表管理、存储分配) 语义分析和代码生成 代码优化
11
22
例如:a=10+c*20
a = 1 0 + C * 2 0 a = 10 + C * 2 0 a = 10 + C * 20
符号
100
记号
ID
单词
a
21 200
22 100 25 200
= NUM
+ ID * NUM
= 10
+ c * 20
23

res=fact *(term1+term2);
源程序、翻译程序、目标程序 三者关系:
源程序
SOURCE PROGRA M
翻译程序
TRANSLATE R
目标程序
OBJECT PROGRAM
即源程序是翻译程序的输入,目标程序是翻译 程序的输出
14
1.2 翻译程序

汇编程序
若源程序用汇编语言书写,经过翻译程序得到用机器语 言表示的程序,这时的翻译程序就称之为汇编程序,这种翻 译过程称为“汇编”(Assemble)。
错误处理
分析阶段
词法 分析 语法 分析 语义 分析 符号表 代码 优化
综合阶段
目标代码 生成
19
对比

翻译外文资料:
1、能识别出句子中的一个单词(词法分析);
2、分析句子的语法结构(语法分析);
4、对译文进行修饰(代码优化); 5、写出最后的译文(目标代码生成)。
20
3、根据句子的含义进行初步翻译(语义分析);
结果 IDN
‘ =’ IDN ‘*’ ‘ (’ IDN ‘ +’ IDN res
fact
term1
term2
24
‘ )’ ‘ ;’
对比

中文句子划分 “我们是一家人” 我们 是 一家人
“我是大学生”


大学生
“叔叔亲了我妈妈也亲了我”
25
S.P
词法分析程序 符 号 表 管 理
语法分析程序 语义分析及生成中间代码程序 代码优化程序 代码生成程序 O.P
30
错 误 处 理
1.3.3 语义分析及中间代码生成 程序

任务:依据语义规则对识别出的各种语法 成分析其含义,并进行初步翻译,生成中 间代码。
静态:
分析语法成份的含义,进行语义上的正确性检查
动态: 根据相应语义,生成中间代码(介于源语言和目 31 标语言之间的中间语言形式)
表达式:a=10+c*20
1.3.5 目标代码生成

任务:把中间代码变换成特定机器上的 低级语言代码
目标代码的形式可以是绝对指令代码、 可重定位的机器指令代码或汇编指令代 码。

37
1.3.6 符号表管理

填表:把源程序中的信息和编译过程中 所产生的信息登记在表格中
查表:在随后的编译过程中同时又要不 断的查找这些表格中的信息
LOAD a 将a的内容加载到操作数栈 LOAD b 将a的内容加载到操作数栈 ADD STO t1 将操作数栈顶的两个单元的内容相加 将操作数栈顶的内容存入单元t1
LOAD c 将c的内容加载到操作数栈 LOAD d 将d的内容加载到操作数栈 ADD 将操作数栈顶的两个单元的内容相加
翻译成某个抽象机的 汇编指令代码:
STO t2 将操作数栈顶的内容存入单元t2 LOAD t1 将t1的内容加载到操作数栈 LOAD t2 将t2的内容加载到操作数栈
相关文档
最新文档