编译原理-DFA有穷自动机 词法分析应用于O(n)的单词匹配

本文介绍了如何使用DFA(有穷自动机)进行词法分析,以O(n)的时间复杂度实现单词匹配。通过创建等价类和DFA流程表,实现了从字符串中快速查找目标单词的功能。代码示例展示了如何构建DFA并进行扫描分析。
摘要由CSDN通过智能技术生成

有穷自动机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)//为单词生成词法分析器
{

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值