编译原理简明教程(第2版)[冯秀芳,崔冬华,段富][电子教案] 第12章

合集下载

编译原理简明教程(第2版)第8章

编译原理简明教程(第2版)第8章

④ 若NODE(A)=null,则把A附加到结点n,并令NODE(A)= n;否则,先 从NODE(A)的附加标记集中将A删去(注意,若NODE(A)有前驱或 NODE(A)是叶结点,则不能将A删去),然后再把A附加到新的结点n, 并令NODE(A)= n。
例:构造以下基本块的DAG
(1) (:=, 3.14, _, T1) (2) (*, 2, T1, T2) (3) (+, R, r, T3) (4) (*, T2, T3, A) (5) (:=, A, _, B) (6) (*, 2, T1, T4) (7) (+, R, r, T5) (8) (*, T4, T5, T6) (9) (-, R, r, T7) (10) (*, T5, T7, B)
8.1.3
优化技术简介
Байду номын сангаас
1、合并常量运算
运算对象是常量或在编译时已知,则在编译时直接计算 出结果,不必等到运行时再去计算。
例: x := 3.14 * 2 ; y := 2 * 5 * a ; z := x + 0.5 ;
合并常量元算后: x := 6.28; y := 10 * a ; z := 6.78 ;
优化可在编译的不同阶段进行:
源代码设计阶段 ------
程序员选择好的算法和语句
语义分析阶段
------ 如何生成高质量的中间代码
中间代码 ------ 采用优化技术
目标代码
------ 有效利用寄存器、指令、处理机
8.1.2
代码优化的分类
1、与机器的相关性 与机器有关的优化:寄存器的优化、多处理机的 优化、特殊指令的优化、无 只有一个 用代码的消除。 入口和一 与机器无关的优化:基本块的优化、循环优化。 个出口 2、优化范围 局部优化:基本程序块上进行的优化 全局优化:全局程序范围内的优化

编译原理实用教程(Tsu版电子教案)

编译原理实用教程(Tsu版电子教案)

编译原理实用教程(Tsu版电子教案)第一章:编译原理概述1.1 编译器的作用与重要性解释编译器的基本功能:将高级语言程序转换为机器语言程序。

强调编译器在软件开发中的重要性。

1.2 编译过程与阶段描述编译过程的各个阶段:词法分析、语法分析、语义分析、中间代码、代码优化、目标代码。

简要介绍每个阶段的主要任务和作用。

1.3 编译器的设计与实现介绍编译器的设计原则与方法。

讲解编译器的实现技术,包括数据结构、算法和编程语言的选择。

第二章:词法分析2.1 词法单位的识别介绍词法单位的定义与分类,如标识符、关键字、常量、运算符等。

讲解词法分析器的设计方法,包括正则表达式和有限自动机的应用。

2.2 词法分析器的实现详细讲解如何实现一个词法分析器,包括输入处理、词法单位识别和符号表管理。

提供相关的编程技巧和实践。

第三章:语法分析3.1 上下文无关文法介绍上下文无关文法的定义、表示方法和性质。

讲解如何构造上下文无关文法的解析树。

3.2 语法分析器的设计介绍不同的语法分析方法,如递归下降分析、LL分析、LR分析等。

讲解如何选择合适的语法分析方法。

3.3 语法分析器的实现详细讲解如何实现一个语法分析器,包括解析树的构建和错误处理。

提供相关的编程技巧和实践。

第四章:语义分析4.1 语义分析的基本概念介绍语义分析的目的和重要性。

讲解语义分析的主要任务,如类型检查、变量作用域分析等。

4.2 语义分析的方法与技术介绍常见的语义分析方法,如静态语义分析和动态语义分析。

讲解语义分析的具体技术,如抽象语法树、语义规则等。

4.3 语义分析器的实现详细讲解如何实现一个语义分析器,包括错误处理和symbol 表管理。

提供相关的编程技巧和实践。

第五章:中间代码5.1 中间代码的作用与特点介绍中间代码的概念和作用,如便于代码优化和目标代码。

讲解中间代码的特点和设计原则。

5.2 中间代码算法讲解常用的中间代码算法,如三地址码和静态单赋值编码。

提供相关的实例和代码实现。

编译原理简明教程(第2版)[冯秀芳,崔冬华,段富][电子教案]第2章.

编译原理简明教程(第2版)[冯秀芳,崔冬华,段富][电子教案]第2章.
r 非终结符
b.树根:S c.分枝:非终结符 d.若结点A有B1B2…Bn分枝,则A→B1B2…Bn是G的一 个规则。
例:G[S]:
S→aAB
A→Ba|a a
S
A B a
S
A B
B→bd
b
B
d
a
B
a
b
d
2.由推导生成语法树 句型or句子的推导用图解表示→语法树生成 例:G[<无符号整数>] G[A]: A→B B→BC|C C→0|1|2……|9 推导: A B BC BCC CCC 2CC 25C 256 A B BC B6 BC6 B56 C56 256 A B B B C 6 C
ф 空集或者空语言,不含任何符号串的语言。
ф ≠{ε }
2.1.2
符号串的运算
1. 符号串相等:同一字母表的两个符号串所有 符号依次相等。 如Σ ={a,b,c} ω =abc, ψ =abc,则ω =φ ; 若ω =abc, ψ =cba,则ω ≠φ
2. 字符串长度:符号串中包含的字符的个数。 记|ω | 例|abc|=3,|ε |=0, |aω |=|ω a|=1+|ω |, a∈Σ 。
Σ +:Σ 上所有非空符号串的集合
例:A={0,1} 则 A1={0,1} A0={ε } A2={00,01,10,11} …… A*={ε ,0,1,00,01,10,11,000,……} A+={0,1,00,01,10,11,000,……}
2.2
文法和语言的形式定义
语言L:可抽象地看成是所有句子组成的集合(有限集:用枚 举;无限集:文法) 句子:可抽象地看成是某个有限字母表Σ 上的符号串。 L Σ* 例:英语Σ ={26个字母,数字,标点符号,……} 文法:在形式上用以描述和规定语言结构的方法,是用有限的 手段描述无限的句子集合的方法之一。

编译原理简明教程第二版

编译原理简明教程第二版

编译原理简明教程第二版本文档是《编译原理简明教程第二版》的前言部分,旨在介绍本书的目的和背景,以及阐明本书适用的范围和读者群体。

编译原理是计算机科学中的重要课程,涉及将高级程序语言转换为计算机可执行的机器语言的技术。

编译原理的理解对于计算机科学专业的学生以及从事软件开发和系统设计的专业人士都是至关重要的。

本教程作为一本简明的编译原理入门教程,旨在为读者提供一个简单但全面的了解编译原理的框架。

无论您是计算机科学专业的学生还是从事软件开发或系统设计的专业人士,如果您对编译原理感兴趣或需要深入了解这一关键领域,本书都适合您阅读。

在本书中,我们将以简明和易懂的方式介绍编译原理的基本概念和核心理论,并提供一些实际的编译器实现例子,以帮助读者更好地理解和应用所学知识。

希望本教程能够为广大读者提供一份简明而实用的编译原理研究资料,并对您在编译原理的研究和实践中有所帮助。

祝您阅读愉快!本章将解释编译原理的概念和在计算机科学中的重要性。

同时,介绍本书将提供的基本概念和技术。

编译原理是计算机科学中的一个重要领域,它主要研究如何将一种语言(通常是高级语言)转化为另一种语言(通常是机器语言),以便计算机能够理解和执行。

编译原理在软件开发和优化中起着至关重要的作用。

本书的目标是向读者介绍编译原理的基本概念和技术,帮助读者理解编译原理的工作原理和应用。

通过阅读本书,读者将掌握词法分析、语法分析、语义分析、中间代码生成、代码优化和代码生成等编译原理中的关键概念和技术。

下一章将介绍编译原理的起源和发展,以及编译器的基本原理和结构。

让我们开始研究编译原理吧!本章将介绍编译器中的词法分析过程。

词法分析是编译器的第一阶段,其目的是将源代码分解成有意义的词素或词法单元。

本章将讨论词法单元的概念、正则表达式的使用和有限自动机的设计。

同时,我们还将探讨如何设计和实现词法分析器,以便将源代码转换为词法单元序列。

词法分析器在编译器中起着至关重要的作用。

教案-编译原理详解

教案-编译原理详解

课程名称:《编译原理》课程性质:专业课(必修)学时:48(理论教学)教材:(1)编译原理.李劲华等编,复旦大学出版社,2007年(2)编译原理(第2版)电子工业出版社,胡伦骏,骆婷编,2007年1.课程班级:软件工程11级1班,2班,3班教室:西教1—305授课时间:1-12周,星期二 8,9节、星期四 1,2节2.课程班级:计算机科学与技术11级1班,2班,3班,4班教室:西教1—304授课时间:1-12周,星期二3,4节、星期五 3,4节授课教师:张永考核方式:闭卷总评成绩=平时成绩(20%) + 期末考试成绩(80%)参考书1. Compilers: Principles, Techniques and Tools (2nd Edition). Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman, Addison Wesley; 20062. 程序设计语言编译原理(第三版),陈火旺、刘春林等,2000年,国防工业出版社,2002年获国家级高等学校优秀教材一等奖。

是国家“九五”重点建设教材。

3. 编译原理与技术,李文生,清华大学出版社,2008.73 程序语言的语法描述几个概念:考虑一个有穷字母表∑字符集其中每一个元素称为一个字符∑上的字(也叫字符串) 是指由∑中的字符所构成的一个有穷序列不包含任何字符的序列称为空字,记为ε用∑*表示∑上的所有字的全体,包含空字ε3.1 上下文无关文法文法:描述语言的语法结构的形式规则He gave me a book.<句子> <主语><谓语><间接宾语><直接宾语><主语> <代词><谓语> <动词><间接宾语> <代词><直接宾语> <冠词> <名词><代词> He<代词> me<名词> book<冠词> a<动词> gave上下文无关文法的定义:一个上下文无关文法G是一个四元式G=(VT,VN,S,P),其中VT:终结符集合(非空)VN:非终结符集合(非空),且VT VN=S:文法的开始符号,S VNP:产生式集合(有限),每个产生式形式为P , P VN, (VT VN)*开始符S至少必须在某个产生式的左部出现一次。

编译原理精选版演示课件.ppt

编译原理精选版演示课件.ppt

预测分析表
3
表驱动的预测分析程序模型
khk
4
实现步骤:
(1) 判断文法是否为LL(1)文法。 如果文法中含有左递归,必须先消除 左递归
(2)构造预测分析表 : Select(A ) (3)列出预测分析过程
khk
5
第6章:自底向上分析方法
自底向上分析方法,也称移进归约分析法
实现思想(是推导的逆过程):
对输入符号串自左向右进行扫描,并将输入符逐个 移入一个后进先出栈中,边移入边分析,一旦栈顶 符号串形成某个句型的可归约串时,就用该产生式 的左部非终结符代替相应右部的文法符号串,称为 归约。重复这一过程,直到归约到栈中只剩下文法 的开始符号时,则分析成功。
关键问题
khk
6
移进—规约分析(Shift-reduce parsing)

A a
可得 b <. a
由A→( B 且B+ ( B… 可得 (<. (

B aa…
可得 (<. a

B Aa )
可得 (<. A
khk
18
A(B(Aa) …)
(3) 求> .关系:
A(B…B

Aa
由S→bAb,且A…) 可得 ) > . b
A+…B 可得 B > . b
khk
88
例1:文法
SaAcBe A b A Ab B d
输入串abbcde#分析
khk
9
归约分析过程(移进归约):
步骤 1 2 3 4 5 6 7 8 9 10 1kh1k
符号栈 # #a #ab #aA #aAb #aA #aAc #aAcd #aAcB #aAcBe #S

编译原理

编译原理

条件 condition
expression
term
factor
编 译 程 序 总 体 流 程 图
启动 置初值
调用GETSYM取单词 调用GETSYM取单词 GETSYM 调用BLOCK过程 调用BLOCK过程 BLOCK
当前单词 是否为源程序结束符 '.'? Y 源程序 是否 错 ? N 过程 NTE ET 程序 Y
1 《编译原理》 台州学院 应建健
何为PL/0语言? 何为PL/0语言? PL/0语言
PL/0语言:PASCAL语言的子集,功能简单, PL/0语言:PASCAL语言的子集,功能简单, 语言 语言的子集 结构清晰,可读性强, 结构清晰,可读性强,具备了一般高级语 言的必备部分
2
《编译原理》 台州学院 应建健
N
出错

调用
结束 21
说明部分的分析 对每个过程说明的对象(变量, 对每个过程说明的对象(变量,常量和过 程)造名字表
–填写所在层次,标识符的属性和分配的相对位 填写所在层次, 填写所在层次 标识符的属性不同时, 置。标识符的属性不同时,所需填入的信息也 不同。登录信息由ENTER过程完成。 ENTER过程完成 不同。登录信息由ENTER过程完成。
12
《编译原理》 台州学院 应建健
PL/0编译程序的结构 PL/0编译程序的结构
其编译过程采用一趟扫描方式 其编译过程采用一趟扫描 一趟扫描方式 语法分析程序为核心 以语法分析程序为核心 词法分析程序和代码生成程序都作为一 程序和代码生成 词法分析程序和代码生成程序都作为一 个独立的过程, 个独立的过程,当语法分析需要读单词 时就调用词法分析程序, 时就调用词法分析程序,而当语法分析 正确需要生成相应的目标代码时, 正确需要生成相应的目标代码时,则调 用代码生成程序。 用代码生成程序。

编译原理(第二版)第1章 编译程序概论

编译原理(第二版)第1章 编译程序概论
3
教材
教材: 《编译原理》,张素琴 等编著,清华大学出版社 参考书目: 《编译程序设计原理》,杜淑敏 等编著,北京大学 出版社 《编译原理教程》,胡元义 等编著,西安电子科技 大学出版社

相关知识:程序设计语言、计算机组成原理、数
据结构、汇编语言、离散数学、操作系统等。
4
第1章 编译程序概论
t3,
-,
id1)
(
+, id2, t2,
id1 )
( *, id3, 10.0, t1 )
( +,id2, t1,
16
id1 )
目标代码生成
•任务:把中间代码变换成特定机器上 的绝对指令代码或可重定位的指令代 码或汇编指令代码。
•特点:与硬件系统结构和指令含义有 关,涉及到硬件系统功能部件的运用、 机器指令的选择、各种数据类型变量 的存储空间分配以及寄存器和后缓寄 存器的调度等。
id3, t1,
( +,
( :=,
id2, t2,
t3, -,
t3 )
id1)
15
代码优化
目的:使目标代码运行时间较短,占用空 间较小。
( inttoreal, 10, -,
( ( *, +, id3, t1, id2, t2,
t1 )
t2 ) t3 ) ( *, id3, 10.0, t2 )
( :=,
遍(趟):对源程序或其等价的中间语言程序从 头到尾扫视并完成规定任务的过程。每一遍扫视 可完成上述一个阶段或多个阶段的工作。
21
7
需预处理的源程序 预处理程序 源程序 编译程序 目标汇编程序 汇编程序 高级语言程序的 处理过程
可再装配的机器代码
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

12.1.2 错误的种类
对于一个好的编译程序来说,应能具有较强 的查错和改错能力。查错,就是编译程序能 在编译时刻,准确而及时地发现源程序中的 错误,并能以简明的方式向用户报告这些错 误的性质和出现的确切位置。一个编译程序 应在一次编译期间发现源程序中尽可能多的 错误,不是发现一个错误便立即停止编译。 在编译时刻能够查出的源程序的错误称为和校正主 要是针对静态错误,即词法错误、语法错误 、非逻辑的或算法上的语义错误及违反环境 限制错误。
12.3 校正语法错误
12.3.1 语法错误的复原 12.3.2 语法错误的校正
12.3.1 语法错误的复原
对于语法错误的复原,与词法错误的情况一样,自 然地涉及下列问题: 错误的查出。 错误的定位。 错误的局部化。
重复错误信息的遏止。
12.3.1 语法错误的复原
12.2 校正词法错误
12.2.1 词法错误的种类 12.2.2 词法错误的校正
12.2.1 词法错误的种类
词法分析程序的基本任务是读入源程序字符 序列,识别出具有独立意义的最小语法单位( 单词或符号),并把它们变换成等价的内部中 间表示——属性字序列。词法分析时发现的 词法错误大多是单词拼写错误,这或者是因 为书写错误,或者是因为输入错误,假定不 会有连续几个字符的错误,从而可以假定有 如下几类词法错误: 拼错一个字符,如RECORD错写成RCCORD。 遗漏一个字符,如REPEAT错写成REPET。 多拼一个字符,如UNTIL错写成UNTILE。 相邻两个字符颠倒了次序,如LABEL错写 成LABLE。

12.1.3 错误复原
下面再考虑遏止株连错误的另一个例子。假定对于 下标变量A[e1, e2, e3],发现标识符A不是数组名 ,扫描到“[”时发出出错信息:[错。此后显然将 发出一连串株连错误信息。究其原因,可能是因为 标识符A未被说明。为了遏止株连信息,可以这样处 理:用一个“万能”标识符U去代替有错的标识符A ,或者说让A可以与任意类型的数据结构相关联,这 时在符号表的相应条目中已加标志,且填入了数组 和维数的信息,只要其后形如[e1, e2, e3]出现, 将不再发出出错信息。
第12章 出错处理
12.1 引言 12.2 校正词法错误 12.3 校正语法错误 12.4 校正语义错误 习题12
12.1 引言
12.1.1 错误存在的必然性 12.1.2 错误的种类 12.1.3 错误复原
12.1.1 错误存在的必然性
编译程序用来对源程序进行编译,当程序在 语法(包括词法)上正确时,可以得到相应的等 价的目标代码。当程序在语义上正确时,以正 确的输入数据运行目标代码可以得到预期的输 出结果。然而,一个程序,尤其是大型软件的 程序,其中难免包含错误。一个软件开发中所 存在的错误分布比例大致为:56%的错误源自 需求分析,27%的错误源自设计,7%的错误源 自编码。有人认为“没有一个程序第一次运行 就能正确地工作”是计算机程序设计的一个公 理。
12.3.2 语法错误的校正
1.自顶向下分析中错误的校正 假定在自顶向下分析过程中的某一时刻,源程序符 号串可写为w1Aw2的形式,其中,w1是已扫描部分 ,A是当前扫描符号,而w2是输入符号串的其余部 分。如果扫描到A时发现错误,分析程序又无法确 定下一个合法的分析动作,换言之,已构造的语法 树部分可覆盖w1,但不能继续构造语法树去覆盖A 与其余部分w2。
12.1.3 错误复原
词法分析时,如果发现输入字符串存在一个错误, 这表明,该输入字符串不是相应文法的句子,是否 就此不再继续词法分析呢?如果语法分析时,类似 地发现中间表示符号串中存在错误,表明不是相应 文法的句子,是否也不再继续语法分析呢?对于一 个实用的编译程序来说,它不应只能处理正确的程 序,它还必须能处理源程序中出现的错误,使得编 译工作能继续正常进行下去,不是发现一个错误就 结束编译,而是继续下去,以便查出全部错误。
12.3.1 语法错误的复原
有的编译程序,对语法错误复原采取的措施是 简单地放过相应的语法结构,例如,放过一个 语句的后继符号等。这种过于简单的做法往往 失去发现更多语法错误的机会。更合适的是设 法进行校正,尽管这种校正不能保证总是成功 的,然而,关于校正的信息可供用户(程序书 写人员)参考。
12.1.2 错误的种类
③ 语义错误。源程序中的语义错误有两类,一
类是在编译时才可发现的静态语义错误,例如 ,编译程序语义分析时发现的运算符对运算分 量类型而言不合法,或者双目运算符的两个运 算分量类型不相容,等等。另一类是在目标代 码运行时刻才能发现的动态语义错误,也就是 说,虽然编译程序把源程序翻译成了等价的目 标代码,未发现任何错误,但运行不能正常结 束或者运行结果经验证却是不正确的。
12.1.2 错误的种类
改错及校正,指编译程序在其翻译过程中发 现源程序的错误时能适当地对源程序进行修 正。为了正确地校正错误,必须十分清楚地 了解程序的意图,了解错误的性质,并确切 地对错误定位。即使是词法错误,也必须根 据上下文,试探性地做出修改。
12.1.2 错误的种类
一般来说,一个编译程序如果能在一次编译 时刻查出源程序中几乎所有的错误,指出错 误的性质,并给出错误所在的确切位置,对 于源程序的迅速改正将有很大的帮助。
12.1.3 错误复原
在错误复原时,应重视以下两个方面: 株连信息的遏止。 重复信息的遏止。 株连信息指的是因为源程序中的某个错误而导致编 译程序向用户发出的出错信息,该出错信息往往不 是真实的。
12.1.3 错误复原
例如,假定过程语句P(a,b)在输入时成了 p(a.b),编译时,编译程序将发出出错信息: 是不合法符号。如果做出的处理是删除,那么 ,当扫描p之后,将发出出错信息:缺少运算 符,当扫描到“)”时,将再发出出错信息: 参数个数少。显然后面两个出错信息是不真实 的。有时可能因为源程序中的一个错误而引出 一连串株连信息。应该遏止这种株连信息。 为了遏止株连错误,往往需要查看出错处的上 下文和取得相关的信息。例如,对于上述例子 ,可以取得关于过程p参数个数的信息,标识 符a是否记录类型信息,并向前查看到“)”确 定参数的个数。这样,甚至可以做出正确的修 改:把“· ”改成“,”。
12.1.2 错误的种类
④ 违反环境限制的错误。一个程序设计语 言可以有丰富的表达能力,用以书写各种应 用领域的程序,然而由于编译程序的实现问 题,一个手头上可用的编译程序往往对它所 能接受的源程序加某些限制。例如,Pascal 语言中过程的可调数组参数就不是每个编译 程序都可以接受的。另外,如标识符的长度 、整数的最大值范围、IF语句的最大嵌套层 数和数组的最大维数等,都可能会有一定的 限制。
12.2.1 词法错误的种类
对于错误复原问题,自然地涉及下列问题: 错误的查出。 错误的定位。 错误的局部化。 重复错误信息的遏止。 由于每一类单词可用一个正则表达式来描述, 所以在识别单词时,通常采用最长子串匹配策 略。
基于前面对词法错误的假设,不存在连续几个字符 都出错的现象,对词法错误的校正一般地有 删除一个字符。 插入一个字符。 替换一个字符。 交换相邻两个字符。
由于程序设计语言的语法用上下文无关文法描述, 源程序可由基于某种分析技术的识别程序精确地识 别,源程序中的语法错误总可自动地查出。
12.3.1 语法错误的复原
不言而喻,不同的分析技术发现错误的手段和方式 是不同的。例如,LL(1)与LR(1)分析技术都是当前 栈顶状态与当前输入符号配对所对应的分析表元素 空白时为出错。然而,对于优先技术,则是当前栈 顶符号和当前输入符号匹配时,它们之间不存在优 先关系而发现错误。显然,有的分析技术可对所发 现的错误准确地定位,采取一定的措施,使语法分 析能继续进行下去。
12.2.2 词法错误的校正
② 如果某个标识符拼写有错,因此查找符号
表时不能查到相应条目,这时可用符号表中与 之最接近的标识符去代替它,例如,如果有语 句X: = sim(a),但不能在符号表中查到标识 符sim,则可以用最接近的sin去代替sim。 ③ 其他拼写错误的情况,例如,源程序中所 引用之下标变量的数组标识符因拼写错误而不 能在符号表中查到,控制转移语句的转移目标 (标号)因拼写错误而无定义,等等,都可以用 与上面类似的办法来校正。 一般地,可以用试探法,试验删除、插入、替 换和交换四种情况,以最可能成功的那种修改 作为对错误的校正。
12.2.2 词法错误的校正
12.2.2 词法错误的校正
由于词法分析时,还不能收集到足够的信息,发现错 误便立即校正是不太恰当的,只是在某些场合可以予 以校正,下面列举若干。 ① 知道下一步应处理的字符号(关键字),而当前所扫 视的余留输入字符序列的任何前缀都不能构成字符号( 关键字),则可查字符号(关键字)表,从其中选择与当 前所扫视的输入字符串前缀最接近的字符号(关键字) 去代替这个前缀。例如“IF b THEM„”,对于 “THEM”将用最接近的“THEN”去代替。
12.1.3 错误复原
由于错误的存在,往往使编译程序不能正常地继续 下去,早期的一些编译程序,例如,ALGOL 60语言 的编译程序采用结束编译的办法。如今,几乎所有 常用程序设计语言的编译程序都能在发现源程序中 的错误时继续进行编译,以便一次编译能查出尽可 能多的错误。 在编译的过程中,发现源程序的错误时采取一定的 措施,使得能继续编译下去,这称为错误复原。如 果把所给不正确程序变换成正确的程序,则称之为 错误校正。显然,如前所述的原因,错误校正是极 其困难的。
《编译原理简明教程》
普通高等教育“十二五”规划计算机教材
---太原理工大学 ---计算机科学与技术学院 ---冯秀芳、崔冬华、段富等
目 录
•第一章 引言 •第二章 形式语言理论基础 •第三章 自动机理论基础 •第四章 词法分析 •第五章 语法分析—自顶向下分析方法 •第六章 语法分析—自底向上分析方法 •第七章 语义分析及中间代码的生成 •第八章 代码优化 •第九章 目标代码的生成 •第十章 符号表 •第十一章 目标程序运行时的存储组织与分配 •第十二章 出错处理 •第十三章 编译程序自动生成工具简介 •第十四章 面向对象语言的编译 •第十五章 并行编译技术
相关文档
最新文档