第三章 词法分析与有限自动机

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

posted @ 2021-06-27 10:54  cai的一批  阅读(357)  评论(0编辑  收藏  举报