有穷自动机DFA就是一个流程表,其中一些流程为接受态,接受态是可以作为一个此法分析终止的状态,如下图即是这次的DFA:
原谅我的画图工具很low~~,好了贴代码,由二维数组作为DFA,每个元素的值为下一个状态的编号,查询的时间复杂度为O(n),远低于普通算法的O(n^2);
/*main.cpp
用词法分析器搜索单词在文中出现次数
By 李自乐
*/
#include <iostream>
#include <cstring>
#define OTHERS 0//等价类-其他字母
#define SPACE 1//等价类-分隔符
#define START 2//等价类-特殊单词起始类号
#define STEP 3//特殊单词此法分析开始步骤
using namespace std;
unsigned int vclass[128];//等价类
unsigned int **dfa; //DFA有穷自动机
void dfainit(char* target)//为单词生成词法分析器
{