有限自动机
有一个有限的状态集合和一些从一个状态转向另一个状态的边,每条边上标记有一个符号;其中一个状态是初态,某些状态是终态。
确定的有限自动机 (DFA)
确定的有限自动机中,不会有从同一状态出发的两条边的标记有相同的符号,DFA以如下方式接收或拒绝一个字符串
1.从初始状态出发,对于输入字符串的每个字符,自动机都将沿着一条确定的边后到达另一状态。
2.对n个字符的字符串进行n次状态转换后,自动机达到了一个终态,自动机将接受该字符串。若达到的不是终态,或者找不到与输入字符匹配的边,那么拒绝。
自动机可以用转换矩阵或者转换表来表示。(类似图的邻接矩阵,邻接表)此外还需要一个终结数组,将状态编号映射至接受的动作。
非确定有限自动机(NFA) 是一种需要对从一个状态出发的多条标有相同符号的边进行选择(可以转换到多个状态)的自动机.它也可能存在标有空的边。
正则表达式可以转换成一个非确定有限自动机。
NFA装换成DFA
因为实现DFA比较容易实现NFA比较复杂。我们可以尝试把NFA转换成DFA,然后再实现。
具体方法是把状态的NFA转换成 状态数组的DFA。一个结点不再表示一个状态,而是表示通过一个字符匹配所能达到的所有状态的集合。
构造DFA是一种机械性地工作,很容易编程实现,所以出现了lex、flex这种用来生成词法分析器代码的程序。
时间: 2024-10-11 06:05:31