形式系统

计算机专业教学
posts - 48, comments - 150, trackbacks - 0, articles - 10
  教师博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

给出右线性文法:
S
à 0S | 1S | 1A | 0B

A à 1C | 1

B à 0C | 0

C à 0C | 1C | 0 | 1

 

右线性文法特点:终结符+非终结符,

 

1、由右线性文法构造NFA:

1)  每个非终结符在图中对应一个结点,文法开始符号表示图中的初态结点,添加一终态结点 Z

2)  对形如 A à cB 的产生式,画一 A C 的弧,标记为 c

3)  对形如 A à c 的产生式,画一 A Z 的弧,标记为 c
例3_9.gif

(作为例子,请注意文法和图中彩色部分对应)

2 、由 NFA 转化为 DFA

       其实质是将结点的跳转转化为结点集之间的跳转。由初始结点 S 出发,找出其闭包构成的集合,在本例中, 由于不含ε路径,S的闭包集合就是 {S}。然后由{S}出发,找出通过不同的路径所能到达的集合。
      为清晰起见,将选择图中一个集合跳转,重新标上颜色,和下表对应。
   例3_9_2.gif

集合编号

集合

0

1

S0

{S}

{S,B}

{S,A}

S1

{S,B}

{S,B,C,Z}

{S,A}

S2

{S,A}

{S,B}

{S,A,C,Z}

S3

{S,B,C,Z}

{S,B,C,Z}

{S,A,C,Z}

S4

{S,A,C,Z}

{S,B,C,Z}

{S,A,C,Z}



3 、最小化

 

最小化的思想是在不改变 DFA 识别的语言的前提下,合并相应的结点,使合并后的 DFA 与合并前的 DFA 等效,而结点数目减少。

但在实现上,采用是从合到分的方法。先从最精简的结构出发,即,整个系统就两个集合,所有的终态结点并为一个结点,所有的非综态结点合并为一个结点 ( 整个系统不可能合并为一个结点,因为如果是一个结点的话,任何弧只能指向这个唯一的结点,本算法失效,但会不会出现只有一个结点的情况?大家想想。比如该 DFA 所定义的语言为 { ε } ,如果是这样,能否和本算法统一? )

然后看这种划分是否可行,如不可行,再分解出更多的集合。而合并可行的依据就是集合中的每个元素通过同一条弧到达同一个目标集合

 例3_9_3.gif

如上图,首先将所有的非综态结点合并为 I0 ,。将综态结点合并为 I1 。分别考察两个集合。对于 I0 ,通过 0 弧,有如下跳转: S0 à S1 S2 à S1 S1 à S3 。而 S1 I0 S3 I1 ,据此, S1 S0 S2 要分开位于不同集合。

现假定 I0={ S0 ,S2} I1={ S3 ,S4} I2 { S1 } 。考察 I0 ,同样是通过 1 弧,则有如下跳转:

S0 à S2 S2 à S4 ,而 S2 I 0 ,S4∈I 1 。故, S2 S4 分开。可以看出,只要发现一条弧不满足上述条件,就可以将其分离。并非要考察完每条弧。

       再来考察 I1 ,通过 0 弧可得: S3 à S3 I1 S4 à S3 I1 。通过 1 弧可得: S3 à S4 I1 S3 à S4 I1 。显然, I1 不可再分。

       如此重复,直到每个集合 Ii ( I=0,1,…) 均不可再分为止。

最小化后的状态转换图如下:

例3_9_4.gif

Feedback

# re: 最为精简的复习(由正规文法构造DFA)  回复  更多评论   

2006-07-08 22:15 by tw
S3少了个圆

# re: 最为精简的复习(由正规文法构造DFA)  回复  更多评论   

2006-07-09 10:54 by 形式系统
谢谢

# re: 最为精简的复习(由正规文法构造DFA)  回复  更多评论   

2006-12-14 09:07 by
真好
多谢了 !希望多这样的例子

# re: 最为精简的复习(由正规文法构造DFA)  回复  更多评论   

2007-07-03 02:42 by 米虫
谢谢老师
看这个比看书来得具体多了

# re: 最为精简的复习(由正规文法构造DFA)  回复  更多评论   

2007-10-17 17:51 by xxx
S0 à S2 、 S2 à S4 ,而 S2 ∈I 0 ,S4∈I 1 。故, S2 与 S4 分开。

应该式s0 与s2 分开吧?

# re: 最为精简的复习(由正规文法构造DFA)  回复  更多评论   

2007-10-20 08:41 by y
说得没错,但第三个图只代表最小化过程中的一步(第1步)。

在上一步基础上继续假定 I0={ S0 ,S2} , I1={ S3 ,S4} , I2 = { S1 } 。考察 I0 ,同样是通过 1 弧,则有如下跳转:
...
(只是没有画后续的图而已)

最后一个图才是最终结果。

只有注册用户登录后才能发表评论。