zoukankan      html  css  js  c++  java
  • NFA

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

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

    clipboard

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

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

    ε转换

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

    使用 NFA模拟匹配过程:

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

    源代码
  • 相关阅读:
    Windows Server 2008上安装 Windows SharePoint Services 3.0
    自定义Unity 容器的扩展 Unity Application Block Event Broker
    .NET Migration工具
    ASP.NET 应用程序的扩展策略[MSDN 杂志]
    命令行解析的规则以及Command Line Parser Library
    Visual Studio 2008 SP1和.NET FX 3.5 SP1发布了
    Entity Framework samples For RTM
    PowerShell的开源实现
    Enterprise Library 4.0缓存应用程序块
    Microsoft SQL Server Community & Samples
  • 原文地址:https://www.cnblogs.com/phenixyu/p/5399243.html
Copyright © 2011-2022 走看看