第三章 词法分析与有限自动机
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