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
    • 顺序扫描匹配文本中的字符,如果状态集合中找到匹配该字符的状态(可以使多个),自动机就可以扫过该字符并由黑色的边转到下一个状态,这种转换成为匹配转换,由下一状态及下一状态的的ε转换生成新的状态集合,继续扫描下一个字符
    • 扫描完所有字符后,如果最终到达的所有状态中包含接受状态,则匹配该字符串

    源代码
  • 相关阅读:
    TCP与UDP的区别
    gdb调试入门(上)
    linux开发工具之Makefile(上)
    在kolla中配置cinder ceph多后端
    OpenStack qemu-guest-agent 使用
    Windows 环境下使用强大的wget工具
    Centos 7 GCC 7.3编译器安装方法及C++17标准测试示例
    Neutron 架构图
    openstack 的 lbaas 疑问
    Mounting VMDK files in Linux
  • 原文地址:https://www.cnblogs.com/phenixyu/p/5399243.html
Copyright © 2011-2022 走看看