什么是C ++最好的LALR解析器生成器,可以生成有意义的错误消息

时间:2009-12-07 06:54:04

标签: c++ mysql parsing lalr

我正在为C ++的LALR解析器生成器寻找最佳解决方案,这将允许我生成非常好的错误消息。我真的很讨厌MySQL生成的语法错误,我想在其中使用解析器并用“lint”检查器替换它,它将告诉我的不仅仅是

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'a from users' at line 1

我使用过YACC / LEX和BISON / FLEX。 它必须在Mac或Linux上运行。

2 个答案:

答案 0 :(得分:3)

为什么需要LALR? LL(k)解析器的一个好处是它们通常可以更容易生成清晰的错误消息。大多数可由LALR解析器解析的语法都可以轻松地重构,以便LL(k)解析器可以解析。

ANTLR是一种流行的LL(k)解析器生成器,可以生成C ++(以及许多其他语言)。来自Chapter 10 of The Definitive ANTLR Reference

  

语言的质量   应用程序的错误消息和   恢复策略经常使得   专业人士之间的区别   申请和业余   应用。错误恢复是   从语法中恢复的过程   通过改变输入流或错误   消费符号直到解析器可以   在已知状态下重启。许多   手工打造和许多非基于LL的   识别器发出的不是最佳   错误消息,而   ANTLR生成的识别器   自动发出非常好的错误   消息和智能恢复,如   如本章所示。

许多grammars are also available for ANTLR,包括a MySQL grammar

答案 1 :(得分:0)

如果您发现ANTLR无法完全解决您的问题,那么您可能会考虑basil。它是一个LR(1)解析器生成器,设计和编写用于创建C ++解析器。