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

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

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

用以引用非局部(包围它的过程)变量时,寻找该变量的地址。 DL: 动态链,指向调用该过程前正在运行过程的数据段基地址,用以过程执行结束释放
数据空间时,恢复调用该过程前运行栈的状态。 RA: 返回地址,记录调用该过程时目标程序的断点,即调用过程指令的下一条指令的地
编译程序大致有哪几种开发技术?
答案:
(1)自编译:用某一高级语言书写其本身的编译程序。 (2)交叉编译:A 机器上的编译程序能产生 B 机器上的目标代码。 (3)自展:首先确定一个非常简单的核心语言 L0,用机器语言或汇编语言书写出它的编
译程序 T0,再把语言 L0 扩充到 L1,此时 L0⊂ L1 ,并用 L0 编写 L1 的编译程序 T1,再把语 言 L1 扩充为 L2,有 L1 ⊂ L2 ,并用 L1 编写 L2 的编译程序 T2,……,如此逐步扩展下 去, 好似滚雪球一样,直到我们所要求的编译程序。 (4)移植:将 A 机器上的某高级语言的编译程序搬到 B 机器上运行。
(main).
答案: 程序执行到赋值语句 b∶=10 时运行栈的布局示意图为:
1
《编译原理》课后习题答案第二章
第 3题 写出题 2 中当程序编译到 r 的过程体时的名字表 table 的内 容。
name
kind
level/val
adr
size
答案:
题 2 中当程序编译到 r 的过程体时的名字表 table 的内容为:
盛威网()专业的计算机学习网站
2
《编译原理》课后习题答案第一章
合实现方案,即先把源程序翻译成较容易解释执行的某种中间代码程序,然后集中解释执行 中间代码程序,最后得到运行结果。
编译原理--第一章.讲义

2018/11/14
2
编译原理
第一章 引论
2.编译理论与其他课程关系
操作系统
控制对象
数据结构
编译理论
基础
素材
离散数学
自动机和形式语言
2018/11/14 3
编译原理
第一章 引论
3.编译理论的应用
编译理论 的许多想法和技术可用于一般软件的设计:
文本编辑程序 有穷状态技术 上下文无关文法 语法制导翻译 代码优化技术
2018/11/14
目标程序代码
6
编译原理
第一章 引论
6.翻这种变换程序称为翻译程序
高级语言源程序
编译为
面向机器代码
这种变换程序称为编译程序 编译程序 有一些限制 (针对输入、输出)
2018/11/14 7
编译原理
第一章 引论
1.编译过程的组成 源程序
编译原理
第一章 引论
5.代码优化
任务
对于代码(主要是中间代码)进行加工变换, 以期能够产生更为高效(省时间和空间)的 目标代码 。
所做转换
中间代码
中间代码(优化后)
依据
程序等价变换规则
2018/11/14
主要理论基础
数据流方程
15
编译原理
第一章 引论
5.代码优化
示例
(1) M := I (2) N := J (3) K := 1 (4) if 100<K goto (9) (5) (6) (7) (8) (9)
源程序
词法分析 语法分析
单词符号 语法单位 中间代码
编译过程
中间代码生成 代码优化
中间代码(优化后)
目标代码
编译原理文档第一章

编译原理第一章编译程序概论使用过计算机的人都知道,多数用户是应用高级语言来实现他们所需要的计算的。
在计算机上执行高级语言程序一般分为两步:第一步,用一个编译程序把高级语言翻译成机器语言程序;第二步,运行所得的机器语言程序求得计算结果。
计算机语言由单一的机器语言发展到现今内容迥异的数千种高级语言,就是因为有了编译技术。
因此,对于计算机专业的学生来说,理解编译程序的工作原理显得尤其重要。
本章重点:编译程序概念、编译过程概述、编译程序的结构。
第一节什么是编译程序通常所说的翻译程序是指这样的一个程序,它能够把某一种语言(称为源语言)改造为另一种语言(称为目标语言),而后者与前者在逻辑上是等价的。
如果源语言是诸如FORTRAN、PASCAL、ALGOL或COBOL这样的“高级语言”,而目标语言是诸如汇编语言或机器语言之类的“低级语言”,这样的一个翻译程序就称为编译程序。
第二节编译过程概述编译程序完成从源程序到目标程序的翻译工作,是一个复杂的整体的过程。
从概念上来说,一个编译程序的整个工作过程是划分成阶段进行的,每个阶段将源程序的一种表示形式转换成另一种表示形式,各个阶段进行的操作在逻辑上是紧密连接在一起的,图1-2-1给出了一个编译过程的各个阶段,这是一种典型的划分方法。
事实上,某些阶段可能组合在一起,这些阶段间的源程序的中间表示形式就没必要构造出来了。
图1-2-1中将编译过程划分成了词法分析、语法分析、中间代码生成,代码优化和目标代码生成六个阶段,我们将分别介绍各阶段的任务。
另外两个重要的工作:表格管理和出错处理与上述六个阶段都有联系。
编译过程中源程序的各种信息被保留在种种不同的表格里,编译各阶段的工作都涉及到构造、查找或更新有关的表格,因此需要有表格管理的工作。
如果编译过程中发现源程序有错误,编译程Array序应报告错误的性质和错误发生的地点,并且将错误所造成的影响限制在尽可有小的范围内,使得源程序的其余部分能继续被编译下去,有些编译程序还能自动校正错误,这些工作称之为出错处理。
编译原理演示文稿1

例: 根据平面几何的命题生成作图程序。在一个输入环境中, 输入:已知三角形的二条角平分线相等,求证:该三角形是 等腰三角形。系统先检验其有效性,如:是否能构成二条角 平分线相等的等腰三角形等。在说明有效的前提下产生相应 的若干画直线的语句的作图程序 。最后证明其结论。 这样程序生成器引出了一个新的领域,它介于应用域 和目标程序域之间的域,称之为程序生成器说明域。从而说 明间距变为从应用域到程序生成器说明域之间的间距。由于 这一间距往往比从应用领域到目标程序域的间距要小得多, 这样间距的缩小提高了程序的可靠性。从而使设计者可程序 员为将生成的程序编写说明书更加容易。由程序生成器域到 目标程序域之间的大量工作量都是有生成器来完成的,减少
语言处理程序主要提供了一种语言到另一种语言的变换, 由于高级语言使用方便,目前绝大多数用户使用高级语言设 计应用软件。因此解释和说明高级语言是如何运行的,对理 解语言处理程序来说是十分必要的。高级语言通过称为编译 程序的语言处理程序把它们翻译成称为目标语言的机器语言 或汇编语言一类低级语言,然后使用填补执行间距的软件得 到机器语言程序,运行机器语言程序获得最终结果。
英()译中(文)
识别单词 单词组成短语或句子 分析确定短语或句子含义 调整修饰形成草稿 謄写定稿
编译过程
词法分析 语法分析 语义分析与中间代码生成 代码优化 目标代码生成
另外还需说明的是编译的每个阶段都和表格管理和出错 管理都有联系。编译过程中源程序的各种信息被保留在相应 的表格中,如:标识符的先说明后使用问题、过程式或函数 的形式参数和实在参数的个数和类型的一致性问题通常都是 通过填查表来解决的。 因此编译各阶段的工作都会涉及到构造、查找或更新有关的 表格内容,也就需要有表格管理的工作;如果编译过程中发 现源程序有错误,从用户的角度来看,希望编译程序能指出 错误的位置和性质,以便方便快速地查找自已的错误。因此 编译程序应尽可能地报告错误的性质和错误发生的位置,可 能的话自动校正错误或者从错误的状态恢复成可以其余部分 能继续编译下去,并将相关联的错误缩小到尽可能小的范围 内,这些工作称之为出错处理。
编译原理第1章

第1章 引 言 4.其他面向特定应用领域的语言 .
无法显示图像。计算机可能没有足够的内存以打开该图像,也可 能是该图像已损坏。请重新启动计算机,然后重新打开该文件。 如果仍然显示红色“x” ,则可能需要删除该图像,然后重新将其插 入。
随着计算机应用领域的不断拓展,先后出现了多种面向特 定应用领域的高级语言,如面向互联网应用的HTML、XML, 面向计算机辅助设计的MATLAB,面向集成电路设计的VHDL、 Verilog,面向虚拟现实的VRML等等。这些形形色色、多不胜 数的计算机语言推动了计算机应用的飞速发展,使得计算机成 为人类生活中不可缺少的重要部分。
第1章 引 言
无法显示图像。计算机可能没有足够的内存以打开该图像,也可 能是该图像已损坏。请重新启动计算机,然后重新打开该文件。 如果仍然显示红色“x” ,则可能需要删除该图像,然后重新将其插 入。
图1.2 编译器与解释器工作方式的对比 (a) 编译器的工作方式;(b) 解释器的工作方式
第1章 引 言
第1章 引 言 3.形式化描述语言 .
无法显示图像。计算机可能没有足够的内存以打开该图像,也可 能是该图像已损坏。请重新启动计算机,然后重新打开该文件。 如果仍然显示红色“x” ,则可能需要删除该图像,然后重新将其插 入。
形式化描述语言的代表之一是编译器构造中常用的工具 YACC的语言。这类语言的核心部分是基于数学基础的产生式, 设计人员只需利用产生式描述语言结构的文法,就可以构造出 识别该语言结构的识别器。
第1章 引 言
无法显示图像。计算机可能没有足够的内存以打开该图像,也可 能是该图像已损坏。请重新启动计算机,然后重新打开该文件。 如果仍然显示红色“x” ,则可能需要删除该图像,然后重新将其插 入。
编译原理第一章PPT课件

掌握编译原理有助于提高程序员对程序性能、代码质量和软件
03
工程实践的理解。
编译原理的应用领域
编译器设计
编译原理的核心应用领域之一 是编译器设计,包括源代码到
目标代码的转换、优化等。
解释器设计
解释器是另一种将源代码转换 为机器码的程序,编译原理同 样适用于解释器的设计。
程序分析
编译原理中的一些技术可以用 于程序分析,例如静态分析、 动态分析和程序切片等。
从高级语言的设计开始,逐步向下设计低级语言和机器语言。
数据结构和算法选择
选择合适的数据结构和算法,提高编译器的性能和可维护性。
代码优化
在生成目标代码之前,对中间代码进行优化,以提高目标代码的性能 和质量。
04 语言与语法
语言的定义与分类
总结词
语言的定义与分类是编译原理的重要基础,它涉及到语言的语法、语义和语用等方面。
语言的语义分析
总结词
语义分析是编译过程中的重要环节,它涉及 到对语言意义的解释和理解。
详细描述
语义分析是对源代码进行静态分析的过程, 目的是理解源代码的意义和功能。在语义分 析阶段,编译器会检查源代码中是否有语法 错误、类型错误、逻辑错误等,并对其进行 相应的处理。同时,语义分析还会进行符号 表管理、类型检查、控制流分析等工作,以
详细描述
中间代码生成是编译过程的第三步,其主要任务是将抽象语法树转化为中间代码。中间代码是一种抽象的、与具 体机器无关的代码形式,通常采用三地址码、四元式等表示方式。中间代码的主要目的是为了方便后续的优化和 目标代码生成。
代码优化
总结词
对中间代码进行优化,提高执行效率。
详细描述
代码优化是编译过程中非常重要的一步,其主要任务是对中间代码进行优化,以提高生成的目标代码 的执行效率。常见的优化技术包括常量折叠、无用代码删除、循环展开等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编译程序在计算机系统中的所在层
2、高级语言程序的处理过程
⑴ ⑵ ⑶ ⑷ 预处理:将源程序汇集在一起,如文件合并,宏展开等任务。 编译生成目标程序 汇编程序翻译成机器代码 装配/连接库程序生成可运行代码
3、编译程序技术的发展
推动编译技术发展的因素 语言范型(计算模式) 计算机体系结构 编译实现方式的发展 -手工 机器语言 汇编 系统程序设计语言 -自动构造工具lex yacc gcc
编译过程的6 编译过程的6个阶段:
1、 词法分析 是从左到右逐个读取源程序字符进行扫描和分解, 是从左到右逐个读取源程序字符进行扫描和分解,从而识别成一个个 单词。 单词。 2、 语法分析 是编译过程的第二个阶段。 是编译过程的第二个阶段。在词法分析的基础上将当单词序列分解成 各类语法短语(语法单位) 其本质上是对源程序进行结构分析, 各类语法短语(语法单位)。其本质上是对源程序进行结构分析,确定 输入串是否构成一个语法上正确的程序。 输入串是否构成一个语法上正确的程序。 应用语法树表示语法单位。 应用语法树表示语法单位。 语法分析的依据是语言的语法规则,即描述程序结构的规则。程序 语法分析的依据是语言的语法规则,即描述程序结构的规则。程序 结构通常是由递归规则表示的。例如表达式、语句的定义。 结构通常是由递归规则表示的。例如表达式、语句的定义。
低级语言程序 (目标程序)
来自计算机百科全书的定义
软件:计算机系统中的程序及其文档。 系统软件:居于计算机系统中最靠近硬件的一层,其他软件一般都 通过系统软件发挥作用。他和具体的应用领域无关,如编译系 统和操作系统等。 语言处理系统:把软件语言书写的各种程序处理成可在计算机上执 行的程序。 软件语言:用于书写软件的语言。它主要包括需求定义语言,功能 性语言,设计性语言,程序设计语言以及文档语言。
课程要求
学生要求: 学生要求:
程序设计语言(基本概念、语法规则、主要机制及语义)及 其编程能力 数据结构
课程学习要求: 课程学习要求:
编译程序的技术和方法需要从理论和实践两个环节学习和掌 握,对理论学习部分要做一些笔头练习,也要掌握应用这些理论的 工具的使用。课程提供的PL/0编译程序一定要理解透彻。 工具的使用。课程提供的PL/0编译程序一定要理解透彻。 ① 首先花功夫将PL/0编译程序读懂,最好用一些例子运行它。 首先花功夫将PL/0编译程序读懂,最好用一些例子运行它。 ② FA、LL(1)和LR部分多做一些练习题。 FA、LL( LR部分多做一些练习题。 ③ 使用Lex(或Flex),Yacc(或Bison)做一些小型编译器, 使用Lex( Flex),Yacc( Bison) 最好支,循环和函数调用等语句时,四元式的生成 通常要比上述例子复杂些。比如源程序: if ( a <= b) a = a – c; c = b * c; 翻译成的四元式: t1 = a > b if t1 goto L t2 = a – c a = t2 L : t3 = b * c c = t3
例如上述的中间代码生成如下的汇编代码: 例如上述的中间代码生成如下的汇编代码
MOV MUL MOV ADD MOV
id3, #10.0, id2, R1, R1,
R2 R2 R1 R2 id1
1.2.2 编译程序结构
编译过程的6 编译过程的6个阶段的任 务,可以分别由6 务,可以分别由6个模块完 成,即词法分析程序、语法 分析程序、语义分析程序、 中间代码生成程序、优化代 码生成程序。另外还包括表 格管理程序和出错处理程序, 他们与6 他们与6个阶段都有联系。 编译过程中源程序的各 种信息被保留在种种不同的 表格里,编译的各个阶段都 涉及到相关表格的构造、查 找或更新。
1.3 编译程序和一些软件工具
1.3.1 解释程序
1、编译和运行是两个独立分开的阶段,不太适合交互环境。 2、在交互环境下,可由解释程序来实现边翻译边执行。 解释程序接受某个语言的源程序并立即运行。 解释程序接受某个语言的源程序并立即运行。其工作模式是一个个 的获取、分析并执行源程序语句,一旦第一个语句分析结束, 的获取、分析并执行源程序语句,一旦第一个语句分析结束,源程序 开始运行。 开始运行。 例如:BASIC语言解释程序、LISP语言解释程序、UNIX命令语言( 例如:BASIC语言解释程序、LISP语言解释程序、UNIX命令语言(shel l)解释程序、数据库查询语言SQL解释程序、Java 语言BYTECODE 解释 解释程序、数据库查询语言SQL 解释程序、Java语言BYTECODE解释 程序等。 程序等。 3、 编译和解释程序的工作模式与存储组织
5、代码优化 是对前阶段产生的中间代码进行变换或进行改造, 是对前阶段产生的中间代码进行变换或进行改造,目的是使生成的目标 代码更为高效,省时间和省空间。 代码更为高效,省时间和省空间。 采用公共表达式的删除、强度削弱、循环优化等方法进行优化。 采用公共表达式的删除、强度削弱、循环优化等方法进行优化。 上述中间代码生成的实例可优化为: (*,id3,10.0,t1) id3 10. (+,id2,t1,id1) id2 id1 6、目标代码生成 其任务是把中间代码变换成特定机器上的绝对指令代码或可重定位的指 其任务是把中间代码变换成特定机器上的绝对指令代码或可重定位的指 令代码或汇编指令代码。这是编译的最后阶段, 令代码或汇编指令代码。这是编译的最后阶段,它的工作与硬件系统结 构和指令含义有关,涉及到硬件系统的功能部件的应用、 构和指令含义有关,涉及到硬件系统的功能部件的应用、机器指令的选 择和各种数据类型变量的存储空间分配以及寄存器和后援存储器的调度 等。
交叉编译
编译程序在一个机器(宿主机)上运行,产生另一个机器(目标机)的汇 编语言。嵌入式系统中的应用程序正是借助这样的编译程序生成。
并行编译技术
高级语言之间转换工具
编译技术在其它软件中的应用
1.2 编译过程和编译程序的结构
1.2.1 编译过程概述
一个编译程序整个过程是划 分阶段进行的,每个阶段将源程 序的一种表示形式转换成另一种 表示形式,各个阶段进行的操作 在逻辑上是紧密连接在一起的。 源程序 词法分析 语法分析 语义分析 中间代码生成 代码优化 目标程序
1.1 什么是编译程序
1、编译程序的定义和功能
编译程序就是一个语言翻译程序,把一种语言(源语言) 编译程序 书写的程序翻译成另一种语言(目标语言)的等价程序。 源语言通常是一个高级语言,如FORTRAN,C 或Pascal。 目标语言通常是一个低级语言,如汇编或机器语言。
高级语言程序 (源程序)
编译程序
编 译 原 理
(第2版)
张素琴、吕映芝等编著 清华大学出版社出版
课程目标
清楚地理解编译程序是如何工作的。 清楚地理解编译程序是如何工作的。 基本掌握程序设计语言的主要特性和实现途径。 基本掌握程序设计语言的主要特性和实现途径。 学习使用编译构造工具如Lex Yacc。 学习使用编译构造工具如Lex、Yacc。 Lex、 学习应用一些标准的分析算法和技术解决相关软件的问题。 学习应用一些标准的分析算法和技术解决相关软件的问题。
1.2.3 编译阶段的组合
1、前端:这些阶段的工作主要依赖于源语言,而与及 前端:这些阶段的工作主要依赖于源语言,而与及 其目标机器无关,如词法、语法、语义分析和中间 代码和代码优化阶段。 后端:代码生成阶段依赖于目标机。 2、后端:代码生成阶段依赖于目标机。 3、编译程序前端加上相应不同的后端则可以为不同的 机器构成同一个源语言的编译程序。 4、不同语言编译的前端生成同一种中间语言,再使用 一个共同的后端,则可为同一机器生成不同语言的 编译程序。
第1章 引 论
【学习目标】 学习目标】
◇ 明确编译程序的功能及其在计算机系统中的作用。 ◇ 了解源语言程序被编译为目标程序的整个过程,这个过程一 般划分为哪些阶段。 ◇ 知道编译技术可用于哪类软件的设计和开发。
【本章重点】 本章重点】
◇ ◇ ◇ ◇ 编译程序的概念、功能 编译6个过程 编译6 编译程序结构 解释程序的概念、特点
图1.4 语句id1:=id2+id3*10的语法树
图1.5 语句id1:=id2+id3*10的语法树的另一种形式
3、语义分析 其任务是审查源程序有无语义错误,为代码生成阶段收集类型信息。 其任务是审查源程序有无语义错误,为代码生成阶段收集类型信息。 源程序中有些语法成分,按照语法规则去判断,它是正确的, 源程序中有些语法成分,按照语法规则去判断,它是正确的,但它 不符合语义规则。 不符合语义规则。比如使用了没有声明的变量;或者给一个过程名赋 值;或者调用函数时参数类型不合适或者参加运算的两个变量类型不 匹配等等。 匹配等等。比如下边的程序片段: Int arr[2],c; arr[2],c; c = arr1 * 10 ; arr1 其中的赋值语句是符合语法规则的,但是因为没有声明变量arr1 其中的赋值语句是符合语法规则的,但是因为没有声明变量arr1,而 存在语义错。 存在语义错。
源程序 初始数据 图 解释程序的工作模式
解释程序
计算结果
编译和解释程序存储组织图
源程序缓冲区 名字表 目标代码缓冲区 编译用源程序中间表示 各种表格
目标代码区 数据区
(A)编译阶段存储区内容 解释系统 源程序
(B)运行阶段存储区内容
工作单元名字表 标号表 缓冲区(输入输出) 栈区 (C)解释程序的存储区内容
图1.6 插入语义处理结点的树
语义分析主要的任务
完成静态语义审查和处理 上下文相关性审查 类型匹配审查 类型转换
4、 中间代码生成 在进行了语法和语义分析阶段工作之后, 在进行了语法和语义分析阶段工作之后,便将源程序变成一种内部表示 形式,这种内部表示形式叫做中间语言或中间代码。它是一种结构简单、 形式,这种内部表示形式叫做中间语言或中间代码。它是一种结构简单、 含义明确的记号系统。 含义明确的记号系统。 记号系统的设计原则:容易生成和将它翻译成目标代码。 记号系统的设计原则:容易生成和将它翻译成目标代码。很多编译程序 采用的三指令四元式中间代码: 采用的三指令四元式中间代码: (运算符,运算对象1,运算对象2,结果) 运算符,运算对象1 运算对象2 结果) 例如源程序,sum=first+count*10 例如源程序,sum=first+count*10 生成的四元式如下: (inttoreal,10,-,t1) inttoreal,10, (* ,id3,t1,t2) id3 (+ ,id2,t2,t3) id2 (:= ,t3,-,id1) id1