计算机程序编译原理 第1章 引论
编译原理第一章编译原理引论
编译器技术的应用
针对计算机体系结构的优化 计算机体系结构的迅速演化引起对新的编译器技术一种不知足的需要 并行化 • 编译器重新整理指令,使得指令级并行更有效 • 编译器从传统的串行程序自动生成并行代码,使之运行于多处理器上 内存分层 • 编译器优化历来集中在优化处理器的执行上,但是现在更强调要使内存分层更有效
编译器技术的应用
程序翻译 二进制翻译 • 编译器技术可用于把一种机器的二进制代码翻译成另一种机器的代码,以运行原先为别的指令 集编译的代码 数据库查询解释器 • 数据库查询由一些谓词组成,这些谓词由包含关系运算的布尔表达式组成,可以被解释执行,也 可以被编译成搜索数据库的命令
编译器技术的应用
提高软件开发效率的工具 源于编译器中代码优化技术的程序分析一直在
改进软件开发效率 类型检查
类型检查是一种捕捉程序中前后不一致的成熟并且有效的技术 边界检查
数据流分析技术可用来定位缓冲区溢出 内存管理
自动的内存管理删除内存泄漏等内存管理错误
内容提要
编译器构造法的研究目的 编译器的结构
编译的基本原则 编译器应有的性质 编译器技术的应用 关于学习编译原理
5.代码优化
temp1 = inttoreal(60) temp2 = id3 * temp1 temp3 = id2 + temp2 id1 = temp3
代码优化器
temp1 = id3 * 60.0 id1 = id2 + temp1
任务:对于前阶段产生的中间代码进行加工 变换,以期在最后阶段产生更高效的目标代 码。
化的新研究 支持用户定义的聚合数据类型和高级控制流,如数组和记录、循环和过程调用:C、Fortran 面向对象的主要概念是数据抽象和性质继承,使得程序更加模块化并易于维护:Smalltalk、
编译原理第1章-编译引论(原)
1.4 编译器的功能结构
• 考虑 “自然语言翻译”过程:从中文到英文
• 你能够通过自己的努力实现你的梦想!
识别单词
检查语法
检查语义
翻译
• 你能够通过自己的努力实现你的梦想!
You can put your dreams into reality through your efforts!
-28-
-29-
1.4 编译器的功能结构
-30-
1.4 编译器的功能结构
表处理
词
语
语
中
源
法
法
义
间
程
分
分
分
代
序
析
析
析
码
生
成
中
目
间
标
目
代
代
标
码
码
程
优
生
序
化
成
分析
错误处理
综合
-31-
1.4 编译程序的功能结构分解
if (x==j) z=0; else z=1;
词法分析
– 扫描源程序的字符流; if ( id eq id ) id ass 0 ; else id ass 1 ;
等价的另一种语言(目标语言)编写的程序。
错误
源程序
编译器
目标程序
• 目标程序若是可执行的机器语言程序,则可以被用户调用,处理输入并产生 输出。
输入
目标程序
输出(结果)
• 目标程序若是汇编语言的程序,则须经汇编器汇编后方可执行。 • 编译器的重要任务之一是报告它在翻译过程中发现的源程序中的错误。
-17-
-14-
第1章 编译引论 √ 1.1 程序设计语言及其历史
编译原理课后习题答案+清华大学出版社第二版
用以引用非局部(包围它的过程)变量时,寻找该变量的地址。 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
《编译原理》课后习题答案第一章
合实现方案,即先把源程序翻译成较容易解释执行的某种中间代码程序,然后集中解释执行 中间代码程序,最后得到运行结果。
编译原理第三版课后习题答案
编译原理第三版课后习题答案编译原理是计算机科学中的一门重要课程,它研究的是如何将高级程序语言转换为机器语言的过程。
而《编译原理》第三版是目前被广泛采用的教材之一。
在学习过程中,课后习题是巩固知识、提高能力的重要环节。
本文将为读者提供《编译原理》第三版课后习题的答案,希望能够帮助读者更好地理解和掌握这门课程。
第一章:引论习题1.1:编译器和解释器有什么区别?答案:编译器将整个源程序转换为目标代码,然后一次性执行目标代码;而解释器则逐行解释源程序,并即时执行。
习题1.2:编译器的主要任务是什么?答案:编译器的主要任务是将高级程序语言转换为目标代码,包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等过程。
第二章:词法分析习题2.1:什么是词法分析?答案:词法分析是将源程序中的字符序列划分为有意义的词素(token)序列的过程。
习题2.2:请给出识别下列词素的正则表达式:(1)整数:[0-9]+(2)浮点数:[0-9]+\.[0-9]+(3)标识符:[a-zA-Z_][a-zA-Z_0-9]*第三章:语法分析习题3.1:什么是语法分析?答案:语法分析是将词法分析得到的词素序列转换为语法树的过程。
习题3.2:请给出下列文法的FIRST集和FOLLOW集:S -> aAbA -> cA | ε答案:FIRST(S) = {a}FIRST(A) = {c, ε}FOLLOW(S) = {$}FOLLOW(A) = {b}第四章:语义分析习题4.1:什么是语义分析?答案:语义分析是对源程序进行静态和动态语义检查的过程。
习题4.2:请给出下列文法的语义动作:S -> if E then S1 else S2答案:1. 计算E的值2. 如果E的值为真,则执行S1;否则执行S2。
第五章:中间代码生成习题5.1:什么是中间代码?答案:中间代码是一种介于源代码和目标代码之间的表示形式,它将源代码转换为一种更容易进行优化和转换的形式。
编译原理--第一章.讲义
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)
源程序
词法分析 语法分析
单词符号 语法单位 中间代码
编译过程
中间代码生成 代码优化
中间代码(优化后)
目标代码
编译原理:第一章 引论
常见的表格:符号名表,常数表,标号表,入 口名表,过程引用表。 格式:
名字
信息
合肥工业大学 计算机与信息学院软件所
例: PASCAL程序段:
PROCEDURE INCWAP(M,N:INTEGER); LABEL START; VAR K:INTEGER; BEGIN START: K:=M+1; M:=N+4; N:=K; END.
合肥工业大学 计算机与信息学院软件所
5. 目标代码产生
任务: 把中间代码变换成特定机器上的目标 代码。 依赖于硬件系统结构和机器指令的含义 目标代码三种形式:
绝对指令代码: 可直接运行 可重新定位指令代码: 需要连接装配 汇编指令代码: 需要进行汇编
合肥工业大学 计算机与信息学院软件所
合肥工业大学 计算机与信息学院软件所
4. 优化
任务:对于前阶段产生的中间代码进行加工变 换,以期在最后阶段产生更高效的目标代码。 主要包括:公共子表达式提取、合并已知量、 删除无用语句、循环优化等。 依循的原则:程序的等价变换规则
FOR K:=1 TO 100 DO BEGIN X:=I+1; M := I + 10 * K; N := J + 10 * K; END
合肥工业大学 计算机与信息学院软件所
语法分析举例说明
C语言程序 Void jisuan() { int y,c,d; float x,a,b; x=a+b*50; y=c+)d*(x+b; } 现在我们对x=a+b*50; 进行语 法分析。
赋值语句的语法 规则: A V=E E T|E+T T F|T*F F V|(E)|C V 标识符 C 常数
编译原理-第一
并行化编译技术
目的:提高并行计算机体系结构的性能。 超大规模计算的日益增长的需求 高性能计算机
第一章 引论
1.1 什么是编译程序 1.2 编译过程和编译程序的结构 1.3 研究领域 参考书
1。1 什么是编译程序
功能
高级程 序设计 语言书 写的程 序 术语 编译程序 低级语言 程序
源语言(程序)
目标语言(程序) 实现语言
S
I
O
1。1 什么是编译程序
分类
软件 系统软件 语言处理系统
代码优化
id1:= id2 + id3 * 60
(1) (2) (3) (4) (inttoreal ( ( ( * + := 60 id3 id2 t3 t1 t2 t1 t2 t3 id1 ) ) ) )
变换
(1) ( * id3 id2 60.0 t1 t1 id1 ) )
( 2)( +
解释程序直接将4的值输出(显示)
编译阶段和运行阶段存储结构
源程序缓冲区 名字表 目标代码缓冲区 数据区 编译用源程序中 间表示各种表格 目标代码区
编译时
运行时
解释系统存储结构
解释系统 源程序
工作单元
名字表
标号表
缓冲区 (输入输出) 栈区
1.3 研究领域
并行编译技术 交叉编译技术 硬件描述语言及其编译技术
骨架程序 预处理器 源程序
编译器
可重定位目标文件库 汇编器
目标汇编程序
可重定位机器代码
装配连接编辑
一个语言处理系统
绝对机器码
什么是编译程序
《编译原理》教学大纲
《编译原理》教学大纲一、课程概述编译原理是计算机科学与技术专业的一门重要课程,也是软件工程领域的基础课程之一、本课程通过对编译器的原理和实现技术的学习,使学生掌握编译器的设计和实现方法,培养学生独立解决实际问题的能力。
二、教学目标1.理解编译器的基本原理和工作流程;2.掌握常见编译器的构建方法和技术;3.能够设计和实现简单的编译器;4.培养分析和解决实际问题的能力。
三、教学内容和教学进度1.第一章:引论1.1编译器的定义和分类1.2编译器的基本工作流程2.第二章:词法分析2.1编译器的基本结构2.2词法单元的定义和识别方法2.3正则表达式和有限自动机3.第三章:语法分析3.1语法分析的基本概念3.2语法规则的定义和表示方法3.3自顶向下的语法分析方法3.4自底向上的语法分析方法4.第四章:语义分析4.1语义分析的基本概念4.2属性文法和语法制导翻译4.3语义动作和符号表管理5.第五章:中间代码生成5.1中间代码的定义和表示方法5.2基本块和控制流图5.3三地址码的生成方法6.第六章:优化6.1优化的基本概念和原则6.2常见的优化技术和方法6.3编译器的优化策略7.第七章:目标代码生成7.1目标代码生成的基本原理7.2目标代码的表示方法和存储管理7.3基本块的划分和目标代码生成算法8.第八章:附加主题8.1解释器和编译器的比较8.2面向对象语言的编译8.3并行编译和动态编译四、教学方法1.理论教学与实践相结合,注重教学案例的分析和实践;2.引导学生主动探索,注重培养学生的自主学习能力;3.激发学生的兴趣,鼓励学生提问和讨论。
五、考核方式1.平时成绩:包括课堂测验、作业和实验报告等;2.期末考试:闭卷笔试,主要考查学生对编译原理的理论知识和实践能力的掌握程度。
六、参考教材1.《编译原理与技术》(第2版),龙书,机械工业出版社,2024年2.《现代编译原理-C语言描述》(第2版),谢路云,电子工业出版社,2024年七、参考资源1. 实验环境:Dev-C++、gcc、llvm等2.相关网站:编译原理教学网站、编译器开源项目等八、教学团队本课程由计算机科学与技术学院的相关教师负责教学,具体安排详见教务处发布的教学计划。
编译原理(第一章引论)
• 1.1程序设计语言与编译 • 2)程序设计语言的转换(续) • 编译的转换过程
– 两阶段转换:编译----运行 – 三个阶段的转换:编译----汇编----运行
1.1程序设计语言与编译 • 2)程序设计语言的转换(续)翻译 • 编译 • 解释
– 以源程序作为输入,不产生目标程序,一边解 释一边执行。 – 优点:直观易懂,结构简单,易于实现人机对 话 – 缺点:效率低
学习任务
• 1、掌握编译的理论基础和形式化系统 • 2、了解编辑的全过程以及具体实现方法
学习方法
• 1、认真听课,认真理解书中的基本概念、 基本原理与基本算法 • 2、弄懂书中的例题与习题 • 3、在看书时或理解立体时,一定要划出相 应的细节变化过程,通过画图来加深理解 • 4、在理解的基础上记忆 • 5、理论与实践结合
• 1.2编译程序概述 • 编译程序的工作 • 先看自然语言的翻译
– 1、识别出句子中的一个个单词 – 2、分析句子的语法结构 – 3、根据句子的含义进行初步翻译 – 4、对译文进行修饰 – 5、写出最后译文
• 1.2编译程序概述 • 编译程序的工作
– 词法分析 – 语法分析 – 语义分析和中间代码生成 – 优化 – 目词法分析(续) • 词法分析依照词法规则,识别出正确的单词,转 换成统一规格,备用。 • 转换
– – – – 对基本字、运算符、界限符的转换 标示符的转换 常数的转换 转换完成后的格式(类号+内码)
• 描述词法规则的有效工具是正规式和有限自动机
• 1.2编译程序概述 • 2、语法分析 • 任务:在词法分析的基础上,根据语言的 语法规则,把单词符号组成各类的单词单 位:短语、子句、语句、过程、程序。 • 语法规则:语言的规则,称为文法;规定 单词如何构成短语、语句、过程和程序。 • 语法规则的表示: • BNF A :: = B | C
编译原理-第一章
本章主要介绍为什么需要编译程序以及编译程序的功 能、体系结构、工作过程、组织方式,编译程序与高级程 序设计语言的关系,以及编译自动化和并行编译程序等方 面的基本知识。
1.1 翻译程序
1.1.1 程序设计语言 介绍了程序设计语言的发展
1.1.2 翻译语言 翻译程序将高级语言编写的程序翻译成机器语言
1. 自动产生编译程序的“编译程序的编译程序” (Compiler-Compiler)。只要给出某一高级程序语 言的语法规则和语义描述,这类程序就能自动地生成 相应语言的编译程序。
2. 面向语法的符号加工程序。这类程序比较通用。 3. 由可扩充语言组成的集合。这类TWS允许程序员利用
已有的数据类型和语句去定义新的数据类型和语句。
编译总控
Comp1
内
外
存
Comp1
覆盖
Comp2
…
存
Compn
扫描对象
部分处理结束
加工 结果
输入 对象
编译程序组织方式
1.6 编译程序的其他有关技术
❖ 编译程序的自展技术 ❖ 编译程序的移植 ❖ 编译程序的自动化 ❖ 程序的可再入性
编译程序的自展技术
按照自展技术,需要把源语言L分解成一个核心部分L0 与扩充部分L1,L2,…,Ln。
编译程序的自动化
❖ 在编译程序自动化进程中,开发早且应用广泛的 是词法分析程序生成器和语法分析程序生成器。
❖ 词法分析程序生成器:LEX(详见第13章)。它输入的是
正规表达式,输出的是词法分析程序。LEX的基本思想是由正规表 达式构造有穷自动机。
❖ 语法分析程序生成器:基于LALR(1)文法的YACC(Yet
1.5 编译程序的组织方式
编译原理引论-编译原理-01-(一)
教学目的——《编译原理》是一门非常好的课程
Alfred
V.Aho:编写编译器的原理和技术 具有十分普遍的意义,以至于在每个计算 机科学家的研究生涯中,本书中的原理和 技术都会反复用到 据变换(既抽象,又实际)
涉及的是一个比较适当的抽象层面上的数
既有一些具体的表示和变换算法;又是针
口译与笔译(单句提交与整篇提交)
输入数据
源程序
解释程序
计算结果
2013-8-22
27
1.2 翻译系统
编译程序(Compiler)
高级语言程序→汇编/机器语言程序
高级语言 源程序
编译程序
汇编/机器语 言目标程序
2013-8-22
28
1.2 翻译系统
SourceProgram Compiler ObjectProgram Input RunSystem Output
‚轮子‛与人类的认识
2013-8-22
17
学习方法
理论:使自己‚站到巨人的肩膀上‛,并拥有一个 ‚智慧的脑‛ ——增加问题求解和探索的主动性
实践:用智慧的脑,练就一双灵巧的手,开创一个新 世界——希望创新性实践 在理论指导下实践,强化理论与实践相结合能力的培 养
读书:强化基础 在独立思考之前,必须先有基础知识。所谓‚获得基础 知识‛并不是形式上读过某门课程,而是将学过的东西 真正弄懂
多年努力争取到的权利 美国心理学家阿贝尔.梅拉别思: 信息总效果=文字27%+音调38%+面部表情35%
2013-8-22 16
学习方法
复习、做作业、讨论:勤于思考
博览、多思(学而不思则罔、思而不学则怠;
第1章 编译原理-引论
主要理论基础
构词规则
15
正则文法 自动机理论
1.2 编译程序的组成部分
❖1.词法分析
示例 ppoossiittiioonn ::== initial ++ rate * 60 ;;
单词类型 标识符(id1) 算符(赋值) 标识符(id2) 算符(加号) 标识符(id3) 算符(乘号) 整数 分号
单词值 position := initial + rate * 60 ;
▪ 张素琴,吕映芝等. 《编译原理》(第二版),清华大学 出版社
▪ 丁文魁,杜淑敏. 《编译原理和技术》,电子工业出版 社
❖ 推荐阅读
▪ 陈火旺,刘春林等.《程序设计语言编译原理》(第3版), 国防工业出版社
▪ Terence Parr. 《编程语言实现模式》,华中科技大学出 版社
4
第一章 引论 ❖编译程序概念 ❖编译程序的组成部分 ❖编译程序的组织 ❖编译程序的生成
▪ 特点:能支持交互环境,翻译一次执行一次。可移植性好,易于查错,
但速度慢
源程序 数据
解释程序
执行结果
9
❖示例
…… b:=2; a:=b+2; write a; ……
1.1 编译程序概念
…….
MOV #2.0 R1
MOV R1 b
编译程序 生成代码
MOV b ADD R1
R1 R2
执行
MOV R1 a
❖2.语法分析
示例 position := initial + rate * 60 ;
规则(扩展的巴赋克值斯语-瑙句:尔=范式EBNF)
<<赋表标值达识语式符p句>o:>s:=i:t:<i=o表:<n=标达识式符>表“>达“+式+”:=<”表<达表式达>式>
编译原理第一章 编译引论
动态存储分配
1> 静态存储分配
若在编译时能完全确定程序所需空间大小,并能确定每个数 据项的地址,就可在编译时分配所需空间,这种分配方法称为静态 存储分配.
内情向量表组织如下:
L1
u1
d1
L2
u2
d2
Ln
un
dn
a
c
n
elemlength
17
整理课件
3)结构类型------- 记录
是由多种类型的数据组合起来的一种数据结构。Pascal 语 言中,可如下定义一种记录类型
type < 记录类型名> = record <域名 1>:<类型1>; <域名 2>:<类型2>;
26
整理课件
1>传值 调用程序把实际参数的值传递到形式参数的空间中.
a1 1 b1 1 a2 4 b2 5
x1 1 y1 1 x2 4 y2 5
主程序空间
子程序空间
这种方式,子程序一般不改变实际参数的值.
27
整理课件
2>传地址 调用程序把实际参数的地址传递到形式参数的空间中.
a1 1 b1 1 a2 4 b2 5
type <类型名> = set of <基类型>; <类型名> = array of <基类型>; <类型名> = record
end;
21
整理课件
2> 变量说明段 var <变量名表<类型2>;
<变量名表n>:<类型n>; 3> 函数及过程定义
function <函数名> (参数说明):<函数类型>; <函数体>; procedure <过程名> (参数说明) ; <过程体>; 4> 赋值句
编译原理—第1章 引论
转换成如下的等价代码:
序号 OP ARG1 ARG2 RESUL 注 解
(1) (2) (3) (4) (5) (6) (7) (8) (9)
:= := := j< + + + j
I J 1 100 M N K
K 10 10 1
M N K (9) M N K (4)
M:=I N:=J K:=l if ( 100 < k ) goto ( 9 ) M:=M+10 N:=N十 10 K:=K+l goto(4)
词法分析是一种线性分析,而语法分析是一种层次结构分析。 例如,在很多语言中,符号串 z:=X十0.618*Y 代表一个“赋值语句”,而其中的 X+0.618*Y代表一个“算术 表达式”。因而,语法分析的任务就是识别 X+0.618*Y为算术 表达式,同时,识别上述整个符号串属于赋值语句这个范畴。
第三阶段,语义分析与中间代码产生(Semantic Analysis and Intermediate Generator)
源程序 (source program) 输入 图1.1 翻译程序 翻译程序 目标程序 (target program) 输出
翻译程序根据所处理的对象和实现的途径不同又分为: 汇编程序、编译程序和解释程序。
(2). 汇编程序(Assembler) 如果源语言是某种汇编语言,而目标语言是某种计算机的机 器语言,这样的一个翻译程序就称为汇编程序。
如果一个编译程序产生不同于其宿主机的机器代码。
(4)可变目标编译程序(Retargetable Compiler):
不需重写编译程序中与机器无关的部分就能改变目标机。
宿主机:运行编译程序的计算机。 目标机:运行编译程序所产生目标代码的计算机。
第一章 引论
第一章
引 论
代码优化示例
For k:=1 to 100 do begin m:=i+10*k; n:=j+10*k; end For k:=1 to 100 do begin t=10*k; m:=m+t; n:=n+t; end
第一章 引 论ຫໍສະໝຸດ 代码优化示例For k:=1 to 100 do begin m:=i+10*k; n:=j+10*k; end M=i;n=j;k=1 For k:=1 to 100 do begin m:=m+10; n:=n+10; end
第一章
引 论
1.3.4 遍
遍:对源程序或源程序的中间结果从头到尾 的一次扫描,并作有关的加工和处理, 的一次扫描,并作有关的加工和处理,生成 新的中间结果或目标程序。 新的中间结果或目标程序。 遍与各编译过程之间的关系:一遍可以包含 遍与各编译过程之间的关系: 几个阶段; 几个阶段;一个阶段的工作也可以分为若干 比如优化可以在多遍扫描中完成。 遍,比如优化可以在多遍扫描中完成。 编译程序的组织:依赖于源程序, 编译程序的组织:依赖于源程序,计算机的 硬件, 硬件,以及设计要求等
第一章 引 论
1.2.5 目标代码生成
这一阶段的任务:把中间代码( 这一阶段的任务:把中间代码(或经优化处 理后)变换成特定机器上的低级语言代码。 理后)变换成特定机器上的低级语言代码。 生成的目标代码的形式依赖于硬件系统结构 和机器指令含义。 和机器指令含义。 主要工作:存储空间的分配,寄存器的调度, 主要工作:存储空间的分配,寄存器的调度, 机器指令的选择等等 目标代码的形式:绝对指令代码; 目标代码的形式:绝对指令代码;可重定位 的指令代码; 的指令代码;汇编指令代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
词法分析
例. 某源程序片断如下: begin var sum , first , count : real ;
sum := first + count * 10
end. id1:=id2+id3*10
1. 保留字 2. 保留字 3. 标识符 4. 逗号 5. 标识符 6. 逗号 7. 标识符 8. 冒号 9. 保留字 10. 分号 11. 标识符 12. 赋值号 13. 标识符 14. 加号 15. 标识符 16. 乘号 17. 整数 18. 保留字 19. 界符
编译原理
Compileb163com@ 中山大学计算机科学系
课程要求
教学方式:理论(59)+实践(13) 考核方式:考试(70%)+作业和实验(30%) 先修课程:《离散数学》《数据结构》《汇编语言》 《程序设计语言》 参考书籍:
吕映芝等,《编译原理》,清华大学出版社 陈火旺等,《程序设计语言编译原理》,国防工业出 版社 李建中等译,《编译原理》,机械工业出版社 ([美]Alfred V.Aho,Ravi Sethi,Jeffrey D.Ullman, Compilers:Principles,Techniques,and Tools)
表格处理程序 语 义 分 析 成 程 序
中 间 代 码 生 成 程 序
源 程 序
词 法 分 析 程 序
语 法 分 析 程 序
中 间 代 码 优 化 程 序
目 标 代 码 生 成 程 序
目 标 程 序
出错处理程序
编译程序的组织方式
1、前端和后端 前端,主要依赖源程序,通常包括词法分析、语法分析、 语义分析、中间代码生成和中间代码优化。 后端,主要依赖硬件系统和机器指令系统,包括目标代码 生成。 2、分遍 遍:对源程序或中间代码程序,从头至尾扫描一次并完成 所规定的工作称为一遍。
第1章 引论
什么是编译程序 编译程序的工作过程 编译程序的结构 编译程序的组织方式 编译程序的自展、移植和自动化 编译程序的编写系统 并行编译程序 本章小结
翻译程序
程序设计语言 1、低级语言:机器语言、汇编语言 特点:用机器语言编写程序难写、难读、难修改、编写程 序的效率低下 2、高级语言:FORTRAN1、C语言等 特点:独立与机器、接近自然语言、编写程序难写、难读、 难修改、编写程序的效率高
编译程序编写系统
将有助于减轻编写翻译程序(包括编译程序、汇编程序、 解释程序)工作的任何软件系统或工具包,统称为翻译程 序编写系统(Translator Writing System, TWS)。TWS的 目的在于简化编译程序的实现。因此,TWS通常包含了编 译程序所必须执行的各种基本操作,如建立、查找符号表, 生成目标代码,出错处理等操作。 TWS可分为三类。(1)自动产生编译程序;(2)面向语 法的符号加工程序;(3)可扩充语言组成的集合。
并行编译程序
串行编译程序:适合于SISD结构计算机的编译程序。 并行编译程序:适合于SISD和MIMD结构计算机,并具 有并行处理功能的编译程序。 并行编译程序主要实现对并行语言的翻译。 SISD 单指令流单数据流,传统的单处理机属于SISD计 算机。 MIMD 多指令流多数据流,包括了大多数多处理机及多计 算机系统。我国的YH-II型计算机是这种类型的计算机。
翻译程序 计算机不能直接执行由用高级语言编写的程序,而只能执 行机器语言程序,因此,用高级语言编写的程序必须由一 个翻译程序翻译成机器语言程序。 翻译的方式:(1)编译方式;(2)解释方式
编译方式
编译程序 初始数据
源程序
编译即翻译
目标程序
运行 系统子程序
结果
先将源程序翻译成汇编语言或机器语言程序(目标程序),然 后再执行它。
小结
编译程序功能 编译程序工作过程 编译程序结构 编译程序组织方式 编译程序的自编性,自展性以及自动化 编译程序的编写系统 研究前沿:并行编译
习题一: 1.4. 1.5.
分遍的优点:多遍功能独立,相互联系简单,逻辑结构清 晰。缺点:增加了编译程序的长度和编译时间。
编译程序的自展、移植与自动化
1、高级语言的自编译性 高级语言的自编译性,是指可以用这个语言来编写自己 的编译程序。 2、编译程序的自展技术 具有自编译性的语言可以按照自展技术来构造其编译程序。 将源语言L分解成核心部分L0 与扩充部分L1,L2,…,Ln,使 得对核心部分L0的一次或多次扩充得到源语言L 3、编译程序的移植 编译程序可以通过移植得到。 4、编译程序的自动化 Lex:词法分析生成器 Yacc:语法分析生成器
id2
t3
t2
-
t3 )
id1)
目标代码生成
sum := first + count * 10 ( ( * + id3 id2 10.0 t1 id3, t1 ) id1 ) R2
MOVF MULF MOVF ADDF
#10.0, R2 id2, R1, R1 R2
MOV
R1,
id1
编译程序的结构
解释方式
解释程序
源程序
边翻译边执行
结果
和编译方式不同,解释方式并不事先生成目标程序然后再执行, 而是对源程序边解释边执行。
编译程序的工作过程
词法分析,扫描源程序,分解和识别出每个单词,并把单 词表示成相应的机内表示。 语法分析,把单词符号串分解成各类语法单位,如表达式、 语句等。 语义分析,对源程序进行语义检查,保证标识符和常数 的正确使用,为代码生成收集信息。 中间代码生成, 根据语义规则,将源程序表示成某种中 间代码的形式,如三元式,四元式等。 中间代码优化,调整和改变中间代码中某些操作的次序, 最终生成更加高效的目标代码。 目标代码生成,将中间代码转换成等价的目标代码。
四元式:(运算符,运算对象1,运算对象2,结果) 源程序 sum := first + count * 10 生成的中间代码可以是: ( inttoreal ( * 10 id3 t1 t1 ) t2 ) 优化后的代码 ( ( * + id3 id2 10.0 t1 t1 ) id1 )
( +
( :=
begin var sum (id1) , first (id2) , count (id3) : real ; sum := first + count * 10 end .
语法分析
赋值语句
id1:=id2+id3*10 的语法树 := 表达式 id1 表达式 id2 id3 表达式 + * 10
标识符 id1 sum
:= 表达式 标识符 id2 first (形式1) +
表达式
*
标识符 id3 count 整数 10
(形式2)
语义分析
id1:=id2+id3*10 的语法树 := id1 id2 id3 :=
+
* 10
id1 id2
+ *
语义 结点
id3
inttoreal 10
中间代码生成以及优化