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

    源代码
  • 相关阅读:
    JAVA获取随机数
    web路径问题
    java.lang.IllegalStateException: Failed to load ApplicationContext,这个异常的解决方案
    使用表达式配置切入点
    Spring的aop操作
    AOP操作术语
    AOP原理
    AOP概念
    spring知识点
    Spring的ioc操作 与 IOC底层原理
  • 原文地址:https://www.cnblogs.com/phenixyu/p/5399243.html
Copyright © 2011-2022 走看看