zoukankan      html  css  js  c++  java
  • 【形式语言和自动机】DFA和NFA

    参考博客 https://www.cnblogs.com/AndyEvans/p/10240790.html

    本节知识点是《编译原理》第三章-词法分析,学习参考教材为清华大学出版社《编译原理》第三版:

    前情提要:

    字母表∑1和∑2的乘积( product):

      ∑1∑2 ={ab|a ∈∑1, b ∈ ∑2}

      例: {0, 1} {a, b} ={0a, 0b, 1a, 1b}

    字母表∑的n次幂( power):长度为n的符号串构成的集合

      ∑0 ={ ε }
      ∑n =∑n-1 ∑ , n ≥

      例: {0, 1}3 ={0, 1} {0, 1} {0, 1}={000, 001, 010, 011, 100, 101, 110, 111}

    字母表的正闭包(positive closure):长度正数的符号串构成的集合:

      ∑+ = ∑ ∪∑2 ∪∑3 ∪…

      例:{a, b, c, d }+ = {a, b, c, d,aa, ab, ac, ad, ba, bb, bc, bd, …, aaa, aab, aac, aad, aba, abb, abc, …}

    字母表的闭包(Kleene closure):任意符号串(长度可以为零)构成的集合:

      ∑* = ∑0 ∪∑+ = ∑0 ∪∑ ∪∑2 ∪∑3 ∪…

      例:{a, b, c, d }* = {ε, a, b, c, d,aa, ab, ac, ad, ba, bb, bc, bd, …, aaa, aab, aac, aad, aba, abb, abc, …}

    一、【 有穷自动机 】:

    1、定义

    有穷自动机 ( Finite Automata,FA )

    具有一系列离散的输入输出信息和有穷数目的内部状态(状态:概括了对过去输入信息处理的状况)

    2、FiniteAutomata的表示:

    转换图 (Transition Graph)
      结点:FA的状态
      初始状态(开始状态):只有一个,由start箭头指向
      终止状态(接收状态):可以有多个,用双圈表示
      带标记的有向边:如果对于输入a,存在一个从状态p到状态q的转换,就在p、q之间画一条有向边,并标记上a

    3、Finite Automata定义(接收)的语言

    给定输入串x,如果存在一个对应于串x的从初始状态到某个终止状态的转换序列,则称串x被该FA接收
    由一个有穷自动机M接收的所有串构成的集合A称为是该FA定义(或接收)的语言,记为A=L(M (machine))

    We say that M recognizes A.

    A machine may accept several strings, but it always recognizes only one language.

     

    4、最长子串匹配原则(Longest String Matching Principle )

    ·当输入串的多个前缀与一个或多个模式匹配时,总是选择最长的前缀进行匹配

     

    ·在到达某个终态之后,只要输入带上还有符号, DFA就继续前进,以便寻找尽可能长的匹配

    二、【 有穷自动机的分类 】:

     

     确定的FA (Deterministic finite automata, DFA)
     非确定的FA (Nondeterministic finite automata, NFA)

     

    1、确定的有穷自动机DFA(Deterministic Finite Automata)

    定义: (DFA (确定型有穷自动机)) A deterministic finite automaton (DFA) is a 5-tuple (Q,Σ,δ,q0,F)

    where

    1 Q is a finite set called the states,

    2 Σ is a finite set called the alphabet,

    3 δ : Q×Σ → Q is the transition function,

    4 q0 ∈ Q is the start state,

    5 F ⊆ Q is the set of accept states.
    例子

     注意F是集合

    用转换表表示DFA

     M2和M3,两个互为补集。Σ*=L(M2)+L(M3)

    求一个自动机的补集:把终结状态和非终结状态互换

     

    2、非确定的有穷自动机NFA(NonDeterministic Finite Automata)

    定义 (NFA) A nondeterministic finite automaton (NFA) is a 5-tuple (Q,Σ,δ,q0,F)

    where

    1 Q is a finite set of states, 有穷状态集

    2 Σ is a finite alphabet,  输入符号集合,即输入字母表。假设ε不是Σ中的元素

    3 δ : Q×Σε →P(Q) is the transition function,

    4 q0 ∈ Q is the start state,

    5 F ⊆ Q is the set of accept states.

    P(Q) is the power set of Q

    Σε = Σ∪{ε}

    例子:

    三、【 从正则表达式到有穷自动机 】

    ε对应的NFA

     

    □ 字母表Σ中符号a对应的NFA

    □ r = r1r2对应的NFA

    □ r = r1|r2对应的NFA

    □ r = (r1)*对应的NFA

    例:r=(a|b)*abb 对应的NFA

  • 相关阅读:
    Java5 多线程实践
    ExtJS2.0实用简明教程 Border区域布局
    MySQL安装图解
    ExtJS2.0实用简明教程 组件的使用
    ExtJS2.0实用简明教程 ExtJS版的Hello
    Linux操作系统中如何安装Tomcat
    线程池的介绍及简单实现
    ExtJS2.0实用简明教程 获得ExtJS
    汽车常识全面介绍 动力系统
    MySQL 图形化管理工具介绍
  • 原文地址:https://www.cnblogs.com/conver/p/12635437.html
Copyright © 2011-2022 走看看