收藏 分享(赏)

编译原理课件chap03(陈火旺).ppt

上传人:jinchen 文档编号:7258256 上传时间:2019-05-11 格式:PPT 页数:97 大小:1.75MB
下载 相关 举报
编译原理课件chap03(陈火旺).ppt_第1页
第1页 / 共97页
编译原理课件chap03(陈火旺).ppt_第2页
第2页 / 共97页
编译原理课件chap03(陈火旺).ppt_第3页
第3页 / 共97页
编译原理课件chap03(陈火旺).ppt_第4页
第4页 / 共97页
编译原理课件chap03(陈火旺).ppt_第5页
第5页 / 共97页
点击查看更多>>
资源描述

1、第三章 词法分析,第三章 词法分析,编译程序首先是在单词级别上来分析和翻译源程序的。词法分析的任务是:从左至右逐个字符地对源程序进行扫描,产生一个个单词符号,把作为字符串的源程序改造成为单词符号串的中间程序。因此,词法分析是编译的基础。执行词法分析的程序称为词法分析器。 3。1 对词法分析器的要求3.1.1 词法分析器功能和输出形式输入源程序,输出单词符号。程序语言的单词符号一般分为五种:关键字,标识符,常数,运算符,界符,第三章 词法分析,词法分析器输出的单词符号常常表示为二元式:(单词种别,单词符号的属性值) 单词种别通常用整数编码。一个语言的单词符号如何分种,分成几种,怎样编码是一个技术

2、问题。它取决于处理上的方便。标识符一般统归为一种。常数则宜按类型(整、实、布尔等)分种。关键字可视其全体为一种,也可以一字一种。采用一字一种的分法实际处理起来较为方便。运算符可采用一符一种的分法,但也可以把具有一定共性的运算符视为一种。至于界符一般一符一种的分法。,第三章 词法分析,如果一个种别只含有一个单词符号,那么对于这个单词符号,种别编码就完全代表它自身了。若一个种别含有多个单词符号,那麽,对于它的每个单词符号,除了给出种别编码之外,还应给出有关单词符号的属性信息。单词符号的属性是指单词符号的特征或特性。属性值则是反映特性或特征的值。例如,对于某个标识符,常将存放它有关信息的符号表项的指

3、针作为其属性值;对于某个常数,则将存放它的常数表项的指针作为其属性值。,第三章 词法分析,作为例子考虑下述C+代码段:while (i=j) i- -;经词法分析器处理后,它将转换为如下的单词符号序列:= , - ,第三章 词法分析,3.1.2 词法分析器作为独立子程序我们把词法分析器安排成一个独立子程序,每当语法分析器需要一个单词符号时就调用这个子程序。每一次调用,词法分析器就从符号串中识别出一个单词符号,把它交给语法分析器。这样,把词法分析器安排成一个子程序似乎比较自然。在后面的讨论中,我们假定词法分析器是按这种方式进行工作的。,第三章 词法分析,3。2 词法分析器的设计3。2。1 输入、

4、预处理词法分析器工作的第一步是输入源程序文本。输入串一般放在一个缓冲区中,这个缓冲区称输入缓冲区。词法分析器的工作可以直接在这个缓冲区中进行。但在许多情况下,把输入串预处理一下,对单词符号的识别工作将是比较方便的。预处理工作包括对空白符、跳格符、回车符和换行符等编辑性字符的处理,及删除注解等。我们可以设想构造一个预处理子程序,他完成上面的工作。每当词法分析器调用它时就处理出一串确定长度的输入字符,并将其装入词法分析器所指定的缓冲区中(称为扫描缓冲区)。这样分析器就可以在此缓冲区中直接进行单词符号的识别工作。,第三章 词法分析,分析器对扫描缓冲区进行扫描时一般使用两个指示器,一个指向当前正在识别

5、单词的开始位置。(指向新单词的首字符),另一个用于向前搜索以寻找单词的终点。不论扫描缓冲区设得多大都不能保证单词符号不会被缓冲区的边界所打断。因此,扫描缓冲区最好使用如下一分为二的区域:,第三章 词法分析,假定每半个区可容120个字符,而这两个半区又是互补的。如果搜索指示器从单词起点出发搜索到半区的边缘但尚未达到单词的终点,那么就调用预处理子程序,令其把后续的120个字符装入另半区。我们认定在另半区一定可以达到单词的终点。这意味着得标示符和常数的长度实际上必须加以限制,否则即使缓冲区再大也无济于事。,第三章 词法分析,图3。1词法分析器,3。2。2 单词符号的识别:超前搜索 词法分析器的结构图

6、如图3。1所示。,第三章 词法分析,当词法分析器调用预处理子程序处理出一串输入字符串放进扫描缓冲区之后,分析器就从此缓冲区中逐一识别单词符号。当缓冲区里的字符串被处理完之后,它又调用预处理程序装入新串。下面我们来介绍单词符号识别的一个简单方法-超前搜索,第三章 词法分析,关键字的识别像FORTRAN这样的语言,关键字不加保护(只要不引起矛盾,用户可以用它们作为普通标识符),关键字和用户自定义的标识符或标号之间没有特殊的界符作间隔。这使得关键字的识别甚为麻烦。请看下面例子:1 DO99K=1,102 IF(5.EQ.M)I=103 DO99K=1.104 IF(5)=55这四个语句都是正确的FO

7、RTRAN语句。语句1和2分别是DO和IF语句,它们都是以某基本字开头的。语句3和4是赋值语句,它们都是以用户自定义的标识符开头的。,第三章 词法分析,为了从1、2中识别出关键字DO和IF,我们必须要能够区别1、3和区别2、4。语句1、3的区别在于等号之后的第一个界符:一个为逗号,另个为句末符。语句2、4的主要区别在于右括号后的第一个字符:一个为字母,另一个为等号。这就是说,为了识别 1、2句中的关键字,我们必须超前扫描许多个字符,超前到能够肯定词性的地方为止。对于1、3来说,尽管都以D和O两个字母开头,但不能一见DO就认定是DO语句。我们们必须超前搜索,跳过所有的字母和数字,看看是否有等号。

8、如果有,再向前搜索。若下一个界符是逗号,则可以肯定DO应为关键字。否则,DO不构成关键字,它只是用户标识符的头两个字母。所以为了区别1和3,我们必须超前扫描到等号后的第一个界符处。,第三章 词法分析,对于2和4来说,必须超前扫描到与IF后的左括号相对应的那个右括号之后的第一个字符为止。若此字符是字母,则得逻辑IF。若此字符为数字,则得算术IF。否则,应认为是用户自定义标识符IF.标识符的识别、常数的识别及算符和界符的识别相类似可以参考课本P40,P41这里就不再多述。3。2。3 状态转换图使用状态转换图是设计词法分析器的一种好途径。转换图是一张有限方向图。在转换图中,结点代表状态,用园圈表示。

9、状态之间用箭弧连结。箭弧上的标记(字符)代表在射出结点(即箭弧始结点)状态下可能出现的输入字符或字符类。,第三章 词法分析,例如图3。2(a)表示:在状态1下,若输入字符为X,则读进X,并转换到状态2。若输入字符为y,则读进Y,并转换到状态3。一张转换图只包含有限个状态(即有限个结点),其中有一个被认为是初态,而且实际上至少要有一个终态(用双圈表示)。,图3。2状态转换图,第三章 词法分析,一个状态转换图可用于识别一定的字符串。例如,识别标识符的转换图如图3。2(b)所示。其中0为初态,2为终态。这个转换图识别标识符的过程是:从初态0开始,若在状态0下输入字符是字母,则读进它,并转入状态1。在

10、状态1之下,若输入字符为字母或数字,则读进它,并重新进入状态1。一直重复这个过程直到发现输入字符不再是字母或数字时(这个字符已经被读进)就近入状态2。状态2是终态,它意味着到此已经识别出一个标识符。终态上打个*号,表示多读进了一个不属于标识符部分的字符,应把它退还给输入串,如果在状态0时输入字符不为“字母”,则意味着这个转换图不工作。,图3。2状态 转换图,第三章 词法分析,又如书中图3。2(c)是识别整数的转换图。其中0为初态,2为终态。 书中图3。2(d)是一个识别FORTRAN实型常数的转换图。其中0态为初态,7态为终态。一个非常重要的事实是,大多数程序语言的单词符号都可以用转换图予以识

11、别。作为一个综合例子,课本P43构造了一个识别某个简单语言的所有单词符号的转换图。希望同学们好好读一下。,第三章 词法分析,3。2。4状态转换图的实现转换图容易用程序实现。最简单的办法是让每个状态结点对应一小段程序。在编制程序的过程中课本引进了一组全局变量和过程。将它们作为实现转换图的基本成分。希望同学能记住它们。,第三章 词法分析,3.3 正规表达式与有限自动机为了更好地使用状态转换图构造词法分析器,为了讨论词法分析器的自动生成,还需要将转换图的概念形式化。为此我们引入:正规式,正规集,自动机等概念。3.3.1 正规式与正规集对于字母表,我们感兴趣的是它的一些特殊的字集,即所谓正规集。我们使

12、用正规式这个概念来表示正规集。,第三章 词法分析,下面是正规式和正规集的定义:(1)和都是 上的正规式,他们所表示的正规集分别为 和;(2)任何a , a是上的一个正规式,它所表示的正规集为a;(3)假定U和V都是上的正规式,他们所表示的正规集分别记为L(U)和L(V),并且,(U|V), (UV)和(U)*也都是正规式,它们所表示的正规集分别为L(U)L(V), L(U)L(V)(连接积)和(L(U)*(闭包)仅由有限次使用上述三步骤而得到的表达式才是上的正规式。仅由这些正规式所表示的字集才是上的正规集。,第三章 词法分析,通过这一节的学习,根据给出的简单正规式,应会写出其正规集。3。1 令

13、=a, b其正规式和正规集如下:正规式 正规集ba* 上所有以b为首后跟着任意多个a的字a(a|b)* 上所有以a为首的字。 (a|b)*(aa|bb)(a|b)* 正规集是 所有两个相继的a或相继 的b 的字。,第三章 词法分析,3。2 令=A,B,0,1 ,则:正规式 正规集 (A|B)(A|B|0|1)* 上的“标识符”的全体 (0|1)(0|1)* 上“数”的全体若两个正规式所表示的正规集相同,则认为二者等价。两个等价的正规式U和V记为U=V。 例如:b(ab)*=(ba)*b等价,第三章 词法分析, a a b b - (a) a 一个正规式可以表示若干个符号串, (b) b 其正规

14、集就是这些符号串的集合 a|b a,b ab ab a* ,a,aa,aaa,aaaa,. b* ,b,bb,bbb,bbbb,. - (a|b)* a和b组成的所有串 a*|b* ,a,aa,aaa,aaaa,.,b,bb,bbb,bbbb,. aba* 以ab开头后接若干个(包括0个)a组成的串 (a|b)*(aa|bb) (a|b)* *上所有含有两个相继的a或两个相继的b组成的串,第三章 词法分析,例:令d, ,e,则上的正规式d*(.dd*| )(e(+|-|)dd*|)表示的是所有无符号数。其中d为09中的数字。比如:2,12.59,3.6e2,471.88e-1等都是正规式表示集

15、合中的元素。,设r,s,t为正规式,正规式服从代数规律有:,1、r|ss|r 交换律 2、r|(s|t)(r|s)|t 结合律 3、(rs)t=r(st) 结合律,第三章 词法分析,4. r(s|t) = rs|rt 分配律(s|t)r = sr|tr 分配律 5. r=r 零一律r=r 零一律,程序设计语言中的单词既能用正规文法表示,又能用正规式来表示.,正规文法:l|l l|d|l| d d|d l表示a-z中的任何英文字母,d表示0-9中的任何数字,正规式: 标识符:e1=字母(字母|数字)* 无符号整数:e2=dd*,第三章 词法分析,3.3.2 确定有限自动机(DFA) 有穷自动机:

16、是一种自动识别装置,能正确识别正规集;确定有限自动机(DFA)是一个五元式M= (S, ,s0, F) 其中: (1)S是一个有限集,它的每个元素称为一个状态。(2)是一个有穷字母集,它的每个元素称为一个输入字符。(3) 是一个从S x 至S的单值部分映射。 (s,a)=S。意味着:当现行状态为s、输入字符为a时,将转换到下一个状态S。我们称S为s的后继状态。(4)S0S,是唯一的初态。(5)FS,是一个终态集(可空),第三章 词法分析,显然, DFA可以用一个矩阵表示,该矩阵的行表示状态,列表示输入字符,矩阵元表示(s,a)的值,该矩阵称为状态转换矩阵。DFA也可以表示成一张(确定的)状态转

17、换图。假定DFA M 含有m个状态n个输入字符,那末,这张图含有m个状态结点,每个结点顶多有n条箭弧射出和别的结点相连接,每条箭弧用上的一个不同字符作标记,整张图含有唯一的初态和若干个(可以是0个)终态结点。,第三章 词法分析,对于*中的任何一个字符,若存在一条从初态结点到某一终态结点的通路,且这条通路上所有箭弧的标记符连接成的字等于,则称为DFA M所识别(读出或接受)。若M的初态结点同时又是终态结点,则为空字可以为M所识别。DFA M所能识别的字的全体记为L(M).,第三章 词法分析,例 有DFA M=(0,1,2,3,a,b,0,3) 其中:(0,a)=1; (0,b)=2(1,a)=3

18、; (1,b)=2(2,a)=1; (2,b)=3(3,a)=3; (3,b)=3 问:有几个状态?几个输入字符?并画出其转换图。L(M)=? 解:有0,1,2,3共四个状态。输入字符为a,b两个。其状态转换图如右 L(M)为在上所有含相继两个a或相继两个b的字。,(a|b)*(aa|bb)(a|b)* 正规集是 所有两个相继的a或相继 b 的字。,第三章 词法分析,3。3。3 非确定有限自动机(NFA)一个非确定有限自动机(NFA)是一个五元式M= (S, ,S0, F) 其中:(1) S 同3。3。2的1 (2)同3。3。2的2 (3) 是一个从S x *到S的子集的映照,即 :S x *

19、2s(4) S0S,是一个非空的初态集; (5)F S,是一个终态集(可空),第三章 词法分析,例:一个NFA, M(0,1,2,3,4,a,b,f,0,2,4) 其中:f(0,a)=0,3 f(2,b)=2f(0,b)=0,1 f(3,a)=4f(1,b)=2 f(4,a)=4f(2,a)=2 f(4,b)=4,状态图表示如下:,第三章 词法分析,说明:一个初态,二个终态。DFA是NFA的特例。,定理:对于每个NFA M,存在一个DFA M,使得L(M)=L(M)。 对于任何两个有穷自动机M和M,如果L(M)=L(M),则称M与M是等价的。,第三章 词法分析,显然,NFA也可以表示成一张状态

20、转换图。假定NFA 含有m个状态n个输入字符,那末,这张图含有m个状态结点,每个结点可以射出若干条箭弧和别的结点相连接,每条箭弧用*上的一个字(不一定要不同的字而且可以是空字)作标记(称为输入字),整张图至少含有一个的初态和若干个(可以是0个)终态结点。某结点既可以是初态也可以是终态结点。,第三章 词法分析,对于*中的任何一个字符,若存在一条从初态结点到某一终态结点的通路,且这条通路上所有箭弧的标记符连接成的字(忽略那些标记为的弧)等于,则称为NFA M所识别(读出或接受)。若M的初态结点同时又是终态结点,或者存在一条某处态结点到某各终态结点的通路,则为空字可以为M所识别。这里应注意DFA与N

21、FA的异同点。,第三章 词法分析,显然DFA是NFA的特例。对于每个NFA M存在一个DFA M”,使L(M)=L(M”)。其证明如下(略)在这个证明中特别强调的是课本P49页下边提到的对M的状态转换图进一步施行图3。7所示的替换,其中k是新引入的状态。,第三章 词法分析,书中的这个图3。7同时也是从正规式画有限自动机状态转换图的重要方法。对于正规式中的连接可按1式画其转换图,对于或可用2式,对于闭包可用3式。将正规式转换为状态转换图灵活使用这些规则非常重要的。 如:正规式:R=(a*b)*ba(a|b)*可以画为:,第三章 词法分析,其中(a*b)* 和(a|b)*分别可以看成一个闭包。形成

22、A和G结点。 例:画出正规式:(a|b)*(aa|bb)(a|b)*对应的NFA,第三章 词法分析,NFA 转换为等价的DFA,从NFA的矩阵表示中可以看出,表项通常是一状态的集合,而在DFA的矩阵表示中,表项是一个状态,NFA到相应的DFA的构造的基本思路是: DFA的每一个状态对应NFA的一组状态. DFA使用它的状态去记录在NFA读入一个输入符号后可能达到的所有状态.,第三章 词法分析,定义1:集合I的-闭包:,令I是一个状态集的子集,定义-closure(I)为: 1)若sI,则s-closure(I); 2)若sI,则从s出发经过任意条弧能够到达的任何状态都属于-closure(I)

23、。 状态集-closure(I)称为I的-闭包,为了使得NFA确定化,我们首先给出两个定义:,例:如图所示的状态图: 令I=1,求-closure(I)=?,根据定义: -closure(I)=1,3,第三章 词法分析, J是从状态子集I中的每个状态出发,经过标记为a的弧而达到的状态集合., Ia是状态子集,其元素为J中的状态,加上从J中每一个状态出发通过弧到达的状态,定义2: 令I是NFA M的状态集的一个子集, a 定义: Ia=-closure(J)其中J = (s,a),SI,例:令I=1,求Ia=?,Ia=-closure(J)=-closure(1,a))=-closure(2,4

24、)=2,4,6,第三章 词法分析,状态集合I的有关运算的例子,I=1, -closure(I)=?; I=5, -closure(I)=?; (1,2,a)=? -closure(5,3,4)=?; 状态集合I的a弧转换,表示为move(I,a)定义为状态集合J,其中J是所有那些可从I中的某一状态经过一条a弧而到达的状态的全体。,第三章 词法分析,状态集合I的有关运算的例子,I=1, -closure(I)=1,2; I=5, -closure(I)=5,6,2; (1,2,a)=5,3,4 -closure(5,3,4)=2,3,4,5,6,7,8;,第三章 词法分析,NFA确定化算法:,假

25、设NFA N=(K, ,f,K0,Kt)按如下办法构造一个DFA M=(S, ,d,S0,St),使得L(M)=L(N): 1. 构造DFA M的状态,选择NFA N的状态的一些子集构成:M的状态集S由K的一些子集组成。用S1 S2. Sj表示S的元素,其中S1, S2,. Sj是K的状态。并且约定,状态S1, S2,. Sj是按某种规则排列的,即对于子集S1, S2= S2, S1,来说,S的状态就是S1 S2;,第三章 词法分析,2 M和N的输入字母表是相同的,即是; 构造DFA M的转换函数,根据新构造的状态和字母表中的字符构造: 转换函数是这样定义的: d(S1 S2,. Sj,a)=

26、 R1R2. Rt 其中 R1,R2,. , Rt = -closure(move(S1, S2,. Sj,a) 4 S0=-closure(K0)为M的开始状态; 5 St=Si Sk. Se,其中Si Sk. SeS且Si , Sk,. SeKt,第三章 词法分析,构造NFA N的状态K的子集的算法:把多值转换函数所转换到的多值(多状态)的集合作为一个子集,映射到DFA的一个新的状态 假定所构造的子集族为C,即C= (T1, T2,. TI),其中T1, T2,. TI为状态K的子集。1 开始,令-closure(K0)为C中唯一成员,并且它是未被标记的。,第三章 词法分析,2 while

27、 (C中存在尚未被标记的子集T)do 标记T; for 每个输入字母a do U:= -closure(T,a); if U不在C中 then 将U作为未标记的子集加在C中 ,第三章 词法分析,NFA的确定化,例子,第三章 词法分析,第三章 词法分析,等价的DFA,a,a,b,第三章 词法分析,三、确定有穷自动机DFA的化简 (消除多余状态+合并等价状态):,将多余状态消除而形成一个最小的等价的DFA,1、多余状态的概念:从该自动机的开始状态出发,任何输入串也不能到达的那个状态。下图中的哪些状态是多余的?,第三章 词法分析,化简后的结果:,左右等价,第三章 词法分析,化简后的结果:,左右等价,

28、第三章 词法分析,2、等价的条件(状态S和T) 一致性条件 状态S和T必须同时为可接受状态或不可接受状态(终态还是非终态)。 蔓延性条件 对于所有输入符号,状态S和状态T必须转换到等价的状态里。3、合并等价状态的方法(分割法) 方法:将DFA的状态分割成一些互不相交的子集。不同子集的状态是可区别的,同一子集中的任何两个状态是等价的。,合并等价状态:发现等价状态,并将这些等价状态合并成一个状态。,第三章 词法分析,例子:将图中的DFA M最小化。,第三章 词法分析, 将M分成两个子集:一个终态(可接受态)组成,一个非终态组成。P0(1,2,3,4,5,6,7) 第1个子集1,2,3,4中:1,2

29、中的状态和3,4中的任何状态在读入a后到达了不等价的状态,两个状态都是不可区别的。P1(1,2,3,4,5,6,7) P1中的3,4对应输入符号a或b,将再分割:P2(1,2,3,4,5,6,7) P2中的5,6,7可有输入符号a或b,分割为:,第三章 词法分析,1,6,4,3,2,5,7,a,a,a,a,a,a,a,b,b,b,b,b,b,b,P3(1,2,3,4,5,6,7) 1,2,6,7不能再分割,也即等价的。,第三章 词法分析,DFA的最小化算法,DFA M =(K,f, k0, kt),最小状态DFA M 1.构造状态的一初始划分: 终态kt 和非终态K- kt两组(group)

30、2.对施用过程PP 构造新划分new 3. 如new =,则令 final= 并继续步骤4,否则:=new重复2 . 4.为final中的每一组选一代表,这些代表构成M的状态。若k是一代表且f(k,a)=t,令r是t组的代表,则M中有一转换f(k,a)=r,第三章 词法分析,M 的开始状态是含有S0的那组的代表 M 的终态是含有F的那组的代表 5.去掉M中的死状态.,第三章 词法分析,过程PP : Construction of new,For each group G of dobegin 1.Partiton G into subgroups such that two states s

31、and t of G are in the same subgroups if and only if for all input symbols a, states s and t have transitions on a to states in the same group of ;/*at worst, a state will be in a subgroup by itself*/ 2.replace G in new by the set of all subgroups formedend,第三章 词法分析,3.3.4, 3.3.5 正规文法,正规式与有限自动机的等价性,第三

32、章 词法分析,1. 正规文法和正规式的等价性 一个正规语言可以由正规文法定义,也可以用正规式定义。 对于任意一个正规文法,存在一个定义同一语言的正规式。对每一个正规式,存在一个生成同一语言的正规文法。 即正规式正规文法,第三章 词法分析, 正规式正规文法: 将上的一个正规式r转换为一个正规文法G=(VN,VT,P,S)的规则: 令VT=, 对正规式r,选择一个非终结符S生成Sr,S为G的开始符号。不断拆分r直到符合正规文法要求的规则形式:,第三章 词法分析, 若x,y都是正规式,对形如Axy的产生式,写成AxB,By。其中B VN 对形如Ax*y的产生式,重写为:Ax A Ay B为新的非终结

33、符,B VN 对形如Ax|y的产生式,重写为:AxAy 不断利用上述规则进行变换即可。,第三章 词法分析,例:将Ra(a|d)*变换成正规文法。令S是文法开始符号。,第三章 词法分析,例:将Ra(a|d)*变换成正规文法。令S是文法开始符号。,解:,S a(a|d)*,SaA A(a|d)*,A(a|d) A A ,第三章 词法分析,最后得到:,SaA AaA AdA A ,第三章 词法分析, 正规文法正规式:将一个正规文法转换为正规式的规则: 转换规则: AxB,By 正规式为: A=xy AxA|y 正规式为: A=x*y Ax,Ay 正规式为: A=x|y 不断收缩产生式规则,直到剩下一

34、个开始符号定义的正规式,例:文法GS:,S aA S a A aA A dA A a A d,转换为正规式,第三章 词法分析,S aA S a A aA A dA A a A d,SaA|a,AaA|dA,Aa|d,A(aA|dA)|(a|d) A(a|d)A|(a|d) A(a|d)*(a|d),根据上述规则3 Ax,Ay 推出A=x|y,将它化为正规文法 变成A (a|d)A|(a|d),再根据上述 规则2转换 xy (a|d),将A代入SaA|a得到如下:,第三章 词法分析,Sa( (a|d)*(a|d) |a=a(a|d)+|a=a(a|d)+|)= a(a|d)*,第三章 词法分析,

35、2. 正规式和有穷自动机的等价性,正规式和有穷自动机的等价性由以下两点说明 :对于上的NFA M,可以构造一个上的正规式R,使得L(R)=L(M)。对于上的每个正规式R,可以构造一个上的NFA M,使得L(M)=L(R)。,1、在NFA M上构造正规式R。即从L(M) L(R) 方法:在每一条弧上用一个正规式作标记。 规则如下:,第三章 词法分析,a.,1,3,R1R2,b.,2,1,R1+R2,或,c.,3,2,1,R1,R2,R3,3,1,R1R2*R3,给定有穷自动机,判断它识别的语言,第三章 词法分析,例1: L(M)如下图: 求正规式R,使L(R)=L(M). 解:,第三章 词法分析

36、,例1: L(M)如下图: 求正规式R,使L(R)=L(M). 解:,a,b,y,a|b,a|b,(a|b)(a|b)*,因此: L(R)= (a+b)(a+b)*,第三章 词法分析,例2:M状态图如下: 求正规式R,是L(R)=L(M).,第三章 词法分析,解:加x,y结点。,a,b,0,3,4,1,2,a,a,b,b,a,b,a,b,x,第三章 词法分析,0,4,2,aa,bb,a,b,a,b,x,a,b,a,b,0,aa(a+b)*,bb(a+b)*,x,第三章 词法分析,y,(a+b)*(aa+bb)(a+b)*,x,所以 L(R) =(a+b)*(aa+bb)(a+b)*,第三章 词

37、法分析,2、L(R) NFA,从正规式R构造NFA,规则如下: 正规式,构造NFA为:或: 对应正规式,构造NFA为: 对应正规式a,构造NFA为: s,t是正规式,相应NFA为N(s),N(t),则正规式R=s|t,构造NFA(R) 为:,x,y,第三章 词法分析, s,t是正规式,相应NFA为N(s),N(t),则正规式R=st,构造NFA(R) 为:,x,y,N(t),N(s), s,t是正规式,相应NFA为N(s),N(t),则正规式R=s*,构造NFA(R) 为:,x,y,N(s),第三章 词法分析,例1:L(R) =(a+b)*abb,构造NFA使L(N)=L(R) 解:,第三章

38、词法分析,例1:L(R) =(a+b)*abb,构造NFA使L(N)=L(R) 解:,第三章 词法分析,a,b,a,b,b,例4: L(R) =(a+b)*(aa+bb)(a+b)* 构造L(N)使与L(R) 等价。,第三章 词法分析,x,y,(a+b)*(aa+bb)(a+b)*,第三章 词法分析,3.4 词法分析器的自动产生我们用正规式描述单词符号,并研究如何从正规式产生识别这些单词符号的词法分析程序。首先介绍一个描述词法分析器的语言LEX,讨论LEX的实现,从而,用它来描述和自动产生所需的各种词法分析器。3。4。1语言LEX的一般描述一个LEX源程序主要包括两部分。一部分是正规定义式,另

39、一部分是识别规则,第三章 词法分析,3。4。2超前搜索为超前搜索,我们引进一个正规式运算符/,用它来指出一个单词符号的截取点。于是关于“DO”的识别规则可以写为:DO/(letter|digit)*=(letter|digit)*,动作这意味着要求词法分析器L向前扫描到逗号处,识别除具有下列词形的输入子串:DO/(letter|digit)*=(letter|digit)*在寻找到这种匹配后,就按识别规则中斜线所指处将输入串截断,取其前一部分字串作为词法分析器的输出,而将后一部分归还输入串。 3。4。3 LEX的实现请读书P61.,第三章 词法分析,例题与习题解答,例3。1写能被5整除的十进制

40、整数的文法及正则表达式。 解:能被5整除的文法:GZ: Z(+|- )A(0|5)A0|1|2|3|4|5|6|7|8|9|AA如果要求:除零以外不以0开头,责文法为:GZ: Z(+|- ) A (0|5)AAB|CB0|C|BBC 0|1|2|3|4|5|6|7|8|9 正则表达式:GZ: Z= (+| - )A*(0|5)A(0,1,2,3,4,5,6,7,8,9),第三章 词法分析,例3。2 写一个文法,使其语言是奇数集,且每个奇数不以0开头。解:文法G(N): NAB|B AAC|D B1|3|5|7|9 DB|2|4|6|8 C0|D,第三章 词法分析,例3。3写出能被3整除十进制整

41、数的文法和正则表达式: 解: 能被3整除的文法:G=( 0,1,2,3,4,5,6,7,8,9,S, A, B, S, P,) 其中P为: S - (0|3|6|9)S| S - (1|4|7)A|(2|5|8)B A - (0|3|6|9)A|(1|4|7)B|(2|5|8)S B - (0|3|6|9)B|(2|5|8)A|(1|4|7)S 整则表达式:Z= a*| (bc)*|(cb)*|(a|cibi)*|(ciabi)*(i= 1)a(0,3,6,9)b(1,4,7)c(2,5,8),第三章 词法分析,例3。4:已知有限自动机如图,(1)以上状态转换图表示的语言有什么特征? (2)写

42、出其正规式与正规文法. (3)构造识别该语言的有限自动机DFA.,第三章 词法分析,解: (1) L=W |W 0,1,并且W至少有两个连续的1 (2) 正则式为(0|1)*11(0|1)*正则文法G(Z)为:Z0Z|1Z|1AA 1B|1B 0B|1B|0|1 (3)将图中有限自动机确定化:首先从处态A出发:,第三章 词法分析,I I0 I1 (1)A (1)A (2) A,B (2)A,B (1)A (3)A,B,C (3)A,B,C (4)A,C (3)A,B,C (4)A,C (4)A,C (3)A,B,C 其相应的DFA如下图:,第三章 词法分析,将这个DFA最小化:首先分终态和非终

43、态两个集 K1=1,2 和 K2=3,4由于状态1输入1到达状态K1集,而状态2输入1到达K2集故将k1分为 K11=1, K12=2由于状态3,和 4 输入1,或0 都到达k2集所以状态3,4等价。则可以分割成三个子集:1,2,3,4,第三章 词法分析,所以将DFA最小化的状态图如下:,第三章 词法分析,例3.5请构造与正则式R=(a*b)*ba(a|b)* 等价的状态最少的DFA(确定有限自动机)解:(1)首先构造转换系统图:(2)由系统转换图构造DFA(NFA确定化)设初态为S, A, B, G,F,第三章 词法分析,NFA确定化为DFA的过程:I Ia Ib (1)S,A,B,G,F

44、(2)G,F (3)A,B,C,G,F (2)G,F (2)G,F (4)A,B,G,F (3) A,B,C,G,F (5)D,F,G,E,Z (3)A,B,C,G,F (4)A,B,G,F (2)G,F (3)A,B,C,G,F (5)D,F,G,E,Z (6)G,F,E,Z (7)A,B,E,Z,G,F (6)G,F,E,Z (6)G,F,E,Z (7)A,B,E,Z,G,F (7)A,B,E,Z,G,F (6)G,F,E,Z (8)A,B,C,E,Z,G,F (8)A,B,C,E,Z,G,F (5)D,F,G,E,Z (8)A,B,C,E,Z,G,FDFA 这状态图如下:,第三章 词法分

45、析,确定有限自动机图如下:,第三章 词法分析,(3)将DFA最小化:先将终态和非终态分成两个集: K1=1,2,3,4 , K2=5,6,7,8 对于K1中的3态输入a则进入K2集,而1,2,4态输入a仍然在K1中,故K1可一分为二K11=1,2,4和K12=3; 考察K11对于1,4态输入b到达3态而2态输入b到达4态。故K11可一分为二K111=1,4; K112=2最后考察K2输入a或b都到达K2集。则DFA化简为1,4,2,3,5,6,7,8四个子集。其状态图如下:,第三章 词法分析,第四章 语法分析自上而下分析(1),4.1 语法分析器功能下图表明了语法分析器在编译程序中的地位。,词法分析器,语法分析器,单词符号,取下一个单词符号,编译后续,语法分析树,符号表,

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

当前位置:首页 > 企业管理 > 管理学资料

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


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

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

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