zoukankan      html  css  js  c++  java
  • 编译原理正规式和有限自动机

    正规式:

    正规式:正则表达式,表示正规集的工具。

    一个正规式对应一个正规文法(3型文法)

    之间能够进行准换

    三个基本规则:

    A->xB,B->y  则 A=xy。

    A->xA|y  则A=x*y  (x*代表x从1到无穷多个)

    A->x,A->y 则A=x|y


    正规式主要用到了递归的思想,无论遇到多复杂的正规式都可以拆分成上面这三种形式,然后进行解题。


    有限自动机(有穷自动机):

    DFA(Deterministic Finite Automation ):确定的有限自动机

    表达式:M=(S,∑,f,So,Z)

    1.S为一个有限状态集合

    2.∑是一个字母表,它所包含的的每个元素称为一个输入字符;

    3.f是一个从SX∑(笛卡尔乘积)至S的单值部分映射。f(S,a)=s'意味着当现在的状态为s,输入字符a时,将转换到下一状态s'.s'为s的一个后继状态。

    4.So∈S,是唯一的初态;

    5.Z⊆S,是一个终态集。

    NFA(Nondeterministic Finite Automata):不确定的有限自动机

    如果理解了有限自动机,则无限自动机和它的区别就是上面的第四项。

    So⊆S,它的初态不是唯一的,而是一个集合。


    NFA向DFA的转换:

    这个转换是一个比较简单的过程。

    1.如果有一个不确定的有限自动机,则可以转化为图的方式。此处不详述怎样转图的方式。

    2.先将初态确定,然后根据输入的每个元素可以得到哪些状态,依次列表。

    3.这些状态集合可以称为这个有限状态集合n个子集。按0,1,2……的顺序编号。

    4.因为这些子集之间的关系是输入一个确定值确定的,所以这些子集之间存在一些关系,即把这些子集的关系写出来完成NFA向DFA的转换。

    如果不懂可以从网上找一个例子进行理解。


    正规式与有限自动机之间的转换:


    任意的正规式都可以转换为上述三种的表现形式。

    在一个有限自动机转换为正规式时,就是考虑从初态到终态可以输入哪些数据到达。而这些数据可以用哪种正规式概括进来。

  • 相关阅读:
    REST framework框架的基本组件
    GIT如何根据历史记录回退代码
    如何查看磁盘存储空间
    git免密拉取代码
    windows好用的cmd命令
    git如何新建分支
    screen命令
    解决windows配置visual studio code调试golang环境问题
    转载一篇棒棒的AWK教程
    解决Creating Server TCP listening socket 54.179.160.162:7001: bind: Cannot assign requested address
  • 原文地址:https://www.cnblogs.com/shihao/p/2199359.html
Copyright © 2011-2022 走看看