Lex和Yacc是否提供优化代码,还是我们需要手动编写自己的代码以获得更高的性能?
答案 0 :(得分:2)
您编写的代码对速度有很大影响,尤其是在词法分析器方面。有些版本的Flex带有六个(左右)不同的字计数器,大多数是用Flex编写的,还有一些是手工编写的 - 代码很好地说明了如何优化扫描速度(以及相当合理的比较手写和机器生成的词法分析器你可以期待什么。
在解析器方面,您通常会受到更多约束 - 在不影响语义的情况下,您无法进行多次更改。在这里,很大程度上取决于您使用的解析器生成器 - 例如,一些较少受约束语法的算法始终产生相对较慢的解析器,而其他算法仅针对受约束较少的构造减慢速度,并且只要输入就运行相对较快不使用更复杂的结构。
答案 1 :(得分:0)
Yacc生成一个表驱动的解析器,它永远不会像编写良好的手动编码器一样快。我不知道这是否适用于lex。