web-dev-qa-db-fra.com

antlr4-Impossible de charger Hello en tant que lexer ou analyseur

J'ai récemment dû utiliser l'analyseur pour faire un projet. Je télécharge ANTLR4 et suivez les étapes décrites dans le livre The Definitive ANTLR4 Reference. Voici les étapes que je tape en ligne de commande:

 1. export CLASSPATH=".:/<Mydirectory>/antlr-4.2.2-complete.jar:$CLASSPATH"
 2. alias antlr4='Java -jar /<My directory>/antlr-4.2.2-complete.jar'
 3. alias grun='Java org.antlr.v4.runtime.misc.TestRig'
 4. antlr4 Hello.g4

Tout fonctionne bien, il génère des fichiers Java dont j'ai besoin. Cependant, après avoir entré

 5. grun Hello r -tokens

Il rapporte

Impossible de charger Hello en tant que lexer ou analyseur.

Je recherche des informations sur Google, mais je ne parviens toujours pas à comprendre ce qui s'est passé.

45
user3162707

Vous avez généré des fichiers source Java en exécutant ANTLR sur la grammaire, mais TestRig recherche des fichiers . Class compilés. Vous devez exécuter les fichiers Java compilateur sur les fichiers source avant d'utiliser TestRig.

34
Sam Harwell

J'ai eu exactement la même erreur sur Windows. Mon lot est défini comme ceci au début:

Java -cp "C:\ANTLR\antlr-4.4-complete.jar" org.antlr.v4.runtime.misc.TestRig %*

Il s'avère que tous mes compilés Hello*.class les fichiers se trouvent dans le dossier actuel et j'oublie d'inclure le current folder dans le -cp. Après je change en dessous. Ça marche. Notez le premier point dans le -cp.

Java -cp ".;C:\ANTLR\antlr-4.4-complete.jar" org.antlr.v4.runtime.misc.TestRig %*

23
smwikipedia

Après tout votre *.Java fichiers ont été générés et votre *.class fichiers ont été générés et votre %CLASSPATH% est défini correctement, sur la base de l'exemple de grammaire "Hello World", vous ne devriez pas voir cette erreur.

Si vous n'avez pas le "antlr-runtime-4.4.jar" dans votre %CLASSPATH% variable d'environnement et exécutez le code "grun" à partir du livre, vous recevrez cette erreur lorsque vous exécuterez votre analyseur généré en fonction de la grammaire que vous avez fournie.

%CLASSPATH% devrait être:

C:\libraries\antlr-4.4-complete.jar;C:\libraries\antlr-runtime-4.4.jar;

Entrez l'entrée après avoir entré cette commande. Comme "bonjour parrt" dans l'exemple de livre. Entrez ensuite CTRL+Z (sous Windows) pour terminer l'entrée, ou CTRL+D (sous Unix).

3
MacGyver

Afin de faire cela correctement, je vais supposer que vous avez installé un JDK et ajouté à votre variable PATH système.

Dans ce cas, vous aurez besoin de deux fichiers batch pour vous aider.

antlr4.bat:

Java -cp antlr-4.2-complete.jar org.antlr.v4.Tool %*

grun.bat:

Java -cp .;antlr-4.2-complete.jar org.antlr.v4.runtime.misc.TestRig %*

Cela suppose également que vous disposez du antlr-4.2-complete.jar dans le répertoire courant. Au-delà, suivez simplement les instructions du guide de démarrage .

Notez que j'ai utilisé le -cp flag car, sur Windows 7, je ne vois pas de variable CLASSPATH.

1
Forest Kunecke

Vous avez besoin du fichier jar Antlr et des fichiers .bat dans votre CLASSPATH. Je sais parce que j'avais exactement le même problème.

Windows

Accédez au menu Démarrer et recherchez Environment Variables et vous trouverez Set Environment Variables for Users ou quelque chose comme ça. Il devrait y avoir une section intitulée Variables for all Users. Si tu vois %CLASSPATH%, cliquez dessus, puis cliquez sur le bouton edit sous cette case. Accédez à la fin de la liste et ajoutez C:\**PATH TO JAR FILE**\antlr-X.X-complete.jar; jusqu'à la fin. Répétez cela avec le chemin d'accès à chacun des fichiers .bat. Si vous ne voyez pas %CLASSPATH%, puis sous la boîte, cliquez sur le bouton qui dit ajouter et ajoutez %CLASSPATH%, et effectuez le même processus.

[~ # ~] osx [~ # ~]

Je ne connais pas aussi bien OSX et le système de stockage, mais vous pouvez faire export CLASSPATH="/Users/**USER**/**PATH TO JAR FILE**/antlr-X.X-complete.jar:$CLASSPATH" dans le terminal. Répétez, mais avec les chemins d'accès à chacun des fichiers .bat. J'espère aussi simple que cela. Faites-moi savoir si c'est faux, car comme je l'ai dit plus haut, OSX n'est pas mon point fort. Vous pouvez également consulter cette question sur StackOverflow: Comment puis-je ajouter définitivement un chemin de classe à mon terminal Mac?

J'ai ajouté des instructions OSX juste au cas où quelqu'un d'autre aurait ce problème, mais sur OSX! :)

AUSSI: Remplacez les X dans antlr-X.X-complete.jar avec le numéro de version, ou faites-en simplement le nom du fichier jar. Tout ce qui fait flotter votre bateau.

1
James Lynch