我目前正在使用本文所述的正则表达式编写词法分析器:Poor man's "lexer" for C#
虽然它比我已经拥有的要快得多,但我只是不喜欢每个文件仍然花费大约 500 毫秒(使用秒表在 100x36k 令牌的循环中计时)。
在移动我的令牌的优先级之后,我已经将 500 毫秒减半,并且通过向我的大多数令牌添加“简单匹配”布尔值(这基本上意味着它应该使用简单string.Contains(Ordinal)
而不是Regex.Match
),我获得了额外的 50 毫秒(大约) .
为了获得最佳性能,我显然想摆脱大部分(如果不是全部Regex.Match
)电话。为此,我需要一些东西来模拟正则\b
表达式中的标签,也就是所谓的单词边界(意味着它应该只匹配整个单词)。
虽然我可以疯狂地编写一个简单的方法来检查我的“简单匹配”之前和之后的字符是否是非单词字符,但我想知道 .NET 是否有这个内置的东西?
如果我最终不得不编写自己的方法,那么最好的方法是什么?在我的单词之后选择字符的索引并检查它的字节值是否低于任何值?任何有关此的提示也将受到欢迎!