用确定性有限自动机和字母表的大小模拟正则表达式

时间:2013-09-17 14:14:44

标签: finite-automata

我目前正在通过“龙书”(编译器:原理,技术和工具),我有点陷入词汇分析章节,它使用了DFA(确定性有限自动机)。 / p>

DFA是一个二维数组,第一维包含状态,第二维包含过渡符号。这意味着每个DFA状态都包含该语言的所有符号。书中的例子使用了一种小语言(通常是两个符号),并在本章末尾做了如下注释:“因为典型的词法分析器在其DFA中有几百个状态,并且涉及128个输入字符的ASCII字母表,该阵列消耗不到一兆字节“。

但是,对于匹配字符串我想匹配所有字符,这意味着整个字符集,并且许多输入文件使用UTF-8编码。这导致字母表,以及DFA的大小,大大增加。

这就是我陷入困境的地方。词法分析器或正则表达式模拟器如何处理这个?

谢谢!

2 个答案:

答案 0 :(得分:1)

我对这个问题很顿悟。在词法分析中,关于你想要匹配超出ASCII范围的字符的唯一时间是在进行通配符匹配时,比如在字符串或注释中。由于这些仅用于通配符,而不是单独使用,因此值为128或更高的所有字符都可以表示为单个“其他”值。字母和DFA保持这种方式很小,而我仍然可以使用转换表并匹配整个unicode字符集。

答案 1 :(得分:0)

这是一个interesting tool,它将正则表达式转换为非确定性有限自动机。