码迷,mamicode.com
首页 > 其他好文 > 详细

NFA

时间:2016-04-16 21:14:34      阅读:316      评论:0      收藏:0      [点我收藏+]

标签:

任意正则表达式都存在一个与之对应的NFA,反之亦然.

正则表达式 ((A*B|AC)D)对应的NFA(有向图), 其中红线对应的为该状态的ε转换, 黑线表示匹配转换

技术分享

我们定义的NFA具有以下特点:

  • 正则表达式中的每个字符在NFA中都有且只有一个对应状态,NFA的其实状态为0,并包含一个虚拟的接收状态
  • 正则表达式中的字母所对应的状态都有一条从它指出的黑色的边,并且一个状态只能有一条指出的黑色边
  • 正则表达式中的元字符所对应的状态至少含有一条指出的红色的边

ε转换

不需要扫描匹配文本中的任意字符,自动机就可以从一个状态转换到另一状态

使用 NFA模拟匹配过程:

  • 首先获取初始状态通过ε转换可以到达的所有状态集合,上图为0,1,2,3,4,6
  • 顺序扫描匹配文本中的字符,如果状态集合中找到匹配该字符的状态(可以使多个),自动机就可以扫过该字符并由黑色的边转到下一个状态,这种转换成为匹配转换,由下一状态及下一状态的的ε转换生成新的状态集合,继续扫描下一个字符
  • 扫描完所有字符后,如果最终到达的所有状态中包含接受状态,则匹配该字符串

技术分享
源代码

NFA

标签:

原文地址:http://www.cnblogs.com/phenixyu/p/5399243.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!