2011-12-16 62 views
0

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

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

回答

0

解决它自己,这是它的乐趣。下面的答案并不多,但是。

  1. 跟踪n个匹配项的状态/条件“”。所以。[n]然后继续模式匹配。
  2. 作弊和展望,不是一个好主意。 since。[n]可能很大,但可能不大。

它与其他模式匹配非常类似,比如*,并且记住在同一文本上可能会出现多个匹配;这就是为什么它可能被遗漏(当语法很丰富时,Dtran或状态机会变得很难);加上它非常相似,但接受一个字符。你可能不得不转换到NFA(非确定型有限自动机)以保持简单。

很明显,我没有通过龙书,但在大学,“计算理论”报道。我画了很多状态机。