有穷自动机,也称有限自动机,作为一种识别装置,能够准确的识别正规集,即识别正规文法所定义的语言和正规式所表示的集合。引入有穷自动机理论,正是为词法分析程序的自动构造寻找特殊的方法和工具。
有穷自动机分为两类:确定的有穷自动机(Deterministic Finite Automata,DFA)和不确定的有穷自动机(Nodeterminister Finite Automata,NFA).
首先来说DFA。
一个确定的有穷自动机M是一个五元组:
(原谅我打不出这些字母,然后我就放了个图。ps:和书上字母不一样,不过意思差不多。)
具体的例子:
用矩阵表示DFA如下:
最开始的时候我写了一个实现最繁琐的小程序,就是这个
#include <iostream>
using namespace std;
class DFA
{
private:
char state;
public:
void initialize/*初始化*/(void){
state='S';
}
void transition/*转换*/(char);
bool in_terminal_state(void){/*终端*/
if(state=='Q')
return true;
else
return false;
}
bool in_fail_state(void){
if(state=='F')
return true;
else
return false;
}