Car*_*icz 13
我最近写了一个简单的词法分析器和解析器.
事实证明,词法分析器手动编码更简单.但解析器有点困难.我的Bison生成的解析器几乎完全正常工作,它给了我很多关于我忘记状态的有用信息.我后来手工编写了相同的解析器,但在我完美地工作之前需要进行更多的调试.
为词法分析器和解析器生成工具的吸引力在于,您可以用干净,易于阅读的语言编写规范,这种语言接近于您的规范的最短版本.手写解析器通常至少是两倍大.此外,自动解析器(/ lexer)附带了许多诊断代码和逻辑,可帮助您调试内容.
如果您的语言或要求发生变化,那么类似BNF语言的解析器/词法分析器规范也更容易更改.如果您正在处理手写的解析器/词法分析器,您可能需要深入挖掘代码并进行重大更改.
最后,因为它们通常被实现为有限状态机而没有回溯(在Bison上有很多选项,所以这并不总是给定的),你的自动生成的代码很可能比手工编码的产品更有效.