2009-12-07 8 views
1

Je cherche la meilleure solution pour un générateur d'analyseur LALR pour C++ qui me permettra de générer de très bons messages d'erreur. Je déteste vraiment les erreurs de syntaxe que MySQL génère et je veux prendre l'analyseur en elle et le remplacer par un vérificateur de « peluches » qui me dira plus queQuel est le meilleur générateur d'analyseur LALR pour C++ pouvant générer des messages d'erreur significatifs?

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 

Je l'ai utilisé YACC/LEX et BISON/FLÉCHIR. Il doit fonctionner sur Mac ou Linux.

Répondre

3

Pourquoi avez-vous besoin de LALR? L'un des avantages des parseurs LL (k) est qu'ils peuvent souvent faciliter la génération de messages d'erreur clairs. La plupart des grammaires qui peuvent être analysées par un analyseur LALR peuvent être facilement remaniées pour être analysables par un analyseur LL (k).

ANTLR est un générateur d'analyseur LL (k) populaire qui peut générer du C++ (ainsi qu'un certain nombre d'autres langages). De Chapter 10 of The Definitive ANTLR Reference:

La qualité d'un des messages d'erreur d'application du langage et stratégie de rétablissement fait souvent la différence entre une application professionnelle et une application amateurisme. La récupération d'erreur est le processus de récupération à partir d'une erreur de syntaxe en modifiant le flux d'entrée ou consommant des symboles jusqu'à ce que l'analyseur peut redémarrer dans un état connu. De nombreux fabriqués à la main et beaucoup non à base de LL émettent moins de reconnaisseurs messages optimaux d'erreur, alors que ANTLR-reconnaissance de la généré automatiquement émettent très bonne erreur messages et récupérer intelligemment, comme le montre dans ce chapitre.

Plusieurs grammars are also available for ANTLR, y compris a MySQL grammar.

+0

Bonne suggestion - J'irai y jeter un coup d'œil. Ce n'est pas parce que j'ai travaillé avec LALR auparavant que je devrais l'utiliser maintenant. –

+0

Ok. Je suis impressionné jusqu'à présent. J'ai lu tout le chapitre 10 et cela semble très prometteur. –

+0

Cela semble très prometteur! –

0

Si vous trouvez que ANTLR ne résout pas complètement votre problème alors vous pourriez envisager basil. C'est un générateur d'analyseur LR (1) qui a été conçu et écrit pour créer un analyseur C++.

+0

Je vais jeter un coup d'oeil au basilic - mais j'ai déjà obtenu ANTLR pour faire un très bon travail. –