引言:正则表达式有两种基本要素——字符表达式和ε表达式,以及三种基本运算——并、连接和闭包
有穷自动机 (FA: Finite Automata)
正则表达式并不能直接用来解析字符串,所以引入有穷自动机这种适合转化为计算机程序的模型
-
FA的表示: 转换图、转换表
-
转换图:
结点表示状态,只有一个初始状态,若干终止状态(双圈表示)
边表示条件转移:遇到输入x则转移 -
最长匹配原则(Longest String Matching Principle)
分类
- 确定的FA (Deterministic Finite Automata):
其特点是从每一个状态只能发出一条具有某个符号的边。也就是说不能出现同一个符号出现在同一状态发出的两条边上。
- 非确定的FA(Nondeterministic Finite Automata):
允许从一个状态发出多条具有相同符号的边,甚至允许发出标有ε(表示空)符号的边,也就是说,NFA可以不输入任何字符就自动沿ε边转换到下一个状态。
-
NFA会自动猜测应该选择哪一条边,而且每次都能猜对。
-
带ε-边的NFA:无条件转移 <=> 不带ε-边的NFA