如何在实现正则表达式解析器时实现点(。)符号?

时间:2011-12-16 04:33:15

标签: regex

我正在使用龙书中的算法实现正则表达式解析器。现在我可以生成一个DTran表并解析一些基本的正则表达式,如:(a|b)*abb

但是在实现匹配任何字符的.符号时遇到了问题。龙书中没有关于它的文字,是否有关于实施它的一些例子或文章?

1 个答案:

答案 0 :(得分:0)

自己解决,这就是它的乐趣。以下不是一个答案,但不过。

  1. 跟踪n号“匹配”的状态/条件。“所以。[n]然后继续模式匹配。
  2. 作弊并向前看,不是一个好主意。从那以后。[n]可能很大,但可能不会。
  3. 它与其他模式匹配非常相似,比如*,并且记住在同一文本上可能会发生多个匹配;这就是为什么可能把它留下来(当语法丰富时,Dtran或状态机变硬);加上它真的很相似,但接受一个字符。你可能不得不切换到NFA(非确定性有限自动机)以保持简单。

    很明显,我没有完成龙书,但在大学里,“计算理论”涵盖了它。我画了许多状态机。