在尝试编写tokenizer时我应该使用正则表达式吗?

时间:2010-08-17 09:09:38

标签: regex parsing methods

我编写了一个小而简单的标记化程序,但没有使用正则表达式。

我从第一个索引开始,遍历每个字符直到结束并创建所需的标记。

我向一位同事表明,如果不进入任何深度,那么使用正则表达式会更简单。

我应该重写并期望它“更好”吗?

4 个答案:

答案 0 :(得分:3)

通常,标记化可以使用有限状态机完成,这相当于规范正则表达式。如果你做出理智的正则表达式,它将比自制的FSA更容易阅读和维护。使用像flex或jflex这样的工具,他们会将正则表达式编译成最小的FSA,从而提供非常好的性能。手动执行此操作只能作为练习进行。

Lexers存在于多个实现中,很可能是您最喜欢的语言。

答案 1 :(得分:2)

你应该问两个问题:

a)如果某些事情发生变化,哪一个最容易维护?

b)如果它正在运作并且你不希望有任何改变,你真的想花更多的时间吗?

我确信性能差异小到可以忽略不计。编程经验和最小化潜在错误是最重要的问题。

答案 2 :(得分:1)

我不这么认为。正则表达式必须非常丰富,因此你的程序运行速度可能会变慢。

答案 3 :(得分:-1)

非常依赖于解析的语言和“更好”的定义。