循环是否比词法分析器中的正则表达式更有效?

Is a loop more efficient than regex in a lexer?

出于好奇,我正在编写一种玩具语言。我已经编写了一个功能性的词法分析器来使用许多正则表达式创建标记。

从性能的角度来看,faster/more 逐个字符地循环遍历源代码并找出标记是否有效,还是我应该坚持使用正则表达式?只是好奇 "proper" 词法分析器是如何实现的。

考虑到我们使用的计算机的体系结构,正则表达式最终是通过循环实现的。

如果代码是结构化的,它将是 while 语句中的 switch 语句的组合,switch 中的情况表示Deterministic Finite Automaton 识别与正则表达式相同的语言。

如果 goto 被允许,实施会比通用正则表达式库能做的更有效。

除非您有特定的效率需求,否则坚持使用正则表达式库应该足够高效,并且会节省您大量的编程(调试)时间。