Lex 和 Yacc 是否提供优化的代码,或者是否需要我们手动编写自己的代码以获得更高的性能?
1768 次
2 回答
2
您编写的代码对速度有很大影响,尤其是在词法分析方面。某些版本的 Flex 带有六个(左右)不同的字计数器,大多数是用 Flex 编写的,还有一些是手工编写的——代码很好地说明了如何优化扫描速度(以及相当合理的比较您可以在手写与机器生成的词法分析器中期待什么)。
在解析器方面,您通常会受到更多限制——您不能在不影响语义的情况下进行尽可能多的更改。在这里,很大程度上取决于您使用的解析器生成器——例如,一些用于约束较少的语法的算法始终会产生相对较慢的解析器,而其他算法仅对约束较少的构造减慢,并且只要输入运行相对较快不使用更复杂的结构。
于 2010-05-06T20:08:12.753 回答
0
Yacc produces a table-driven parser, which can never be as fast as a well-written hand-coded one. I don't know if the same applies to lex.
于 2010-05-06T09:27:27.580 回答