我知道LEX/YACC不能用于C++,但我还没有找到一个好的、简明扼要的解释原因的说明。我也想知道是否可以使用LEX/YACC来解析Objective C,或者这种语言是否存在同样的问题。(注意,我的意思是ObjC,而不是Obj-C++。)谢谢。
当然可以使用lex和yacc来解析C++,但是还需要很多其他的机制。曾经,gcc使用了基于yacc的解析器,但是它被手动构建的递归下降解析器所取代,这被认为更容易维护,也使得生成有意义的语法错误更简单。clang出于同样的原因使用了手动构建的递归下降解析器。Bison可以构建GLR解析器,这使得探索可供选择的解析变得更加容易(这对于消歧规则是必要的)。关于C++的GLR解析,请参见Ira Baxter在Are GCC and Clang parsers really handwritten?中的回答。此外,请查看Matthew Slattery在同一问题的回答中提供的链接,特别是在gcc wiki上找到了2008年替换旧的yacc解析器所感知到的成本和收益的总结。