模式识别(Pattern recognization)是现在非常流行的一个词,我们对词法的分析也是基于模式(pattern-based)的。我们用正则表达式(Regular Expression)来定义单词的模式,而在词法分析时,有限状态机(Finite Automata)更便于我们分析。本文介绍将正则表达式(RE)转为确定的有限状态机(DFA)的方法。
首先,什么是确定的有限状态机,什么是非确定的有限状态机(NFA)?用通俗的语言讲,在面对相同的输入参数时,NFA可能会跳转到多种状态,而DFA只会跳转到特定的状态,有DFA类似于函数,而NFA类似一对多的映射。
DFA用程序可以描述为:
state = 1;
while (true) {
ch = getChar();
switch(state) {
case 1:
if (ch == 'a')
state = 1;
else if (ch == 'b')
state = 2;
else error();
break;
case 2://终止状态
if (ch == 'a') state = 2;
if (ch == '1') state =2;
else {
ungetChar();//把取出的字符放回去
return ID;