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

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

1。4 编译程序与程序设计环境 。 编译程序无疑是实现高级语言的一个 最重要的工具。 最重要的工具。但支持程序设计人员进 行程序设计开发通常还需要其它一些工 如编辑程序、连接程序、 具:如编辑程序、连接程序、调试程序 等。编译程序与这些程序设计工具一起 构成所谓的程序设计环境。 构成所谓的程序设计环境。 程序设计环境 在一个程序设计环境中, 在一个程序设计环境中,编译程序起 着中心的作用。连接程序、调试程序、 着中心的作用。连接程序、调试程序、 程序分析等工具直接依赖于编译程序所 产生的结果,而其它工具的构造也常常 产生的结果, 要用到编译的原理、方法和技术。 要用到编译的原理、方法和技术。
第一章 引 论
1。3。5 编译前端与后端 。 。 前端主要由与源语言有关但与目标机无 前端主要由与源语言有关但与目标机无 关的那些部分组成。通常包括词法分析、 关的那些部分组成。通常包括词法分析、 语法分析、语义分析与中间代码产生, 语法分析、语义分析与中间代码产生, 有的代码优化工作,也可以包括在前端。 有的代码优化工作,也可以包括在前端。 后端包括编译程序中与目标代码有关的 后端包括编译程序中与目标代码有关的 部分,如与目标机有关的有关的优化, 部分,如与目标机有关的有关的优化, 和目标代码的生成等。 和目标代码的生成等。
第一章 引 论
第一章 引 论
1。5 编译程序的生成 。 以前构造编译程序大多是用机器语言 或汇编语言作工具的。 或汇编语言作工具的。为了充分发挥各 种不同硬件系统的效率, 种不同硬件系统的效率,为了满足各种 不同的具体要求, 不同的具体要求,现在许多人仍然使用 这种工具来构造编译程序( 这种工具来构造编译程序(或编译程序 的核心部分) 的核心部分) 但是越来越多的人已经使用高级语言 作工具来编译程序。 作工具来编译程序。因为这样可以大大 节省程序设计的时间, 节省程序设计的时间,热切构造出来的 编译程序易于阅读、维护和移植。 编译程序易于阅读、维护和移植。
编译原理,第一讲

什么是编译程序
编译程序 编译程序:把某一种高级语言程序转换成 与之在逻辑上等价的低级语言程序的程序 (如下图)。
高高机机源源 (源源源) 编编源源 计计机 低高机机源源 (目目源源)
01:36
14 of 60
高级语言程序的执行
分两个阶段
– 编译阶段 编译阶段:将源程序变换成目标程序 – 运行阶段 运行阶段:由所生成的目标程序连同运行系统 (数据空间分配子程序、标准函数程序等)接 受程序的初始输入数据,运行后输出计算结果。
7 of 60
内容提纲
课程简介 编译程序概述 编译程序的工作过程与结构 编译程序的开发和实现 构造编译程序的必备知识
01:36
8 of 60
机器语言
计算机每一种功能都通过一系列操作来实现 指令:计算机所能执行的每一种操作。 指令: 指令系统:计算机能够执行的全部指令集合。 指令系统: 机器语言:二进制形式的指令集合。 机器语言:
名字
01:36
信息
34 of 60
表格管理: PASCAL程序段 表格管理: PASCAL程序段
INCWAP(M, PROCEDURE INCWAP(M,N:INTEGER); LABEL START; VAR K:INTEGER; BEGIN START: K:=M+1; M:=N+4; N:=K; END.
01:36 6 of 60
课程考核
期末总成绩=期末笔试+平时 期末总成绩=期末笔试+ 考核: 考核: –平时成绩:约占30% 平时成绩 约占30% –笔试:约占70% 笔试 约占70% 考勤
–不定期点名,累计三次缺席者无平时成绩! 不定期点名,累计三次缺席者无平时成绩! 不定期点名
编译原理演示文稿1

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

掌握编译原理有助于提高程序员对程序性能、代码质量和软件
03
工程实践的理解。
编译原理的应用领域
编译器设计
编译原理的核心应用领域之一 是编译器设计,包括源代码到
目标代码的转换、优化等。
解释器设计
解释器是另一种将源代码转换 为机器码的程序,编译原理同 样适用于解释器的设计。
程序分析
编译原理中的一些技术可以用 于程序分析,例如静态分析、 动态分析和程序切片等。
从高级语言的设计开始,逐步向下设计低级语言和机器语言。
数据结构和算法选择
选择合适的数据结构和算法,提高编译器的性能和可维护性。
代码优化
在生成目标代码之前,对中间代码进行优化,以提高目标代码的性能 和质量。
04 语言与语法
语言的定义与分类
总结词
语言的定义与分类是编译原理的重要基础,它涉及到语言的语法、语义和语用等方面。
语言的语义分析
总结词
语义分析是编译过程中的重要环节,它涉及 到对语言意义的解释和理解。
详细描述
语义分析是对源代码进行静态分析的过程, 目的是理解源代码的意义和功能。在语义分 析阶段,编译器会检查源代码中是否有语法 错误、类型错误、逻辑错误等,并对其进行 相应的处理。同时,语义分析还会进行符号 表管理、类型检查、控制流分析等工作,以
详细描述
中间代码生成是编译过程的第三步,其主要任务是将抽象语法树转化为中间代码。中间代码是一种抽象的、与具 体机器无关的代码形式,通常采用三地址码、四元式等表示方式。中间代码的主要目的是为了方便后续的优化和 目标代码生成。
代码优化
总结词
对中间代码进行优化,提高执行效率。
详细描述
代码优化是编译过程中非常重要的一步,其主要任务是对中间代码进行优化,以提高生成的目标代码 的执行效率。常见的优化技术包括常量折叠、无用代码删除、循环展开等。
编译原理第1讲

CompilerPrinciples
15
§2.编译程序概述
一、翻译程序(Translator)
能够把一种语言程序(称为源语言 程序)转换成逻辑上等价的另一种 语言程序(称为目标语言程序)的 程序
CompilerPrinciples
16
任何非机器语言程序都需要翻译程序 翻译程序的工作就是进行等价变换(映射) 两个程序逻辑上等价是指对相同输入得到 相同的输出
CompilerPrinciples
七、参考书目
1.《编译原理》 李建中、姜守旭译, <Compilers: Principles, Techniques,and Tools> A.V.Aho, RavSethi, J.D.Ullman著, 机械工业出版社; 2.《现代编译原理C语言描述》 赵克佳等译, <Modern Compiler Implementation in C> Andrew W. Appel 著,人民邮电出版社 八、考试 平时成绩:10% 课程设计:20% 期终考试:70%
CompilerPrinciples 11
2.
3.
4.
理论联系实际——亲自动手,构造一个 演示性编译程序,至少要完成扫描器和 语法分析器,以及语法制导翻译产生中 间代码(课程设计) 认真完成作业,进一步巩固并加深理解 所学知识 特别要下功夫认真学习如何从实际问题 进行抽象并形式化,最终建立实际问题 的模型(上升为理性认识),并借助模 型进一步设计实现,这将对你能力的提 高大有益处
某语言未学过所以不有助于快速理解定位和解决程序调试与运行中出现的问题compilerprinciples编译方法与技术有着广泛应用安全技术程序理解软件逆向工程应用软件与软件工具开发软件测试与验证等编译课程蕴含着计算学科中解决问题的思路抽象和方法这些与高等数学一样使你享用一辈子课程所涉及的内容至今非常活跃自然语言的翻译软件移植网络安全形式化方法形式语义学等compilerprinciples鉴于以上所述作为计算机科学与技术专业的学生必须学习和掌握编译原理这门课程当然由于其综合性处理问题的复杂性等学习起来有一定难度这就需要艰苦奋斗的精神和良好的学习方法compilerprinciples10五学习方法编译程序的构造是一个庞大而复杂的系统工程无论是概念还是理论方法对初学者来说许多都是新的学习起来会感到困难大一些这一点必须有充分认识为此建议学习方法上注意以下几点
编译原理-第一
并行化编译技术
目的:提高并行计算机体系结构的性能。 超大规模计算的日益增长的需求 高性能计算机
第一章 引论
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讲(第一章)
•记录源程序中使用的名字 •收集每个名字的各种属性信息 类型、作用域、分配存储 信息 c 常量 值:35
x 变量 类型:实 层次:2
VAR procedure… var procedure var x:real;//层次为2 …. end ….. end
…..
解释程序直接将4的值输出(显示)。有些象单步调试
编
1)遍:指对源程序或其内部表示从头 到尾扫视一遍,并进行有关的加工处理。 2)一遍扫描:以语法分析程序为中心。 编译一次完成,但是运行效果不是很好。 3)多遍扫描:每遍扫描完成不同的任 务。优点: 功能独立;结构清晰;利于 优化;节省空间。 2~8遍。
–编译方式:首先由编译程序将程序翻译成为 机器语言(或者虚拟机的语言,如java),然 后执行。
•比较:
–编译的方式可以使得一次翻译过后,多次运 行。适于花较大的精力进行优化工作。
解释执行和编译执行的区别
如:… … b := 2 ; a := b+2 ; write a ; ……
编译程序
生成代码
Int 2 St b Ld b add 2 St a
赋值语句的语法树
赋值语句 标识符 := 表达式 表达式 + 表达式
标识符
表达式
*
表达式
标识符
整数
赋值语句的语法树另一种表达形式
id1:=id2+id3*N
:= id1 Position id2 initial
+
*
id3 rate N 60
(3)语义分析
•变量声明 •类型匹配 •类型转换 例: Program p(); Var rate:real; procedure initial; … position := initial + rate * 60 /* error */ /* error */ /* warning */; …
编译原理 第1章课件
第一章编译程序概述目录1.1 什么是编译程序1.2 编译过程概述1.3 编译程序的结构1.4 编译阶段的组合1.5 编译技术和软件工具1.1 什么是编译程序编译程序:是一个语言翻译程序,是将用高级语言书写的源程序翻译成等价的低级语言的翻译程序。
(C ,Pascal,Foxbase 等) (机器语言,汇编语言) 翻译程序:是把一种语言书写的程序(源程序)翻译成另一种语言(目标语言)的等价的程序。
编译程序的重要性:使得计算机用户不必考虑与机器有关的繁琐细节,使程序员和程序设计专家独立于机器。
编译程序的发展■第一个编译程序的出现:20世纪50年代早期,主要将算术公式翻译成机器代码■20世纪50年代中期,一批编译系统程序开发成功■20世纪50年代末,开始研究编译程序的自动生成工具(LEX 、Y ACC )■20世纪60年代,研究使用自展技术,1971年PASCAL 自展技术成功后,影响越来越大。
1.2 编译过程概述一个编译程序的整个工作过程是划分成阶段进行的,每个阶段将源程序从一种表示形式转换成另一种表示形式。
典型的划分方法:(下图)词法分析阶段:编译过程的第一个阶段从而识别出一个个单词。
(逻辑上紧密相连的一组字符,这些字符具有集体含义。
)单词:标识符,保留字,常数、算符,界符等语法分析:编译过程的第二个阶段依据语言的语法规则从单词符号串中识别出各种语法单位(如“程”,“语句”,“表达式”等)。
目的:检查各种语法单位在语法结构上的正确性。
例子中:符合赋值语句的语法规则,即:<变量>=<表达式>例:s=2*3.1416*r*(h+r)规则<赋值语句>::=<标识符>“=”<表达式> <表达式>::=<表达式>“*”<表达式> <表达式>::=<表达式>“+”<表达式> <表达式>::=“(”<表达式>“)”<表达式>::=<标识符> <表达式>::=<整数> <表达式>::=<实数> ■词法分析和语法分析本质上都是对源程序的结构进行分析。
(编译原理)讲义
第一章概述计算机由硬件和软件组成,软件又包括程序设计语言、系统软件和应用软件,而编译系统属系统软件。
最早人们只能使用计算机可直接接受的机器语言,到1956年,在IBM704计算机上构造了第一个FORTRAN编译程序,使人们从繁重的机器语言程序设计中解放出来。
计算机是一种逻辑电子装置,它只能接受二进制数,要使得计算机接受高级语言程序,就要借助于编译程序将高级语言程序翻译成机器可接受的机器语言。
§1编译程序和解释程序:要在计算机上实现除机器语言之外的任一程序设计语言,就首先应使此语言为计算机所“理解”。
解决这一问题的方法有两种:一种是对程序进行翻译;另一种是对程序进行解释。
翻译程序:①汇编程序②编译程序翻译程序:是把一种语言编写的程序翻译成等价的另一种语言的程序;前一种语言称为源语言,后一种语言称为目标语言;根据源语言和目标语言的不同,有各种不同的翻译程序:汇编程序:若源语言是汇编语言,目标语言是机器语言,这种翻译程序称为汇编程序。
编译程序:若源语言是高级语言,而目标语言是某计算机的汇编语言或机器语言,这种翻译程序称为编译程序。
解释程序:它以用该语言编写的源程序作为输入,但不产生目标程序,而是按照源语言的定义边解释边执行源程序本身。
通常的编译程序是先将源程序比较简单地翻译成某种中间形式的程序,然后再对这种中间形式进行解释;这种中间形式的语言有多种:波兰表示、三元组、四元组、树、伪代码等。
编译程序和解释程序相比,解释程序的执行效率比较低,但占用时间较少。
§2编译程序的组成部分:编译程序将首先根据源语言的定义来对源程序进行分析,之后进行综合,并从而得到与源程序等价的目标程序;分析:对源程序进行结构分析和语义分析;综合:创建出与源程序等价的目标程序;结构分析:①词法分析②语法分析综合:①中间代码生成②代码生成每一个编译程序一般都要做以下几个方面的工作:①词法分析②语法分析③语义分析④中间代码生成⑤代码生成⑥代码优化目标程序图1。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
26
Ln=L
…
L1 L0
图1 编译系统的自展过程
27
2.利用LEX,YACC等工具
LEX是词法分析器的自动生成系统。它的输入是正规式,输 出是词法分析程序(又称扫描器)。 LEX的基本思想是由正规式构造有穷自动机,功能结构如下 图所示:
28
YACC(Yet Another Compiler- Compiler)是辅助人们构造编 译程序的有效工具,它可以根据用户提供的语言的文法,自 动生成语言的语法分析程序。 YACC接受LALR(1)文法,生成一种相应的LALR(1)分析式 以及一个LALR(1)分析器,而且YACC生成的语法分析程序 可以和扫描器连接,生成器如图所示:
19
中间代码:是介于高级语言语句和低级语言语句之间的一种独立于具体 硬件的记号系统,它即有一定程度的抽象,又和低级语言十分接近,因 此,转换成目标代码很容易。
常用中间代码:四元式、三元式、间接三元式、逆波兰记号和树形表示等。 例:赋值语句Z=(X+0.418)*Y/W;翻译成四元式形式的中间代码为: 算符 左操作数 右操作数 结果 (+, X, 0.418, T1) (*, T1, Y, T2) ( /, T2 W, Z ) 其中, T1和T2是编译期间引进的临时工作变量;第一个四元式意味着把X的值 加上0.418存放于T1中;第二个四元式指将T1的值和Y的值相乘存于T2中;第三个 四元式指将T2的值除以Y的值保留结果于Z中。
29
3.利用交叉编译技术
交叉编译就是对L语言源程序在计算机A上进行编 译,产生的目标程序是计算机B的机器语言程序, 该目标程序能够在计算机B上直接运行,而不能在 计算机A上直接运行。
30
4.利用GNU CC开发平台
GNU CC是一个开发交叉编译程序的良好平台。 在 嵌入式开发中经常用到。
31
2.3 解释程序
把某一种高级语言程序(源程序)转换成另一种低级语言程 序(目标程序)(如汇编语言或机器语言程序)的翻译程序 诊断编译程序 优化编译程序 交叉编译程序 可变目标编译程序
高级语 言程序
翻译
机器语 运行 言程序
结果
编译 程序
10
二、编译程序组成
编译程序由词法分析、语法分析、语义分析、中间代码生 成、优化、目标代码生成、表格管理、错误诊断及处理几 部分构成。(见图2.1)
第一讲 编译原理
刘国秀 计算机与信息工程学院 E-mail: liuxiu.03@
1
本课程的地位
计算机专业的专业基础课 是软件技术基础 是计算机专业的学生必修的一门主干课 是本学科研究生入学考试的课程之一
2
作用
编译原理是介绍如何将高级程序设计语言变换成 计算机硬件所能识别的机器语言,以便计算机进 行处理。 它的理论基础坚实,其形式化系统不仅应用于编 译技术,还大量应用于人工智能、多媒体技术及 数据库等领域。
11
源程序 表 词法分析器 单词符号 语法分析器 语法单位
语义分析与中间代码 生成器
格
管
中间代码 优化器 中间代码 目标代码生成器 目标代码
图 2.1 编译程序的总框
错 误 诊 断 及 处 理 部 分
理
12
三、编译过程概述
编译过程 把英文翻译为中文 识别出句子中的一个个单词; 分析句子的语法结构; 根据句子的含义进行初步翻译; 对译文进行修饰; 写出最后的译文。
22
例 s=x+y*5 假设机器有两个寄存器,则上述生成的汇编代码为: (1) MOVF y,R2 (2) MULF #5.0,R2 (3) MOVF x,R1 (4) ADDF R1,R2 (5) STR R2,S 解释: (1)将y送到寄存器R2中。 (2)将R2中的数据乘上5,结果存储在R2中。 (3)将x的数据送到寄存器R1中。 (4)将寄存器R1和R2相加,结果存储在R2中。 (5)将相加后的结果送到存储单元s中。
13
编译程序的工作一般分为五个阶段: 词法分析 语法分析 语义分析和中间代码生成 优化 目标代码产生
14
1.词法分析
功能:输入源程序,对构成源程序的字符串进行 扫描和分解,识别出一个个单词符号,并给出单 词的类别、属性等。如基本字(begin、end、if、 for、while等),标识符、常数、算符和界符 (标点符号等等)。 依循的原则:词法规则 描述工具:正规式和有限自动机
例:上例 s=x+y*5 语法分析的任务就是识别出 x+y*5为算术表达式, 识别出上述整个符号串为赋 值语句.倘若写成s+x=y*5就是错误的,不符合语法规则,必然报错。
依循的原则:语法规则 描述工具:上下文无关文法
18
3.语义分析与中间代码生成
语义分析功能:根据语言的定义来确定各语言成分的含 义。 这一阶段有两项工作:首先对每种语法范畴进行静态语 义审查(如是否定义,类型是否匹配等),若语义正确, 进行另一方面的工作,即中间代码的翻译。 例:A*B (检查A、B类型) 依循的原则:语义规则 描述工具:属性文法
3
学习本课程的目的和任务
加深对程序设计语言的理解,提升自身的能力。 掌握编译的基本概念、基本原理及算法 。 将编译原理的理论和实践相结合。
4
学习本课程的方法
前后联系,按编译过程的五个阶段来学习。
理论联系实际,通过实验来加深对理论的理解。
5
考核办法
平时成绩
其中:平时作业及上课表现(含实验报告): 10%: 实验成绩:20%
– 优点:减少对内存容量的要求,程序逻辑结构清晰; 优化更充分, 有利于移植。 – 不足: 编译程序运行的效率低
源语言
前端
中间语言
后端
目标语言
35
知识扩展
3.编译程序与程序设计环境
程序设计环境 编辑程序 编译程序 连接程序 调试工具 集成化的程序设计环境
36
作业布置 复习本节内容,预习下节。
37
类型名 左括号 花括号 标识符 常量 标识符 常量 标识符 标识符 标识符 标识符 常量 花括号
单词 ( { x 2 y 3 s s x y 5 }
表1-1词法分析程序
17
2.语法分析
功能:根据词法分析部分提供的单词串,判断这一串单词能 否构成正确的表达式或语句等高级程序设计语言中的语法成 分并最终构成一个语法上正确的高级语言程序,也就是判断 输入的源程序有没有语法错误。
25
2.2 编译程序的构造途径
1.利用自展技术
Ln=L…L1L0 图1编译系统的自展过程 自展的方法是:首先确定一个非常简单的核心语 言L0,然后用汇编语言或机器语言编写它的编译程 序T0;再把语言L0扩展到L1,此时有L0属于L1,并 用L0编写出L1的编译程序T1,再把语言L1扩充为L2, 此时L1属于L2,并用L1编写L2的编译程序T2……这 样不断扩展下去,直到完成所要求的编译程序为止, 自展技术的使用如的程序段如下: main( ) { float x=2,y=3,s; s=x+y*5; } 识别出的单词序列为表1-1所示
16
类型名 保留字 右括号 保留字 等号 逗号 等号 逗号 分号 等号 运算符 运算符 分号
单词 main ) float = , = , ; = + * ;
1. 概念
所谓解释程序是高级语言翻译程序的一种,它将 源语言(如BASIC)书写的源程序作为输入,解释一 句后就提交计算机执行一句,并不形成目标程序。
32
四、解释程序
2.思考
编译程序与解释程序的区别?
33
知识扩展
1.遍
所谓“遍”就是对源程序或源程序的中间结果从头到尾扫 描一次,并作有关的加工处理,生成新的中间结果或目标 程序。 阶段与遍是不同的概念。一遍可以由若干段组成,一个阶 段也可以分若干遍来完成。
教学内容
2.1 什么是编译程序、编译程序组成、编译过程 2.2 编译程序的构造途径 2.3 解释程序 知识扩展
8
2.1 编译程序的组成
翻译程序 把某一种语言程序(称为源语言程序) 转换成另 一种语言程序(称为目标语言程序). 源语言 程序 翻译 目标语 言程序
翻译 程序
9
一、什么是编译程序
编译程序
20
4.优化
功能:对于前阶段产生的中间代码进行加工变 换,以期在最后阶段产生更高效的目标代码。 依循的原则:程序的等价变换规则 优化的主要方面:公共子表达式的提取、循环 优化、删除无用代码等。
21
5.目标代码生成
功能:根据目标机的体系结构和指令系统等属性, 把中间代码(或经优化的中间代码)变换成目标机上 的低级语言代码。 依赖于硬件系统结构和机器指令的含义 目标代码三种形式: 绝对指令代码: 可直接运行 可重新定位指令代码: 连接装配, 汇编指令代码: 需要进行汇编
期末考试:70%
6
参考资料
编译原理 编译原理
陈火旺等 第三版 国防工业出版社 吕映芝 清华大学出版社
编译原理典型题解析与实战模拟
刘春林、王挺等 国防科技大学出版社
7
第一讲
教学目标
编译程序概述
1.掌握什么是编译程序、编译程序组成、编译过程。 2.理解编译程序的构造途径、解释程序、编译程序与程序 设计环境 。
例如,词法分析这一阶段可以单独作为一遍,但更多的时候是把它与 语法分析合并为一遍;为了便于处理,语法分析和语义分析与中间代码 产生又常常合为一遍。在优化要求很高时,往往还可以把优化阶段分为 若干遍来实现。
34
知识扩展
2. 编译的前端与后端
编译前端:包括词法分析、语法分析、语义分析、中间代码 生成和中间代码优化,主要依赖于源程序。 编译后端 :包括目标代码生成,依赖于计算机硬件系统和 机器指令系统。