该网页建议如果您的 lex 程序“有大量保留字,让 lex 简单地匹配一个字符串并在您自己的代码中确定它是变量还是保留字会更有效”。
我的问题是:在哪里更高效,为什么?如果这意味着编译词法分析器更快,我并不真正关心这一点,因为它是从使用词法分析器解析输入的程序中删除的一步。
似乎 lex 只是使用您的描述来构建一个一次处理一个字符的状态机。增加状态机的大小必然会导致它变得比使用一个标识符规则然后进行多个字符串比较慢,这似乎是不合逻辑的。
此外,如果事实证明这有某种逻辑上的理由作为一种优化是有意义的,那么什么会被认为是大量的保留字呢?我有大约 20 条,而其他各种规则大约有 30 条。那会被认为是大量的保留字吗?我应该尝试对其他一些符号使用相同的策略吗?
我试图用谷歌搜索结果,但我发现的唯一相关文章指出了这个策略,好像它是众所周知的,没有给出任何理由。
如果相关,我使用的是 flex 2.5.35。
编辑:这是另一个参考,它声称 lex 在被要求匹配几个长文字字符串时会产生效率低下的扫描器。它也没有给出理由。