92
1 指指指指 指指指指 : : 指指指 指指指 指指 指指指指

指导教师 : 杨建国

  • Upload
    tovah

  • View
    52

  • Download
    4

Embed Size (px)

DESCRIPTION

编 译 原 理. 指导教师 : 杨建国. 二零一零年三月. 第四章 词法分析. 第一节 词法分析程序的设计. 第二节 单词的描述工具. 第三节 有穷自动机. 第四节 正规式和有穷自动机的等价性. 第五节 正规文法和有穷自动机的等价性. 第六节 词法分析程序的自动构造工具. 第七节 典型例题及解答. 知识结构. ⑤. ③. ②. ④. ①. ⑥. 知识结构. 正规文法. 有穷自动机( NFA DFA). 寻找特殊方法和工具. 正规式. 描述. 识别. { 正规集 }. 词法分析. - PowerPoint PPT Presentation

Citation preview

Page 1: 指导教师 : 杨建国

1

盛威网:专业的计算机学习网站

指导教师指导教师 :: 杨建国杨建国

二零一零年三月

Page 2: 指导教师 : 杨建国

2

盛威网:专业的计算机学习网站

第四章 词法分析

第一节 词法分析程序的设计第二节 单词的描述工具第三节 有穷自动机第四节 正规式和有穷自动机的等价性

第五节 正规文法和有穷自动机的等价性

第六节 词法分析程序的自动构造工具第七节 典型例题及解答

Page 3: 指导教师 : 杨建国

3

盛威网:专业的计算机学习网站

知识结

Page 4: 指导教师 : 杨建国

4

盛威网:专业的计算机学习网站

词法分析 自动构造工具 LEX

{ 正规集 }

正规式

有穷自动机( NFA DFA)正规文法

知识结构

④描述 识别

寻找特殊方法和工

Page 5: 指导教师 : 杨建国

5

盛威网:专业的计算机学习网站

第四章 词法分析

§4.1  词法分析程序的设计

源程序 词法分析程序 语法分析程序Token

get token….

主要任务:读源程序,产生单词符号其他任务:滤掉空格,跳过注释、换行符追踪换行标志,复制出错源程序,宏展开,……

Page 6: 指导教师 : 杨建国

6

盛威网:专业的计算机学习网站

一 . 词法分析程序与语法分析程序的接口方式

词法分析工作可以是独立的一遍,把字符流的源程序

 变为单词序列,输出在一个中间文件上,这个文件作

 为语法分析程序的输入而继续编译过程

Page 7: 指导教师 : 杨建国

7

盛威网:专业的计算机学习网站

更通常情况,常将词法分析程序设计成一个子程序,

 每当语法分析程序需要一个单词时,则调用该子程序。

 词法分析程序每得到一次调用,便从源程序文件中读

 入一些字符,直到识别出一个单词,或说直到下一单

 词的第一个字符为止

Page 8: 指导教师 : 杨建国

8

盛威网:专业的计算机学习网站

二 . 词法分析程序的输出

1. 单词符号一般可分为下列五种:基本字(关键字): begin 、 end 、 if 、 while 、 var

标识符:常量名、变量名、过程名常数(量): 25 、 3.1415 、 true 、“ ABC”

运算符:+、-、 * 、< =

界符:逗点、分号、括号

Page 9: 指导教师 : 杨建国

9

盛威网:专业的计算机学习网站

2. 输出表示:(单词种别,单词自身的值)单词种别:语法分析需要的信息单词自身的值:编译其他阶段需要的信息例如: const i=25,yes=1;

Page 10: 指导教师 : 杨建国

10

盛威网:专业的计算机学习网站

(标识符,指向该标识符所在符号表中位置的指针)const i=25,yes=1; 对单词 i 和 yes 的表示为:(标识符,指向 i 的表项的指针)(标识符,指向 yes 的表项的指针)单词的种别可以用整数编码表示,假如标识符编码 为 1

 ,常数为 2 ,关键字为 3 ,运算符为 4 ,界符为 5

Page 11: 指导教师 : 杨建国

11

盛威网:专业的计算机学习网站

if i=5 then x:=y

关键字  if    (3, ‘ if’)

标识符  i   ( 1 ,指向 i 的符号表入口)等号 =   ( 4, ‘= ’ )常数  5    ( 2, ‘5’ )关键字  then    ( 3, ‘then ’ )标识符  x    ( 1, 指向 x 的符号表入口)赋值号 :=    ( 4, ‘ : = ’ )标识符 y    ( 1, 指向 y 的符号表入口 )分号 ;    ( 5, ‘; ’ )

Page 12: 指导教师 : 杨建国

12

盛威网:专业的计算机学习网站

三 . 将词法分析工作分离的考虑

1. 使整个编译程序的结构更简洁、清晰和条理化:

2. 编译程序的效率会改进:

3. 增强编译程序的可移植性:

Page 13: 指导教师 : 杨建国

13

盛威网:专业的计算机学习网站

§4.2  单词的描述工具

一 . 正规文法什么是正规文法?正规文法所描述的是 VT 上的正规集

Page 14: 指导教师 : 杨建国

14

盛威网:专业的计算机学习网站

程序设计语言中的几类单词可用下述规则描述:< 标识符 >    l|l< 字母数字 >

< 字母数字 >    l|d|l< 字母数字 >|d< 字母数字 >

< 无符号整数 >    d|d< 无符号整数 >

< 运算符 >    +|-|*|/|=|<< 等号 |>< 等号 >……

< 等号 >    =

< 界符 >    ,|;|(|)| ……

  其中 l 表示 a~z 中的任何一个英文字母, d 表示 0~9中

的任何一个数字

Page 15: 指导教师 : 杨建国

15

盛威网:专业的计算机学习网站

关键字也是一种单词,一般关键字都是由字母构成,它 的描述也极容易,实际上,关键字集合是标识符集合的 子集最复杂的一类单词要属无符号实数,如 25.55e+5 和 2.1 , 它们可以由例 4.1 的规则描述

Page 16: 指导教师 : 杨建国

16

盛威网:专业的计算机学习网站

例 4.1 :< 无符号数 >    d<余留无符号数 >|.<十进小数 >e< 指数部分 >

<余留无符号数 >    d<余留无符号数 >|.<十进小数 >e<指数

部分 >|

<十进小数 >    d<余留十进小数 >

<余留十进小数 >    e< 指数部分 >| d<余留十进小数 > |

< 指数部分 >    d<余留整指数 > |s< 整指数 >

< 整指数 >    d<余留整指数 >

<余留整指数 >    d<余留整指数 > |

  其中, s 表示正或负号 (+,-)

Page 17: 指导教师 : 杨建国

17

盛威网:专业的计算机学习网站

二 . 正规式(正则表达式)表示正规集的工具描述单词符号的工具

Page 18: 指导教师 : 杨建国

18

盛威网:专业的计算机学习网站

正规式和它所表示的正规集的递归定义:设字母表为,辅助字母表 `={ ,,,,,, }

( 1 )和都是上的正规式,它们所表示的正规集分别为

   {} 和 { }

( 2 )任何 a , a 是上的一个正规式,它所表示的正规集

  为 {a}

Page 19: 指导教师 : 杨建国

19

盛威网:专业的计算机学习网站

( 3 )假定 e1 和 e2 都是上的正规式,它们所表示的正规集分别

  为 L(e1) 和 L(e2) ,那么, (e1), e1 e2, e1e2, e1 也都是正规

  式 , 它们所表示的正规集分别为 L(e1), L(e1)L(e2),

   L(e1)L(e2) 和 (L(e1))

仅由有限次使用上述三步骤而定义的表达式才是上的正规

 式,仅由这些正规式所表示的字集才是上的正规集

Page 20: 指导教师 : 杨建国

20

盛威网:专业的计算机学习网站

其中的“”读为“或”(也有使用“ +”代替 “” 的

 );“ ”读为“连接”;“”读为“闭包”(即,任

 意有限次的自重复连接)。在不致混淆时,括号可省去,

 但规定算符的优先顺序为“”、“”、“”、“ ”、

 “” 。连接符“ ”一般可省略不写。“”、“ ”和

 “” 都是左结合的

Page 21: 指导教师 : 杨建国

21

盛威网:专业的计算机学习网站

例 4.2 令 ={a , b}, 上的正规式和相应的正规集的例子有:

–正规式 正规集–a {a}

–ab {a,b}

–ab {ab}

–(ab)(ab) {aa,ab,ba,bb}

–a { ,a,a, …… 任意个 a 的串 }

–(ab) { ,a,b,aa,ab …… 所有由 a 和 b组成的串 }

–(ab)(aabb)(ab)   { 上所有含有两个相继的 a 或两个           相继的 b组成的串 }

Page 22: 指导教师 : 杨建国

22

盛威网:专业的计算机学习网站

例 4.3   ={d ,, e , + , -}, 则上的正规式

  d(dd )(e(+- )dd ) 其中 d 为 0~9 的数字

 表示的是:

无符号数的集合

Page 23: 指导教师 : 杨建国

23

盛威网:专业的计算机学习网站

例题:词法分析器的输入是什么?( 10 分)例题:令 ={a,b}, 则上所有以 a 开头,后跟 0 个或许多个的  ab 的字的全体对应的正规式是什么?( 5 分)例题:请写出表示标识符的正规式 e1=(l|_)(l|d|_)* 所对应的 正规集。( 5 分)例题:有一台饮料自动售货机,接收 1元或 2元硬币,出售 3

 元钱一瓶的饮料。顾客每次向机器中投放等于或大于 3元的 硬币,便可得到一瓶饮料(注意:多投不找钱)。写出对 应饮料自动售货机售货过程的正规式。画出与该正规式的 最小 DFA 。( 10 分)

Page 24: 指导教师 : 杨建国

24

盛威网:专业的计算机学习网站

答案:源程序(的字符流)答案: a(ab)*

答案: {l,_,ll,ld,l_,_l,_ _,-d,……} 或者{以 1 或 _打头 l,_,d

组成    的字符串}答案:设 a=1,b=2, 则 a (b | a( a| b) ) | b (a |b)

或者: 21|22|12|111|112

Page 25: 指导教师 : 杨建国

25

盛威网:专业的计算机学习网站

若两个正规式 e1 和 e2 所表示的正规集相同 , 则说 e1 和 e2 等价 ,写

 作 e1=e2

例如: e1= (ab) , e2 = ba

又如: e1= b(ab) , e2 =(ba)b   e1= (ab) , e2 =(ab)

Page 26: 指导教师 : 杨建国

26

盛威网:专业的计算机学习网站

设 r,s,t 为正规式,正规式服从的代数规律有:rs=sr “ 或”服从交换律r(st)=(rs)t “ 或”的可结合 律(rs)t=r(st) “连接”的可结合 律r(st)=rsrt

  (st)r=srtr分配律r=r

  r=r 是“连接”的恒等元素(零一律)rr=r

  r=rrr… “ 或”的抽取律

Page 27: 指导教师 : 杨建国

27

盛威网:专业的计算机学习网站

三 . 正规文法和正规式的等价性

1. 将上的一个正规式 r转换成文法 G=(VN,VT,P,S) :

 令 VT =∑,确定产生式和 VN 的元素用如下办法:

Page 28: 指导教师 : 杨建国

28

盛威网:专业的计算机学习网站

选择一个非终结符 S 生成产生式 S    r ,并将 S定为G 的

 识别符号。 若 x 和 y 都是正规式 , BVN ,则:

(R1) 对形如 A    xy 的正规产生式,重写为:

A    xB , B    y    

(R2) 对形如 A    x*y 的正规产生式,重写为:

  A    xB , A    y , B    xB , B    y  

(R3) 对形如 A    xy 的正规产生式,重写为 :

  A    x , A    y

不断应用 R做变换,直到每个产生式右端只含一个 VN

A→xB,A →yA →xA,B →y

A →xA,A →y

Page 29: 指导教师 : 杨建国

29

盛威网:专业的计算机学习网站

例 4.4  将 r=a(a|d)*转换成相应的正规文法

令 S 是文法的开始符号,形成 S    a(a|d)* :

R1   S    aA A    (a|d)*

R2   S    aA

   A    (a|d)B   A   

   B    (a|d)B   B   

R3   S    aA A   

   A    aB A    dB

  B    aB B    dB

   B   

Page 30: 指导教师 : 杨建国

30

盛威网:专业的计算机学习网站

2. 将正规文法转换成正规式:

  基本上是上述过程的逆过程,最后只剩下一个开始符

号定义的正规式,其转换规则如表 4.1 所示:

Page 31: 指导教师 : 杨建国

31

盛威网:专业的计算机学习网站

例 4.5   G[s]:

  S    aA   S    a   A    aA

  A    dA   A    a    A    d

①S    aA|a

  A    aA|a|dA|d   (a|d)A|(a|d)   

     (a|d)*(a|d)

②s=a(a|d)*(a|d)|a=a((a|d)*(a|d)|ε)=a((a|d)*|ε)

③r=a(a|d)*

Page 32: 指导教师 : 杨建国

32

盛威网:专业的计算机学习网站

§4.3 有穷自动机

一 .确定的有穷自动机( DFA)(有限自动机)DFA :能准确地识别正规集一个确定的 DFA : M= ( K , Σ , f , S , Z )K是一个有穷集,它的每个元素称为一个状态Σ是一个有穷字母表,它的每个元素称为一个输入符

 号,所以也称Σ为输入符号字母表

Page 33: 指导教师 : 杨建国

33

盛威网:专业的计算机学习网站

f 是转换函数,是在 K×Σ→K 上的映射,即,如

  f ( ki , a ) =kj ,( ki K∈ , kj K∈ )就意味着,当前状

 态为 ki ,输入符为 a 时,将转换为下一个状态 kj ,我们

 把 kj称作 ki 的一个后继状态

S∈K是唯一的一个初态Z K是一个终态集,终态也称可接受状态或结束状态

Page 34: 指导教师 : 杨建国

34

盛威网:专业的计算机学习网站

例 4.6 : DFA M= ( {S , U,V , Q} , {a , b} , f , S, {Q} )

 其中 f定义为:f ( S , a ) =U   f ( V , a ) =U

f ( S , b ) =V f ( v , b ) =Q

f ( U , a ) =Q f ( Q , a ) =Q

f ( U , b ) =V f ( Q , b ) =Q

Page 35: 指导教师 : 杨建国

35

盛威网:专业的计算机学习网站

一个 DFA 可以表示成一个状态图(状态转换图)假定 DFA   M含有 m 个状态, n 个输入符号,那么这个

 状态图含有 m 个结点,每个结点最 多有 n 个弧射出,整

 个图含有唯一一个初态结点 (   、- ) 和若干个终态结

 点 (双圈、 +) ,若 f(ki,a)=kj ,则从状态结点 ki 到状态结点

  kj画标记为 a 的弧

Page 36: 指导教师 : 杨建国

36

盛威网:专业的计算机学习网站

图 4.1  状态图表示

例 4.6 中的 DFA 的状态图表示如图 4.1 所示:

Page 37: 指导教师 : 杨建国

37

盛威网:专业的计算机学习网站

一个 DFA 可以表示成一个矩阵表示,该矩阵的行表示状

 态,列表示输入符号,矩阵元素表示相应状态和输入符

 号将转换成的新状态,即 k 行 a 列为 f(k,a) 的值。用  

 标明初态;否则第一行即是初态,相应终态行在表的右

 端标以 1 ,非终态标以 0

Page 38: 指导教师 : 杨建国

38

盛威网:专业的计算机学习网站

图 4.2  矩阵表示

例 4.5中的 DFA的矩阵表示如图 4.2 所示:

Page 39: 指导教师 : 杨建国

39

盛威网:专业的计算机学习网站

若 t ∑* , f(S , t)=P ,其中 S 为 M 的开始状态, P Z ,

  Z 为终态集,则称 t 为 DFA M 所接受(识别)设 Q K∈ ,函数 f(Q,ε)=Q,一个输入符号串 t( t1tx, t1

 ∈∑ ,tx ∑*∈ ),在 DFA   M 上运行的定义为:

  f(Q,t1tx)=f(f(Q,t1),tx)

Page 40: 指导教师 : 杨建国

40

盛威网:专业的计算机学习网站

例如,证明 t=baab被例 4.6 的 DFA 所接受f ( S , baab ) =f ( f ( S , b ), aab ) =f ( V , aab ) =f ( f

 ( V , a ), ab ) =f ( U , ab ) =f ( f ( U , a ), b ) =f (

  Q , b ) =Q

Q 属于终态得证

Page 41: 指导教师 : 杨建国

41

盛威网:专业的计算机学习网站

DFA M 所能接受的符号串的全体记为 L(M)

结论:上一个符号串集 V 是正规的,当且仅当存

    在一个上的确定有穷自动机 M ,使得 V=L(M)

DFA 的确定性表现在转换函数 f:K×∑→K 是一个单值

 函数,也就是说 , 对任何状态 k K∈ 和输入符号 a ∑∈,

  f(k,a)唯一地确定了下一个状态

Page 42: 指导教师 : 杨建国

42

盛威网:专业的计算机学习网站

二 .不确定的有穷自动机 NFA一个 NFA : M= ( K ,, f , S , Z )K 是一个有穷集,它的每个元素称为一个状态 是一个有穷字母表,它的每个元素称为一个输入符号f 是一个从 K * 到 K 的子集的映像,即: K* * →2 K

 (多值映射)SK 是一个非空初态集ZK 是一个终态集

提示: NFA 与 DFA 的第三个区别是,前者可以空移: t(q, ε)={某些状态的集合 }

Page 43: 指导教师 : 杨建国

43

盛威网:专业的计算机学习网站

例 4.7 :一个 NFA M= ( {0 , 1 , 2 , 3 , 4} , {a, b} , f ,

  {0} , {2,4} )其中f(0,a)={0,3} f(2,b)={2}

f(0,b)={0,1} f(3,a)={4}

f(1,b)={2} f(4,a)={4}

f(2,a)={2} f(4,b)={4}

它的状态图表示如图 4.3 所示:

Page 44: 指导教师 : 杨建国

44

盛威网:专业的计算机学习网站

Page 45: 指导教师 : 杨建国

45

盛威网:专业的计算机学习网站

一个 NFA 也可以用一个矩阵表示 ...

∑* 上的符号串 t 在 NFA N 上运行 ...

∑* 上的符号串 t被 NFA N 识别(读出、接 受) ...

DFA 是 NFA 的特例对每个 NFA   N存在一个 DFA  M , 使得 L(M)=L(N)

对于任何两个有穷自动机 M 和 N ,如果 L(M)=L(N) ,则称

  M 与 N 是等价的

Page 46: 指导教师 : 杨建国

46

盛威网:专业的计算机学习网站

三 .NFA转换为等价的 DFA定理:设 L 为一个由不确定的有穷自动机接受的集合,则

 存在一个接受 L 的确定的有穷自动机将 NFA转换成接受同样语言的 DFA ,这种算法称为子集法

Page 47: 指导教师 : 杨建国

47

盛威网:专业的计算机学习网站

定义对状态集合 I 的两个运算:1.I 的 -闭包,表示为 -closure(I) ,是 I 中的任何状态 S经任

 意条弧而能到达的状态的集合。 I 的任何状态 S 都属于

  -closure(I)

2.I 的 a弧转换,表示为 move(I,a) = J ,其中 J 是所有那些可

 从 I 的某一状态经过一条 a弧而到达的状态的全体

Page 48: 指导教师 : 杨建国

48

盛威网:专业的计算机学习网站

使用图 4.4 的 NFA  N的状态集合来理解上述两个运算:

-closure({3,8})=

图 4.4   NFA   N

{0,1,2,4,7}=I1-closure(0)=

move(I1,a)= {3,8} move(I1,b) = {5}

-closure({5})=

{1,2,3,4,6,7,8} = I

2{1,2,4,5,6,7} = I3

Page 49: 指导教师 : 杨建国

49

盛威网:专业的计算机学习网站

对于一个 NFA   N= ( K ,, f , K0 , Kt )来说,若I 是 K

 的一个子集,设 I = {s1,s2,…,sj} , a 是∑中的一个元素,则

  move(I,a)=f(s1,a) f(s∪ 2,a) ∪… f(s∪ j,a)

Page 50: 指导教师 : 杨建国

50

盛威网:专业的计算机学习网站

假设 NFA N=(K, ,f,K0,Kt)按如下办法构造一个 DFA

  M=(S, ,d,S0,St) ,使得 L(M)=L(N) :

1. M 的状态集 S 由 K 的一些子集组成。用 [S1 S2... Sj] 表示S

 的元素,其中 S1, S2,,... Sj 是 K 的状态。并且约定,状态 S

1,

  S2,,... Sj 是按某种规则排列的,即对于子集 {S1, S2}={ S2,

  S1,}来说, S 的状态就是 [S1 S2]

2.M 和 N 的输入字母表是相同的,即是

3.转换函数是这样定义的:

  D([S1 S2,... Sj],a)= [R1R2... Ri] 其中

  {R1,R2,... , Ri} = -closure(move({S1, S2,,... Sj},a))

Page 51: 指导教师 : 杨建国

51

盛威网:专业的计算机学习网站

4.S0=-closure(K0) 为 M 的开始状态

5.St={[Sj Sk... Se] ,其中 [Sj Sk... Se]S且 {Sj , Sk,,... Se} ∩KtØ}

Page 52: 指导教师 : 杨建国

52

盛威网:专业的计算机学习网站

构造 NFA N 的状态 K 的子集的算法,见图 4.5 :假定所构造的子集族为 C ,即 C= (T1, T2,,... Ti), 其中 T1,

  T2,,... Ti 为状态 K 的子集

Page 53: 指导教师 : 杨建国

53

盛威网:专业的计算机学习网站

例 4.8 应用图 4.5的算法对图 4.4 的 NFA  N构造子集

步骤如下:

1.首先计算 -closure(0) :令 T0=-closure(0)={0,1,2,4,7} , T0未

 被标记,它现在是子集族 C 的唯一成员

2. 标记 T0 :令 T1=-closure(move(T0,a))={1,2,3,4,6,7,8} ,将 T1

 加入 C 中, T1未被标记。令 T2=-closure(move(T0,b))  

  ={1,2,4,5,6,7} ,将 T2加入 C 中, T2未被标记

3. 标记 T1 : -closure(move(T1,a))={1,2,3,4,6,7,8} ,即 T1 , T1

 在 C 中。 T3=-closure(move(T1,b))={1,2,4,5,6,7,9} ,将 T3加

 入 C 中, T3未被标记

Page 54: 指导教师 : 杨建国

54

盛威网:专业的计算机学习网站

4. 标记 T2 : -closure(move(T2,a))={1,2,3,4,6,7,8} ,即 T1 , T

1已

 在 C 中。 -closure(move(T2,b))={1,2,4,5,6,7} ,即 T2 , T2

已在

  C 中

5. 标记 T3 : -closure(move(T3,a))={1,2,3,4,6,7,8} ,即 T1 。 -

  closure(move(T3,b))={1,2,4,5,6,7,10},令其为 T4 ,在入 C 中,

  T4未被标记

6. 标记 T4 : -closure(move(T4,a))={1,2,3,4,6,7,8} ,即 T1 。

  -closure(move(T4,b))={1,2,4,5,6,7} ,即 T2

Page 55: 指导教师 : 杨建国

55

盛威网:专业的计算机学习网站

a b

0 01247T0=01247 38 5

38 12346785 124567

T1=1234678 38 59

59 1245679

T2=124567 38 5T3=1245679 38 5 10

5 10 12456710T4=12456710 38 5

Page 56: 指导教师 : 杨建国

56

盛威网:专业的计算机学习网站

至此,算法终止共构造了 5 个子集:T0={0,1,2,4,7}

T1={1,2,3,4,6,7,8}

T2={1,2,4,5,6,7}

T3={1,2,4,5,6,7,9}

T4={1,2,4,5,6,7,10}

那么图 4.4 的 NFA   N 构造的 DFA   M 为:

1.S={ [T0], [T1], [T2], [T3], [T4] }

2. ∑={a,b}

Page 57: 指导教师 : 杨建国

57

盛威网:专业的计算机学习网站

3. D([T0],a)=[T1] D([T3],a)=[T1]

D([T0],b)=[T2] D([T3],b)=[T4]

D([T1],a)=[T1] D([T4],a)=[T1]

D([T1],b)=[T3] D([T4],b)=[T2]

D([T2],a)=[T1] D([T2],b)=[T2]

4.S0=[T0]

5.St=[T4]

为便于书写,将 [T0] 、 [T1] 、 [T2] 、 [T3] 、 [T4]重新命名为

  A 、 B 、 C 、 D 、 E 或用 0 、 1 、 2 、 3 、 4 分别表示,若采用后

 者,该 DFA   M 的状态转换图如图 4.6 所示:

Page 58: 指导教师 : 杨建国

58

盛威网:专业的计算机学习网站

图 4.6   DFA  M

Page 59: 指导教师 : 杨建国

59

盛威网:专业的计算机学习网站

四 . DFA的化简最小状态 DFA :没有多余状态 (死状态 )没有两个状态是互相等价(不可区别)一个有穷自动机可以通过消除无用状态和合并等价状态

 而转换成一个最小的与之等价的有穷自动机有穷自动机的无用状态:从该自动机的开始状态出发,

 任何输入串也不能到达的那个状态或者从这个状态没有

 通路到达终态

Page 60: 指导教师 : 杨建国

60

盛威网:专业的计算机学习网站

图 4.7  消除多余状态

例如图 4.7 的有穷自动机 M :s4 是不可到达, S6 和 S8不可到达

Page 61: 指导教师 : 杨建国

61

盛威网:专业的计算机学习网站

在有穷自动机中,两个状态 s 和 t 等价的条件是:一致性条件——必须同是为可接受状态或不可接受状态蔓延性条件——对于所有输入符号,必须转换到等价的

 状态里

分割法:把一个 DFA (不含多余状态)的状态分成一些

 不相交的子集,使得任何不同的两子集的状态都是可区

 别的,而同一子集中的任何两个状态都是等价的

Page 62: 指导教师 : 杨建国

62

盛威网:专业的计算机学习网站

DFA   M 最小化方法:先分成终态集合和非终态集合对每个集合中的符号分别用输出字母去查看它们到达状

态的集合是否在同一个集合中如果不在同一个集合,将它们划分在不同的集合中直到不能再划分为止

Page 63: 指导教师 : 杨建国

63

盛威网:专业的计算机学习网站

例 4.9  将图 4.8 中的 DFA   M 最小化P0=({1,2,3,4},{5,6,7}) a

P1=({1,2},{3,4},{5,6,7}) a

P2=({1,2},{3},{4},{5,6,7}) a

P3=({1,2},{3},{4},{5},{6,7}) b

  令 1代表 {1,2}消去 2 ,令 6代表 {6,7} ,消去 7 ,得到图 4.8(b)

的 DFA M` ,它是 4.8(a) 的 DFA M 的最小化

Page 64: 指导教师 : 杨建国

64

盛威网:专业的计算机学习网站

图 4.8   DFA   M 和 DFA  M`

Page 65: 指导教师 : 杨建国

65

盛威网:专业的计算机学习网站

§4.4  正规式和有穷自动机的等价性

对于∑上的一个 NFA M ,可以构造一个∑上的正规式

  R,使得 L(R)=L(M)

第一步,在 M 的状态转换图上加进两个结,一个为 x结

 点,一个为 y 结点。从 x 结点用 弧连接到 M 的所有初始

 结点 ,从 M 的所有终态结点 用弧连接到 y 结点。 形成

 一个与 M 等价的 M`, M`只有一个初态 x 和一个终态y 第二步,逐步消去M`中的所有结点,直 至只剩下 x和 y

 结点。在 消结过程中, 逐步用正规式来标记弧

Page 66: 指导教师 : 杨建国

66

盛威网:专业的计算机学习网站

其消结的规则如下:

最后 x和 y结点间的 弧上的标记则为所求的正规式 r

Page 67: 指导教师 : 杨建国

67

盛威网:专业的计算机学习网站

例 4.10 以例 4.7的 NFA M为例,M的状态图在图4.3,求

正规式 r,使 L(r)=L(M)

Page 68: 指导教师 : 杨建国

68

盛威网:专业的计算机学习网站

Page 69: 指导教师 : 杨建国

69

盛威网:专业的计算机学习网站

对于∑上的一个正规式 R ,可以构造一个∑上的 NFA

  M ,似的 L(M)=L(R)

语法制导方法: 按正规式的语法结构指 引构造过程,首先

 将正规式分解成一系列子表达式,然后使用下面规则为 r

 构造 NFA ,对 r 的各种语法结构的构造规则具 体描述如下:

1. ①对于正规式 Ø,所构造的 NFA 为:

Page 70: 指导教师 : 杨建国

70

盛威网:专业的计算机学习网站

Page 71: 指导教师 : 杨建国

71

盛威网:专业的计算机学习网站

Page 72: 指导教师 : 杨建国

72

盛威网:专业的计算机学习网站

Page 73: 指导教师 : 杨建国

73

盛威网:专业的计算机学习网站

例 4.11  为 r=(a|b)*abb构造 NFA  N,使得 L(N)=L(r)从左到右分解 r, 令 r1=a,第 1 个 a,则有  

 令 r2=b, 则有  

 令 r3=r1|r2, 则有

令 r4=r3* ,则有:

Page 74: 指导教师 : 杨建国

74

盛威网:专业的计算机学习网站

令 r5=a ,令 r6=b ,令 r7=b ,令 r8=r5r6 ,令 r9=r8r7 ,则有:令 r10=r4r9 ,

则最终得到的 NFA N :

Page 75: 指导教师 : 杨建国

75

盛威网:专业的计算机学习网站

图 4.10  从正规式 r 构造 NFA

  其实,分解 r 的方式 很多,用图 4.10(a)(b)(c)(d) 分别表明另一种分解方式和所构造的 NFA 。

Page 76: 指导教师 : 杨建国

76

盛威网:专业的计算机学习网站

思考:如果不用怎么分解 r=(a|b)*abb ?

0 1 2 33a b b

a

b

思考:如何把上面的 NFA 变成 DFA ?

a b

0 01 0

01 01 02

02 01 03

03 01 0

Page 77: 指导教师 : 杨建国

77

盛威网:专业的计算机学习网站

0 1 2 33a b b

a

ba

b a

Page 78: 指导教师 : 杨建国

78

盛威网:专业的计算机学习网站

§4.5 正规文法和有穷自动机的等价性

采用下面的规则可以从正规文法 G 直接构造一个有穷

 自动机 NFA   M;使得 L ( M )= L ( G ):M的字母表与 G的终结符集 相同为 G中的每个非终结符生成 M的一个状态, G的开始符 S

 是开始状态S

Page 79: 指导教师 : 杨建国

79

盛威网:专业的计算机学习网站

增加一个新状态Z,作为 NFA的终态对 G中的形如 A   tB的规则(其中 t为终结符或 , ℇ A和 B为

 非终结符的产生式),构造 M的一个转换函数 f(A,t)=B对 G中形如 A   t的产生式,构造M的一个转换函数

  f(A,t)=Z

Page 80: 指导教师 : 杨建国

80

盛威网:专业的计算机学习网站

例 4.12 :与文法 G[ S]等价的 NFA   M 如图 4.11

G[S]:

S    a A

S    bB

S    ε

A    aB

A    bA

B    aS

B    bA

B    ε

Page 81: 指导教师 : 杨建国

81

盛威网:专业的计算机学习网站

有穷自动机转换成等价的正规文法:对转换函数 f(A,t)=B,可写一产生式: A tB

对可接受状态 Z,增加一产生式: Z ε

有穷自动机的初态对应文法开始符有穷自动机的字母表为文法的终结符集

Page 82: 指导教师 : 杨建国

82

盛威网:专业的计算机学习网站

例 4.13:给出与图 4.12 的 NFA等价的正规文法 GG =({ A , B , C , D},{ a , b} , P , A ),其中 P 为:A    a B

C    ε

A    bD

D    aB

B    bC

D    bD

C    aA

D    ε

C    bD

Page 83: 指导教师 : 杨建国

83

盛威网:专业的计算机学习网站

§4.6 词法分析程序的自动构造工具

以 LEX 为例介绍如何从正规式产生识别该正规式所描述的

 单词的词法分析程序LEX 是一个广泛使用的工具, UNIX系统中使用 lex命令调

 用。它用于构造各种各样语言的词法分析程序

图 4.13LEX 编译系统的作用

Page 84: 指导教师 : 杨建国

84

盛威网:专业的计算机学习网站

图 4.14 使用 LEX 生成词法分析器

Page 85: 指导教师 : 杨建国

85

盛威网:专业的计算机学习网站

LEX 程序由三部分组成:说明部分:变量说明、常量说明、正规定义%%

转换规则: Pn {action   n}

%%

辅助过程:容纳的是 action 所需要的辅助过程

Page 86: 指导教师 : 杨建国

86

盛威网:专业的计算机学习网站

图 4.15给出一个识别 PL/O 单词的 LEX 程序片断: IDENT[a-zA-Z] [a-zA-Z0-9]*  NUMBER[0-9] [0-9]*  %(  #include 〈 stdio.h〉  #include "code.h“  #include "symbol.h“  #include "y.tab.h“  extern int level;  int cc=0;  %)  %%  "" { cc++;}  "\ t" { tablize(); } /*adjustcc to tab position*/  "\ n" { cc=0; line -copy(); } /*copy a line of input file*/  "<" { cc++; return LT;}  ">" { cc++; return GT;}  "=" { cc++; return EQ;}

Page 87: 指导教师 : 杨建国

87

盛威网:专业的计算机学习网站

  "#" { cc++; return NE;} "," { cc++; return colon; }  "." { cc++; return Period;}  "(" { cc++; return Lparen;}  ")" { cc++; return Rparen;} "<=" { cc++;cc++;return LE;} ">=" { cc++;cc++;return GE;} " =" { cc++; cc++;return ASGN;}∶ ";" { cc++; return Semicolon;} {NUMBER} {       intn;       cc += yyleng;       sscanf(yytext,"%d", &n);       yylval.number=n;       return NUMBER;      }

Page 88: 指导教师 : 杨建国

88

盛威网:专业的计算机学习网站

   {IDENT} {       Symbol *s;       cc += yyleng;       if((s=lookup(yytext))==0) /*new identifier*/        s=install(yytext,VARIABLE,level,0); /* install symbol*/       if (s→type==C)        yylval.number=s-〉 adr;       else /*it's a VARIABLE or PROC*/        yylval.sym=s;       return s-〉 type;      }  %%  yywrap( ) {  };

图 4.15 LEX 程序例子 -- 识别 PL/0 单词的 LEX 程序

Page 89: 指导教师 : 杨建国

89

盛威网:专业的计算机学习网站

§4.7 典型例题及解答

1. 构造正规式 1 ( 0| 1 ) *101相应的 DFA

Page 90: 指导教师 : 杨建国

90

盛威网:专业的计算机学习网站

2. 将图 4.18所示的 DFA最小化

Page 91: 指导教师 : 杨建国

91

盛威网:专业的计算机学习网站

【本章小结】

  词法分析程序是编译第一阶段的工作,它读入字符流的源程序,按照词法规则识别单词 ,交由语法分析程序接下去。

  本章讲述了词法分析程序设计原则,并介绍了正规式和有穷动机分别作为正规集描述和识别机制。在 此基础上给出了词法分析程序自动构造工具如 LEX 的原理。

  词法分析程序的设计技术可应用于其它领域,比如查询语言以及信息检索系统等,这种应用领域的程序设计特点是,通过字符串模式的匹配来引发动作,回想 LEX ,说明词法分析程序的语言,可以看成是一个模式动作语言。

  词法分析程序的自动构造工具也广泛应用于许多方面,如用以生成一个程序,可识别 印刷电路板中的缺陷,又如开关线路设计和文本编辑的自动生成等。

Page 92: 指导教师 : 杨建国

92

盛威网:专业的计算机学习网站

第 4 章 作业题

P72 :

1.(2)(3)

2.

4.

6.

7.

9.