zoukankan      html  css  js  c++  java
  • 第三章 词法分析与有限自动机

    1.单词的种类
        1)关键字:eg:while、if、else
        2)标识符:eg:变量名、数组名、函数名…
        3)常数:eg:80、1.23、“Hello“…
        4)运算符:eg:算术运算符、逻辑运算符、关系运算符…
        5)界限符:eg:,、:、[、]、{、}…
    除了五类单词,还包括空格符、回车符、换行符等。

    词法分析器的手工构造

    2.有限自动机(FA)
    有限自动机是对状态图的形式化描述

    也就是说,有限自动机可以等价地表示为状态图,一个状态图也可以表示成等价的FA

    有限自动机(Finite Automata)即FA

    有限自动机分为:

    确定有限自动机(Deterministic Finite Automata)   

    非确定有限自动机(Nondeterministic Finite Automata)

    3.确定的有限自动机
    1.定义:一个确定的有限自动机(DFA) M是一个五元组:M=(S,Σ,δ,s0,F),其中:    

    1)S是一个有限集,它的每一个元素称为一个状态。    

    2)Σ是一个有穷字母表,它的每个元素称为一个输入字符。    

    3)δ是一个从S×Σ到S的单值部分映射δ(s,a)=s’表示在目前状态s下输入字符为a时,将转换到下一个状态s’。s’被称为s的一个后继状态。    

    "单值"是说确定的s,a对应唯一的s’
    "部分"是说,有些状态(终态)可能与任何字符均不存在映射

    4)s0∈S,s0是唯一的初态。    

    5)F ⊆S,F是一个终态集,可以为空

    3.1DFA的状态转移矩阵

    看下面一个例子:
    DFA M =({0,1,2,3},{a,b},f,0,{3}),其中f为
    f(0,a)=1 f(0,b)=2
    f(1,a)=3 f(1,b)=2
    f(2,a)=1 f(2,b)=3
    f(3,a)=3 f(3,b)=3

    f 画成状态转换矩阵就是酱紫

    3.1DFA的状态转换图

     注意:
      由DFA的定义,DFA的状态图有且仅有一个初态,
      同一个状态发出的弧上的字符不重复(单值映射,这也是DFA中D含义)

     若M的初态结点同时又是终态结点,则空字符串ε被M所识别。

    4.非确定有限自动机(NFA)

    S:有穷状态集   

    Σ:输入字母表(有穷)   

    f :状态转换函数,即状态转换图中的弧,S×Σ*→2S的部分映射,    

    (2S即S的幂集,是由S的所有子集组成的集合,2S = { A|A⊆S })     

    f(s,a)=S’,s是现态,输入字符a后,可到达状态集S’里的任何一个状态,S’ ⊆ 2S     

    不保证是单值映射,因此是NFA(NFA的N)     

    另外需要注意的是,弧接受的可以是字,甚至是甚至   

    S0:非空的初态   

    F:终态集(可空)

    NFA相对于DFA的不同

    • NFA可以有多个初态,是初态集;DFA有唯一初态。
    • NFA弧上的标记可以是Σ*上的字,甚至可以是正规式,而不一定是单个字符;DFA是单个字符。
    • NFA同一状态上射出的弧上的字可以重复,也就是说接受同一个字,可以到达多个状态;DFA是单值部分映射。

    NFA的化简思路:DFA的每一个状态代表NFA状态集合的某个子集,构造的DFA使用它的状态去记录NFA读入输入符号之后可能到达的所有状态的集合。


    原文链接:https://blog.csdn.net/LeeDuoZuiShuai/article/details/104882488

  • 相关阅读:
    windows下大数据开发环境搭建(3)——Scala环境搭建
    windows下大数据开发环境搭建(1)——Java环境搭建
    windows下大数据开发环境搭建(2)——Hadoop环境搭建
    I/O复用
    SuRF : Practical Range Query Filtering with Fast Succinct Tries
    信号处理
    进程间通信
    简易内存分配器的实现
    socket编程(C++)
    C++—程序的内存分区
  • 原文地址:https://www.cnblogs.com/whcai/p/14940090.html
Copyright © 2011-2022 走看看