收藏 分享(赏)

编译原理讲义(54).doc

上传人:dreamzhangning 文档编号:2747991 上传时间:2018-09-26 格式:DOC 页数:139 大小:5.85MB
下载 相关 举报
编译原理讲义(54).doc_第1页
第1页 / 共139页
编译原理讲义(54).doc_第2页
第2页 / 共139页
编译原理讲义(54).doc_第3页
第3页 / 共139页
编译原理讲义(54).doc_第4页
第4页 / 共139页
编译原理讲义(54).doc_第5页
第5页 / 共139页
点击查看更多>>
资源描述

1、1编译原理讲义孙 清西安财经学院 信息学院 计算机系2007 年 1 月2教材:程序设计语言编译原理(第 3 版)陈火旺编 国防工业出版社 2000 年 1 月参考教材:1. 编译原理蒋立源 康慕宁 西北工业大学出版社 2004 年 1 月2. 编译原理吕映芝 张素琴 蒋维杜 清华大学出版社 2002 年 5 月3. Compiler Construction Principles and Practice, Kenneth C. Louden, Thomson Press 2003.2学时:54 学时分配:周 3 学时章节 学时第一章:引论 3第二章 高级语言及其语法描述 3第三章 词法分析

2、 6第四章 语法分析-自上而下分析 6第五章 语法分析-自下而上分析 6第六章 属性文法和语法制导翻译 6第七章 语义分析和中间代码产生 6第八章 符号表 3第九章 运行时存储空间组织 3第十章 优化 3第十一章 目标代码生成 3第十二章 并行编译基础 3总复习 3 3编译原理课程在计算机科学技术中的地位程序设计语言离散数学数据结构编译原理操作系统系统软件应用软件软件工程信息系统电子商务算法分析计算基础4第一章:引论 什么是编译程序 编译过程概述 编译程序的结构 编译程序的生成11 什么叫编译程序程序翻译的两种方式:、编译程序: 把高级语言源程序转换成低级语言目标语言程序,并且后者与前者逻辑上

3、是等价的,这样的程序即为编译程序。、解释程序: 以源程序作为输入,但不产生目标程序,边解释边执行源程序的程序。编译程序的分类:5诊断编译程序:专用于帮助程序开发和调试的编译程序。优化编译程序:着重于提高目标代码效率的编译程序。交叉编译程序:产生不同于其宿主机的机器代码的编译程序。可变目标编译程序:不需要重写编译程序中与机器无关的部分就能改变目标机的编译程序。12 编译过程概述以中英文翻译为例,翻译所需步骤:1)识别出句子中的一个个单词 . 词法分析2)分析句子的语法结构 . 语法分析3) 根据句子的含义进行初步翻译 . 语义分析与中间代码产生4)对译文进行修饰 . 优化5) 写出最后的译文 .

4、 目标代码生成、词法分析输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个单词。例 1.1for (i=0;iHemeagavebook上述语法规则中 He,me,book,gave,a 称为终结符号;, , ,等称为非终结符号;是这个文法最 终要定 义的语法结构,称 为开始符号; 这种书写形式称为产生式。13可以推导出句子:He gave me a book 是一个语法上正确的句子。推导方法:反复把规则中“” 左边的成分替换成右 边的成分。语法树终结符号:是一个语言不可再分的基本符号,如:标示符、常数、算符、界符等。非终结符号:用来代表语法范畴,是由终结符号和非终结符号组成的符号串

5、,如:表达式、语句、子程序、函数等。开始符号:是一个特殊的非终结符号,代表语言中我们最感兴趣的语法范畴。产生式:也称规则,形式是: A形式上说,上下文无关文法 G 是一个四元式 ,其中),(SVNT是一个非空有限集,它的每个元素称为终结符号;TV是一个非空有限集,它的每个元素称为非终结符号, 和 不含公共N TN的元素,即 ;NT是一个非终结符号,称为开始符号,至少在某个产生式左部出现一次;S是一个产生式集合(有限) ,每个产生式的形式是*NVP, )(,其 中 , NT若干个左部相同的产生式,如 21P.He gave me a book14. nP可合并为一个产生式,缩写成: nP|.|2

6、1其中,每个 称为 P 的一个候选式。i例 2.2:一个上下文无关文法:Ei|EAEA+|*推导与归约:推导:使用产生式的右部取代左部的过程。是从开始符号开始,最终产生一个语言的句子。归约:使用产生式的左部取代右部的过程。是从给定的句子开始,最终到达开始符号。 *NTVAA)(、是 一 个 产 生 式 , 且仅 当 , 即直 接 推 出 如果 ,则称这个序列是 的一个推导n.21 n到1表示,从 出发经 1 步或若干步可推导出n1表示,从 出发经 0 步或若干步可推导出*1 n假定 G 是一个文法,S 是它的开始符号。如果 ,则称 是一个句型。*S仅含终结符号的句型是一个句子。文法 G 所产生

7、的句子的全体是一个语言,记为 L(G) 词法分析器给出的输出为:通常将词法分析器作为子程序调用,而不将词法分析作为独立的一遍处理。203.2 词法分析器的设计(单词种别,属性值)预处理子程序输 入缓冲区源程序扫描器半扫描缓冲区 半扫描缓冲区起点指示器 搜索指示器符号表超前搜索:为了识别出相应的关键字,扫描器必须超前扫描多个字符,超前到能够肯定词性的地方为止。例 3.2:FORTRAN 源程序:1 DO99K=1,102 IF(5.EQ.M)I=103 DO99K=1.104 IF(5)=55状态转换图:只包含有限个状态,其中一个是初态, 至少要有一个终态。 状态用圆圈表示,有向弧上的标记表示状

8、态迁移时出现的字符。例 3.3:大多数程序语言的单词符号都可以用状态转换图进行识别。01 2字母 其它字母或数字*21例 3.4:构造一个简单语言的所有单词符号:I给出 该语言的 单词识别 状态转换 图。II状态转换图的实现:每个状态对应一个程序。终态结点对应 return(code,value)int code,value ;strToken=“”;GetChar();GetBC();/*看字符是否为空格, 若是则调用 GetChar(),直至为非空字符*/if(IsLetter())while (IsLetter()|IsDigit()Concat();GetChar();Retract(

9、);/*回调一个字符位*/code=Reserve();/*是否保留字*/if(code=0)value=InsertId(strToken);return ($ID,value);单词符号 种别编码 助忆符 内码值DIM 1 $DIM -IF 2 $IF -DO 3 $DO -STOP 4 $STOP -END 5 $END -标识符 6 $ID 内部字符串常数(整) 7 $INT 标准二进制形式= 8 $ASSIGN -+ 9 $PLUS -* 10 $STAR -* 11 $POWER -, 12 $COMMA -( 13 $LPAR -) 14 $RPAR -12)0空白数字3 非数字

10、 4*数字5*=6*+1字母 其它 2*字母或数字10,11(13其它7 非* 8*9*22else return(code,-);else if (IsDigit()while(IsDigit()Concat();GetChar();Retract();value=InsertConst(strToken);return($INT,value);else if(ch=)return($ASSIGN,-);else if(ch=+)return($PLUS,-);else if(ch=*)GetChar();if(ch=*)return($POWER,-);Retract();return($

11、STAR,-)else if(ch=;)return($SIMICOLON,-);else if(ch=()return($LPAR,-);else if(ch=)return($RPAR,-);else ProcError();3.3 正规表达式与有限自动机正规文法、正规式、DFA、NFA 在接受语言能力上是互相等价的。DFA最小化NFA正规文法正规式23正规式与正规集:1) 和 都是上的正规 式,它们所表示的正规集分 别为和 ;2) 任何 a,a 是上的一个正 规式,它所表示的正规集为a;3) 假定 U 和 V 都是上的正规式,它 们所表示的正 规集分别记为 L(U)和 L(V),那么,(

12、U|V)、(UV) 和(U) *也都是正规式,它们所表示的正规集分别为 L(U)L(V)、L(U)L(V)和(L(U) * 。仅由有限次使用上述三步骤而得到的表达式才是上的正规式。仅由这些正规式所表示的字集才是 上的正规集。运算符的优先顺序为:*、 、|。例 3.5: 有=a,b,则正规式: 对应的正规集:ba* 上以 b 为首后跟任意多 a 的字。a(a|b)* 上以 a 为首的字。(a|b)*(aa|bb)(a|b)* 上所有含两个连续 a 或两个连续 b 的字。若两个正规式 U,V 所表示的正规集相同,则认为二者等价,记为 U=V。例 3.6:b(ab)*=(ba)*b,(a|b) *=

13、(a*b*)* 令 U、V 和 W 均为正规式,有下列 规律:U|V=V|UU|(V|W)=(U|V)|WU(VW)=(UV)WU(V|W)=UV|UW24(V|W)U=VU|WUU=U=U确定有限自动机(DFA)一个确定有限自动机 M 是一个五元式: ,其中)F,s,S(01) S 是一个有限集,它的每个元素称 为一个状态。2) 是一个有穷字母表,它的每个元素称为一个输入字符。3) 是一个从 S至 S 的单值部分映射。 ,s)a,(4) 是唯一的初态。Ss05) ,是一个终态集(可空)。F有限自动机可以用状态转换矩阵表示。例 3.7:有 DFA,其中 为:3),0ba,(0,123M)a2b

14、,(,( )11)a23,(3,()b状态 a b0 1 21 3 22 1 33 3 3能识别上所有含有相继两个 a 或相继两个 b 的字。有限自动机也可以表示成状态转换图。25a|bbbaab0 312a对于 *中的任何字 ,若存在一条从初始态结点到某一终态结点的通路,且这条通路上所有弧的标记符连接成的字等于 ,则称 可为 M 所识别。若 M 的初态结点同时又是终态结点, 则 可被 M 识别。有限状态机 M 所能识别的字的全体记为 L(M)。非确定有限自动机(NFA)一个非确定有限自动机 M 是一个五元式 ,其中)F,S,(01) S 是一个有限集,它的每个元素称 为一个状态。2) 是一个

15、有穷字母表,它的每个元素称为一个输入字符。3) 是一个从 S*至 S 的子集的映射,即 S2:*4) 是一个非空初态集。S05) ,是一个终态集(可空)。F对于 *中的任何字 ,若存在一条从某一初始态结点到某一终态结点的通路,且这 条通路上所有弧的 标记字依次连接成的字(忽略那些标记为 的弧)等于DFA最小化NFA正规文法正规式26,则称 可为 NFA M 所识别。若 M 的某些结点既是初态结点同时又是终态结点,或者存在一条从某个初态结点到某个终态结点的 通路,则 可被 M 识别 。一、NFA M 的确定化对于每个 NFA M 存在一个 DFA M”,使 L(M)=L(M”)。步骤一、对 NF

16、A 的状态转换图进行以下改造:)F,S,(0引进新的初态结点 X 和终态结点 Y, ,从 X 到 S0 中任意状态结点连Y,一条 箭弧,从 F 中任意状 态结点连一条 箭弧到 Y。对 M 的状态转换图按如下方式实施替换,其中 k 是新引入的状态。重复这种分裂过程直至状态转换图中的每条箭弧上的标记为 ,或为中的单个字母。将最终得到的 NFA 记为 M,显然 L(M)=L(M). 步骤二、将 M进一步变换为 DFA,方法如下:首先定义 FA M 的任一状 态子集 I 的 _CLOSURE(I):(1)若 qI, 则 q_CLOSURE(I);(2)若 qI, 则从 q 出发经过任意条 弧所能到达的

17、任何状态 q 都属于 _CLOSURE(I)。i k jA Bi k j Ai jAB 替换为i jA/B 替换为i jA* 替换为i0AjB27其次定义 Ia:对 FA M 的任一状 态子集 I, 若 a 是 中的一个字符,则定义 Ia=_CLOSURE(J),其中 J 是从 I 中某一状态出发经过 a 所能到达的所有状态的集合。 例 3.8:令 I=1,求 Ia=?Ia=-closure(J)=-closure(1,a))=-closure(2,4)=2,4,5用子集法对 NFA 确定化:(1)构造一张转换 表, 该表的第 1 列为状态子集 I,不同 输入符 a 对应表中一列 Ia。(2)

18、表的首行首列为 _CLOSURE(X)。(3)根据首行首列中的状态集, 为每个输入符 a 求其 Ia 并记入相应的 Ia 列中。若此 Ia 不同于第 1 列已存在的所有状 态子集, 则将其 顺序列入空行中的第 1 列。(4)重复(3)直至对每个 I 及 a 均已求得 Ia, 且无新的状态子集 Ia 加入第 1 列为止。 (5)重命名第 1 列的每个状态集, 所得状态转换矩阵即为与 NFA M等价的DFA M”。例 3.9:正规式(a|b)*(aa|bb)(a|b)*的 NFA M 如下,试将其确定化为 DFA M。a a 2 Y6b babX 5 134 ba 1 2 5a 3 64aa28解

19、: 用子集法将上述 NFA M 确定化为 正规式的状态转换矩阵为:I Ia IbX,5,1 5,3,1 5,4,15,3,1 5,2,3,1,6,Y 5,4,15,4,1 5,3,1 5,2,4,1,6,Y5,2,3,1,6,Y 5,2,3,6,1,Y 5,4,6,1,Y5,2,4,1,6,Y 5,3,6,1,Y 5,2,4,6,1,Y5,4,6,1,Y 5,6,3,1,Y 5,2,6,4,1,Y5,6,3,1,Y 5,6,2,3,1,Y 5,6,4,1,Y对上状态转换矩阵重新命名,得到下列状态转换矩阵:s a b0 1 21 3 22 1 43 3 54 6 45 6 46 3 5生成 DF

20、A M的状态转换图自己画。二、正规文法与有限自动机的等价性1. 对于每个右线性(或左线性)正规文法 G,都存在一个有限自动机M,使得 L(M)=L(G)。2. 对于每个有限自动机 M,都存在一个右线性正规文法 GR 或左线性正规文法 GL,使得 L(M)=L(GR)=L(GL)。证明 1:设右线性文法 G= ,增加一个新终结状 态符号 , 。,SVNT fNV令 M= ,其中 由以下规则定义:,ffVN若对某个 。则 令中 有 产 生 式及 faAaAT ),(,29。则 令不 包 括 的 所 有 产 生 式 为右 端 第 一 符 号 为中 左 端 为设及对 任 意 的 ,.),(),(|.

21、, 11 kkTN AaAaA aV在正规文法 G 中, 的充要条件是:在 M 中,从状态 S 到状态 有一条wSf通路,其上所有箭弧的标记符号依次连接起来恰好等于 w,也就是说当且仅当 ,故 。)(Lw)(L)(LG证明 2:设 DFA M FsS,0由以下规则定义:其 中令若 ,0GsR。时 , 令当 时 , 令当 则 :若 有及对 任 何 aBAFBa|;)(,则存在一个最左,),.1(,., 01* wskiwik。 若其 中设对 任 何推导: kii aAaas . 111210 所以 当且仅当 。)(RGL)(ML,但,00sFs所 以有若 )(RGL在 中添加新的非终结符号 和产

22、生式 作开R )(,0S00 ,|ss代 替用始符号。得到的修正文法 仍是右线性文法,并且 。RG)(MR由 DFA 和 NFA 之间的等价性,结论 2 得证。例 3.10:设 DFA M= ,映射函数 为:,1,0,BADCBADAB)1,(0)1,(0),(D),(01) 根据 M 构造等价的右线性文法 ,其中 由,1ACBGR下列产生式组成: CB1|0D|030显然 L(GR)=L(M)=0(10)*2) 根据 GR 构造 NFA M= 。其中 为:f,1,0f,ADCBADAB)1,(0f,)1,(0)1,(D),(三、正规式与有限自动机的等价性1、对任何 FA M,都存在一个正规式

23、 r,使得 L(r)=L(M)。2、对任何正规式 r,都存在一个 NFA M,使得 L(M)=L(r)。证明 1:对于 上的 NFA M,来构造 上的正规式 r,使 L(r)=L(M)。令状态转换图的每一条弧可用正规式作标记。在 M 的状态转换图上加进两个结点 X,Y,其中 X 用 弧连接到 M 的所有初态结点;Y 用 弧连接到 M 的所有终态结点。这个 M与 M 等价。利用下列替换规则逐步消除 M中除 X、Y 之外的结点,即可构造出等价的正规式 r,使 L(r)=L(M)=L(M)。证明 2: 对于 上的正规式 r,来构造 上的 NFA M,使 L(M)=L(r),并且 M只有 一个终态,且没有从该终态出发的箭弧。对 r 中的运算符数目 进行 归纳,来证明上述结论。ki jA1Bi k jA BCi jAB替换为i jA|B替换为i jAC*B替换为i0AjB

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报