好的,我知道这个问题可能听起来很主观,但由于我有几个具体的选择标准,所以我认为它很适合SO。所以,这就是我在这里的原因...
我过去经常从事编译器/解释器构建(显然大多数是作为业余爱好),出于某种原因,我一直使用Lex/Yacc(或Flex/Bison,我对他们现在被称为什么感到非常困惑...哈哈)。
然而,由于我发现自己目前正在玩另一个业余解释器项目,我想尝试一些不同的东西,也许可以避免我不喜欢的Lex/Yacc。
所以,具体要求如下:
- 比较C++友好而不是C友好
- 有良好的文档(最好已经实现了一些现有的语法,并提供如何编译/使用它们的说明——听起来相当明显,是吧?)
- 可以是LALR、LL(*)、递归下降,我并不介意(注意:你可以告诉我你更喜欢哪种类型以及针对什么类型的实现;说实话,我从来没有真正理解它们的优缺点,尽管我知道他们指的是什么)
- 将Lexer部分和Parser语法组合在一个文件中并不坏;我从来没有真正明白为什么必须拆成两个部分。
- 最后但并非最不重要的:我总是遇到问题......就至少对于Lex/Yacc而言,解析错误消息更多地是晦涩难懂的(
语法错误
...呼呼!)而且很少有帮助诊断问题。(好吧,除非你是开发该解释器的人...哈哈)。因此,是否有比Lex/Yacc更好的选择?解析出错报告?
好的,希望这不会太啰嗦。我全副注意!:-)