2010-08-07 8 views

Répondre

1

Cherchez-vous une génération à partir d'une grammaire CFG? C'est à dire. la génération de chaînes qui sont acceptées par la grammaire? Cela pourrait être une bonne idée de vérifier l'exactitude de la grammaire, mais gardez à l'esprit que l'ensemble des chaînes acceptées est très probablement infini. Tous les bogues vraiment mauvais devraient déjà être apparents dans la spécification de grammaire, et heureusement par la vérification de LL-ness.

Je ne connais aucun outil dans le monde ANTLR, pas plus qu'une recherche google rapide sur la génération (E) BNF ne révèle quelque chose d'utile.

Il n'est cependant pas très difficile de rouler votre propre générateur si la performance et ce n'est pas un problème. Prolog viendrait à l'esprit, il y a beaucoup de littérature disponible, mais si vous ne voulez pas quitter Java, je pense que le homebrewing est la solution. C'est amusant quand même.

0

Supposons que vous ayez généré des phrases (chaînes de jetons) à partir de votre grammaire ANTLR. Pourquoi penses-tu que ton analyseur basé sur ANTLR s'y opposerait?

Ce que vous avez vraiment à faire est de produire des chaînes pas tout à fait légales. Donc, ce dont vous avez besoin est un générateur qui peut produire des chaînes erronées. Etant donné que ANTLR génère un ensemble de procédures à partir de votre grammaire ANTLR, je pense qu'il serait difficile de produire un générateur de phrases en utilisant l'analyseur généré. Ce dont vous avez besoin est le modèle explicite de la grammaire. Et ce déjà disponible: ANTLR entrée grammaire.

Une complication supplémentaire que je vois est la génération de jetons légaux à partir des expressions rationnelles qui composent les définitions de jeton. Encore une fois, vous devez traiter l'entrée ANTLR pour le faire.

Le traitement de ces deux semble techniquement simple. Le meilleur moteur à utiliser en tant que fondation est probablement le frontal ANTLR, qui analyse évidemment les spécifications ANTLR et qui doit donc contenir une représentation de l'entrée ANTLR.

+0

Je ne crois pas que vous avez raison, en tant qu'utilisateur ANTLR je ne suis pas intéressant tester la capacité d'ANTLR à utiliser une grammaire pour analyser une séquence d'entrée, ses capacités et son comportement sont bien documentés. Non, la chose qui m'intéresse est de tester le comportement de mon visiteur-auditeur pour des graphes d'objets arbitraires - graphes Je ne pouvais pas penser à trouver les documents pour moi-même. Je voudrais beaucoup aimer un outil qui génère des chaînes aléatoires pour une grammaire fournie. Un tel outil permettrait une génération élégante de tests de bout en bout. – Groostav

+1

@Groostav: tout le monde comprend que le problème était de générer des chaînes aléatoires à partir du langage, ou de variantes proches. Le problème est, comment allez-vous générer ces chaînes? Mon point est que ne peut pas facilement le faire à partir des parseurs ANTLR générés; C'est comme essayer d'interpréter du code arbitraire qui est Turing-hard (peut-être pas, mais personne ne prétend que c'est facile à faire). Le seul artefact que vous devez utiliser pour générer ces chaînes est la grammaire explicite ANTLR elle-même, y compris les aspects lexicaux. ANTLR lui-même ne semble pas vous aider. Ce qui sera? –

0

Cherchait quelque chose de similaire et trouvé GramTest, ce qui semble convenir, mais au lieu de la grammaire ANTLR utilise la grammaire BNF comme entrée.

Cet outil vous permet de générer des cas de test basés sur des grammaires définies par l'utilisateur arbitraire . La grammaire d'entrée est donnée en notation BNF. Les applications potentielles incluent le fuzzing et les tests automatisés.

Pour plus d'informations d'arrière-plan, ils contiennent un lien vers les blogposts suivants:

Questions connexes