编译原理课件第十章

合集下载

编译原理ppt

编译原理ppt

B1
(1) (2) (3)
B2
(4) (5) (6) (7) (8) (9)
B3
B4
基本块内实行的优化: 合并已知量 删除多余运算 删除无用赋值 等 (1) read (C) (2) A:= 0 (3) B:= 1 (4) L1: A:=A + B (5) if B>= C goto L2 (6) B:=B+1 (7) goto L1 (8) L2: write (A) (9) halt
第十章 代码优化
10.1 优化技术简介 10.2 局部优化 10.3 循环优化
上海电力学院 彭源
优化的概念
编译时刻为改进目标程序的质量而进行的各项工 作。
空间效率 时间效率
空间效率和时间效率有时是一对矛盾,有时不能 兼顾。 优化的基本要求:
必须是等价变换 为优化的努力必须是值得的(有效、合算)。
优化的分类
7.2 局部优化
局部优化是指基本块内的优化 基本块是指程序中一顺序执行的语句序列,其 中只有一个入口语句和一个出口语句。执行时 只能从入口语句进入,从其出口语句退出
7.2.1 基本块的划分
1.
1) 2) 3)
把程序(中间代码形成)划分成基本块的算法: 求基本块的入口语句,它们是: 程序的第一个语句;或者 条件转移或无条件转移语句的转移目标语句; 或者 紧跟在条件转移语句后面的语句。
例:划分基本块 (1) read (C) (2) A:= 0 (3) B:= 1 (4) L1: A:=A + B (5) if B>= C goto L2 (6) B:=B+1 (7) goto L1 (8) L2: write (A) (9) halt

《编译原理》教学课件

《编译原理》教学课件
过程
4. 使学生在系统级上认识算法和系统的设计,培养系统 能力
2021/8/3
7
主要内容
1. 引论 2. 高级语言及其文法 3. 词法分析 4. 自顶向下的语法分析 5. 自底向上的语法分析 6. 语法制导翻译与属性文法 7. 语义分析与中间代码生成 8. 符号表管理 9. 运行时的存储组织 10. 代码优化 11. 代码生成
22
1、词法分析
• 词法分析由词法分析器(Lexical Analyzer)完 成,词法分析器又称为扫描器(Scanner)
• 词法分析器从左到右扫描组成源程序的字符 串,并将其转换成单词(记号—token)串;同 时要:查词法错误,进行标识符登记——符 号表管理
• 输入:字符串
• 输出:(种别码,属性值)——序对 – 属性值——token的机内表示
2021/8/3
6
课程目的和基本要求
• 知识
– 掌握编译程序的总体结构、编译程序各个组成部分的 任务、编译过程各个阶段的工作原理 、编译过程各 个阶段所要解决的问题及其采用的方法和技术
• 能力
1. 掌握程序变换基本概念、问题描述和处理方法 2. 增强理论结合实际能力 3. 修养“问题、形式化描述、计算机化” 的问题求解
2021/8/3
2
使用说明
• 编译原理课程是计算机专业教育很重要的专业技 术基础课,更多地体现在其所含的学生终生受用 的计算机问题求解的典型思想和方法,所含的知 识是载体,利用好这个载体,还靠大家努力
• 课程教学是与教师和学生紧密相关的,甚至可以 说大纲、教材只是一个框架和素材,课堂教学这 部剧如何展开,还依赖于集导演和演员于一身的 教师,讲课PPT的制作是必不可少的“排练工作” 之一

《编译原理》课件

《编译原理》课件
代码生成
编译器可以将高级语言编写的源代码转换成机器语言或低级语言,以便在特定的硬件平台上运行。编 译器还可以生成可执行文件或动态链接库等二进制文件。
编译器在人工智能领域的应用
机器学习编译器
机器学习编译器可以将机器学习模型转换成可执行代码,以便在嵌入式设备或边缘计算 设备上运行。这种编译器可以优化模型的计算性能和内存占用,提高模型的运行效率。
3
缺点
对于某些复杂文法,可能导致大量的无用推导和 状态爆炸。
自底向上的语法分析
分析步骤
从输入符号序列的最后一个符号开始,逐步向上构建语法树,直 到找到与文法中的某个产生式右部匹配的符号串。
优点
可以充分利用已知信息,避免不必要的推导和状态爆炸。
缺点
对于某些复杂文法,可能导致大量的无用归约和状态爆炸。
04
中间代码生成
中间代码生成的定义和任务
定义
中间代码生成是编译器的一个阶段,将源代码转换成中间代码的过程。
任务
将源代码转换成一种中间表示形式,以便进行后续的优化和目标代码生成。
三地址代码的生成
01
三地址代码是一种中间代码形 式,由一系列的三元式组成。
02
三元式的形式为(op, arg1, arg2),表示执行一个操作(op) 并产生一个结果,操作数arg1 和arg2来自寄存器、常数或之 前的计算结果。
语义分析
检查AST是否有语义错误,如类型错 误、未定义的变量等。
中间代码生成
将AST转换为中间代码,通常是三地 址代码。
代码优化
对中间代码进行优化,提高执行效 率。
代码生成
将中间代码转换为机器语言代码, 能够在特定硬件上执行。
编译器的分类

程序设计语言编译原理第三版第10章

程序设计语言编译原理第三版第10章

§10.2 局部优化
举例:考察下面的三地址代码程序
(1)Read X
(2)Read Y
B1
(3)R:=X mod Y (4)if R=0 goto (8) B2
(5)X:=Y
(6)Y:=R
B3
(7)goto(3)
(8)write Y B4
(9)halt
B1
B2
B3
B4
§10.2 局部优化
3.流图及其生成
标识符(包括常数)-结点 NODE(A)-描述上述对应关系的函数,其值或者是一个结点的编号,
或者无定义
(2)中间代码的三种形式:A:=B A:=op B A:=B op C 或 A:=B[C]
(3)构造算法: ①开始,DAG为空 ②对基本块中每一条中间代码式,依次执行以下步骤:
§10.2 局部优化
步骤: 1.如果NODE(B)无定义,则构造一标记为B的叶结点并定义
NODE(B)为这个结点 如果当前代码是0型,则记NODE(B)的值为n,转4 如果当前代码是1型,则转2(1) 如果当前代码是2型,则(ⅰ)如果NODE(C)无定义,则构造一标 记
为C的叶结点并定义NODE(C)为这个结点;(ⅱ)转2(2)
(1)T0:=3.14 (2)T1:=2*T0 (3)T2:=R+r (4)A:=T1*T2 (5)B:=A (6)T3:=2*T0 (7)T4:=R+r (8)T5:=T3*T4 (9)T6:=R-r (10)B:=T5*T6
(4)代数变换
§10.2 局部优化
二、基本块的DAG表示及其应用
1.基本块的DAG:
一种结点带有下述标记或附加信息的DAG
(1)图的叶结点以一标识符(变量名)或常数作为标记,表示该 结点代表该变量或常数的值。

编译原理第十章目标程序运行时的存储组织

编译原理第十章目标程序运行时的存储组织

编译原理第十章目标程序运行时的存储组织课前索引【课前思考】◇回顾通常的编译过程,能否找到本章所讲内容在哪个过程?◇为什么编译程序要考虑目标程序运行时存储区的管理与组织?◇请归纳C语言与PASCAL语言的程序结构与数据类型的不一致点【学习目标】全面熟悉目标程序运行时存储区的整体布局;每种存储区的组织方式与管理方法;并通过实例着重掌握,对同意过程嵌套定义的情况,栈式动态存储分配的组织方式与运行时进栈退栈的活动实现方法。

【学习指南】在代码生成前,编译程序务必进行目标程序运行环境的配置与数据空间的分配。

通常来讲,假如编译程序从操作系统中得到一块存储区以使目标程序在其上运行,该存储区需容纳生成的目标代码与目标代码运行时的数据空间。

我们这里所说的运行时的存储区组织,是指目标程序运行时的数据空间的管理与组织。

【难重点】◇目标程序运行时,存储区域的整体布局,与各区域的作用。

◇各类不一致类型的数据表示。

◇同意过程嵌套定义的情况,栈式动态分配的组织管理。

◇对过程的调用,进入与退出时,栈式动态分配的工作原理。

◇过程活动纪录的各项内容与它们的作用,与活动纪录的组织方式。

◇过程参数传递的不一致方式。

【知识结构】从逻辑上看,在代码生成前,编译程序务必进行目标程序运行环境的配置与数据空间的分配。

通常来讲,假如编译程序从操作系统中得到一块存储区以使目标程序在其上运行,该存储区需容纳生成的目标代码与目标代码运行时的数据空间。

数据空间应包含:用户定义的各类类型的数据对象(变量与常数)所需的存储空间,作为保留中间结果与传递参数的临时工作单元,调用过程时所需的连接单元,与组织输入/输出所需的缓冲区。

目标代码所占用空间的大小在编译时能确定。

有些数据对象所占用的空间也能在编译时确定,其地址能够编译进目标代码中。

而有些数据对象具有可变体积与待分配性质,无法在编译时确定存储空间的位置。

因此运行时的存储区常常划分成:目标区、静态数据区、栈区与堆区,如图10.1就是一种典型划分,代码(code)区用以存放目标代码,这是固定长度的,即编译时能确定的;静态数据区(static data)用以存放编译时能确定所占用空间的数据;堆栈区(stack and heap)用于可变数据与管理过程活动的操纵信息。

编译原理-第十章--代码优化

编译原理-第十章--代码优化

第十章代码优化某些编译程序在中间代码或目标代码生成之后要对生成的代码进行优化。

所谓优化,实质上是对代码进行等价变换,使得变换后的代码运行结果与变换前代码运行结果相同,而运行速度加大或占用存储空间少,或两者都有。

优化可在编译的不同阶段进行,对同一阶段,涉及的程序范围也不同,在同一范围内,可进行多种优化。

一般,优化工作阶段可在中间代码生成之后和(或)目标代码生成之后进行。

中间代码的优化是对中间代码进行等价变换。

目标代码的优化是在目标代码生成之后进行的,因为生成的目标代码对应于具体的计算机,因此,这一类优化在很大程度上依赖于具体的机器,我们不做详细讨论。

另外依据优化所涉及的程序范围,又可分为局部优化、循环优化和全局优化三个不同的级别。

局部优化指的是在只有一个入口、一个出口的基本程序块上进行的优化。

循环优化对循环中的代码进行的优化。

全局优化是在整个程序范围内进行的优化。

本章重点:局部优化基本块的DAG表示第一节优化技术简介为了说明问题,我们来看下面这个例子,源程序是:P :=0For I :=1 to 20 doP :=P+A[I]*B[I];经过编译得到的中间代码如图10-1-1所示,这个程序段由B1和B2两个部分组成,B2是一个循环,假定机器按字节编址。

那么,对于这个中间代码段,可进行如下这些优化。

1、删除多余运算(删除公共子表达式)优化的目的在于使目标代码执行速度较快。

图10-1-1中间代码(3)和(6)中都有4*I的运算,而从(3)到(6)没有对I赋值,显然,两次计算机的值是相等的。

所以,(6)的运算是多余的。

我们可以把(6)变换成:T4 :=T1。

这种优化称为删除多余运算或称为删除公共子表达式。

2、代码外提减少循环中代码总数的一个重要办法是代码外提。

这种变换把循环不变运算,即其结果独立于循环执行次数的表达式,提到循环的前面。

使之只在循环外计算一次,上例中,我们可以把(4)和(7)提到循环外。

经过删除多余运算和代码外提后,代码变成图10-1-2。

编译原理-清华大学-第10章1-代码优化

编译原理-清华大学-第10章1-代码优化

(1)P:=0 (2)I:=0 (4)T2:=addr(A) (7)T5:=addr(B) (3)T1:=0
(5)T3:=T2[T1] (6)T4:=T1 (8)T6:=T5[T4] (9)T7:=T3*T6 (10)P:=P+T7 (11)I:=I+1 (3‘)T1:=T1+4 (12)if I<=20 goto(5)
2、代码外提
目的:减少循环中代码总数。 方法:把循环不变运算,即其结果独立
于循环执行次数的表达式提到循环的前 面,使之只在循环外计算一次。
(1)P:=0 (2)I:=0
(3)T1:=4*I (4)T2:=addr(A) (5)T3:=T2[T1] (6)T4:=T1 (7)T5:=addr(B) (8)T6:=T5[T4] (9)T7:=T3*T6 (10)P:=P+T7 (11)I:=I+1 (12)if I&l经过变换循环的控制条件后,有些变 量不被引用,可以从循环中删除。
(1)P:=0 (2)I:=0 (4)T2:=addr(A) (7)T5:=addr(B) (3)T1:=4*I
(5)T3:=T2[T1] (6)T4:=T1 (8)T6:=T5[T4] (9)T7:=T3*T6 (10)P:=P+T7 (11)I:=I+1 (3’)T1:=T1+4 (12)if I<=20
2)在运行基本块时,只能从其入口进入, 从出口退出。
2、划分基本块算法
(1)求出各基本块的入口语句 1)程序的第一个语句 ; 2)能由条件转移语句和无条件转移语句转
移到达的语句; 3)紧跟在条件转移语句后面的语句。
(2) 对以上求出的每个入口语句,确定其所 属的基本块。它是由该入口语句到下一入 口语句(不包括该入口语句) 之间的语句序 列组成的。

《编译原理课件》PPT课件

《编译原理课件》PPT课件
它是源程序的一种内部表示形式。 设计中间代码的原则:一是容易生成,二是
容易翻译成目标代码。 常用的中间代码有三地址码、四元式、三元
式、间接三元式、逆波兰表示(后缀式)、 树形表示等。
14
中间代码:四元式
例: id1:=id2+id3*10
sum:=first+count*10 翻译为四元式中间代码的形式:
5
1.2 编译程序的工作过程与结构
一个编译程序的整个工作过程是划分成阶段 进行的,每个阶段将源程序从一种表示形式 转换成另一种表示形式。
编译阶段的典型划分方法是划分为5个基本阶 段:词法分析、语法分析、语义分析产生中 间代码、代码优化、代码生成。
掌握编译过程的5个基本阶段,是学习编译原 理课程的基本内容。
29
自编译:T形图表示
PASCAL2
A代码
PASCAL2
A代码
PASCAL1 PASCAL1
A代码 A代码
用PASCAL1语言 编写的功能更
强的PASCAL2语 言编译程序的
A代码
已有的PASCAL1 语言的编译程序
自编译得到
功能更强的
PASCAL2语言 的编译程序
源程序
注意:T形图的组合规则:① ②
Java语言的操作平台无关性的实现就是如此。
26
1.3 编译程序的开发
构造编译程序,可以:
1. 使用机器语言或汇编语言作工具构造 2. 使用高级语言作工具构造 3. 使用机器语言或汇编语言构造编译程序的核心
部分,使用高级语言构造编译程序的扩充部分 4. 使用编译程序自动生成工具构造
使用高级语言作工具构造编译程序可以大大节 省程序设计的时间,并且编译程序易于阅读、 维护和移植。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

湖北大学数计学院计科系
2010年9月
杂凑技术
设计一杂凑函数h(x),其中x为任一标识符,它把x映象 成表区中某一单元的地址,并要求当x≠y时,h(x)=h(y)的 可能性尽量地小,即单元冲突地可能性尽量小。
解决冲突的两种方法: 1. 线性探查法 2. 链接技术
湖北大学数计学院计科系
2010年9月
线性查找
造表时,它从符号表的表头依次向表尾方向填入诸表项,把 当前要填入的新表项填到符号表中紧接已填表之后的一个空 位置上,这样构造的表称为线性表。
查表时,从表头开始朝表尾方向(或从已填表项的末端开始 朝表头方向)逐个进行比较,直至找到所需表项或表中所有 已填表项比较完毕为止。
湖北大学数计学院计科系
B(Currbl).p := Lastbl + 1 ;
For i := 1 step 1 until B(Currbl).NO do Begin
Lastbl := Lastbl+1; T(Lastbl) := T(SP) ;
B(1..m)为分程序表,其每个表项形如 (Sno,NO,P);
Currbl为当前分程序的编号,初值为0;
➢对于变量,其描述信息通常包括: 类型、种类、精度、数组维数、形参类型、结构分量、标号、运行时
地址等等; ➢对于过程,其描述信息通常包括:
函数过程、形参过程、程序外部过程、递归过程、是否有形参等等。
湖北大学数计学院计科系
2010年9月
10.3 符号表的构造与查找
➢符号表的构造是指把新的表项填入表中的过程。 ➢符号表的查找是指在符号表中搜索某一特定表项的过程。
湖北大学数计学院计科系
2010年9月
构造分程序段的符号表
①进入分程序,在分程序中添加一元素,使该分程序变成当前分程序:
Lastbl := Lastbl + 1 ;
B(Lastbl) := (Currbl , 0 , SP) ;
Currbl := Lastbl
②退出分程序
把该分程序的全部表项移到符号表首部并使该分程序的外层分程序变为当前分程序。
10.4 分程序构造的符号表
• 分程序结构:在一个函数中可以建立一个程序块,该程序 块中有自己的说明部分和执行部分,且这种程序块还可以 具有层次的嵌套结构,即程序块中建立其它的程序块。
分程序表的表项: (Sno , NO , P)
Sno:分程序i的外层分程序编号; NO:在分程序i的符号表中表项的个数; P:指示该分程序的符号表项的指示器。
2010年9月
折半法
造表时,按表项主目的“大小”次序进行填写,“小”的排 在前,“大”的排在后。
查表时,每次取当时表正中间(即对折)那个表项的主目与 被查项进行比较;若被查项“小于”中间表项,则在前半表 区重复折半法查找;若被查项“大于”中间表项,则在后半 表区重复折半法查找(两者相同时,表示已查找到所需的表 项)。重复这一过程,直到当时的表尾大于当时的表头为止。
SP := SP + 1 ; End;
Lastbl为已分配的最高层分程序的编号, 初值为0;
Currbl := B(Currbl).Sno
SP为栈顶元素的编号,初值为n+1。
湖北大学数计学院计科系
2010年9月
本章重点:
符号表的相关概念 符号表的构造与查找技术
湖北大学数计学院计科系
2010年9月
i ma xwe i g h t
湖北大学数计学院计科系
1 i 3ma x 6we i g h t
2010年9月
10.2 符号表中的数据
有关标识符的全部信息都存放在标识符表项的值部分。 每当源程序中出现标识符时,就要在符号表中查找相应表项, 并把这次收集到的信息与原已存放好的信息进行核实,把新 的信息添加到值部分。
第10章 符号表的组织和查找
(为了检查语义的正确性和生成代码,需 要知道源程序中所使用的各种标识符的属 性,这些属性常常由编译程序集中起来并 存放在一个标识符表或符号表中。)
湖北大学数计学院计科系
2010年9月
10.1 符号表的组织和查找 10.2 符号表中的数据 10.3 符号表的构造与查找 10.4 分程序构造的符号表 10.5 小结
湖北大学数计学院计科系
2010年9月
10表项1 表项2
……… 表项n
………
主目:即符号或标 识符本身(变量的 名字)。
值:包括种属、类 型、精度等等。
湖北大学数计学院计科系
2010年9月
存放主目的两种方法:
主目 值 .1 .3 .6
主目 值
相关文档
最新文档