ANTLR produit-il une erreur lors de l'analyse de la chaîne d'entrée ?test
avec la grammaire que vous avez publiée. Comme c'est généralement le cas, l'erreur réside dans l'utilisation de l'outil autour d'ANTLR (je le vois aussi avec ANTLRWorks, malheureusement!).
Pour tester vous-même (correctement), créez un fichier Test.g
:
grammar Test;
test : WORD+;
WORD : ('a'..'z')+;
WS : ' '+ {$channel = HIDDEN;};
et un fichier Main.java
:
import org.antlr.runtime.*;
public class Main {
public static void main(String[] args) throws Exception {
ANTLRStringStream in = new ANTLRStringStream("?test");
TestLexer lexer = new TestLexer(in);
CommonTokenStream tokens = new CommonTokenStream(lexer);
TestParser parser = new TestParser(tokens);
parser.test();
}
}
et télécharger une copie du ANTLR 3.2 JAR dans le même répertoire.
maintenant générer un analyseur lexer &:
java -cp antlr-3.2.jar org.antlr.Tool Test.g
compiler tous les fichiers source Java:
javac -cp antlr-3.2.jar *.java
et exécuter la classe principale:
java -cp .:antlr-3.2.jar Main
(remplacer le :
avec ;
si vous êtes sous Windows)
qui produira le message d'erreur suivant:
line 1:0 no viable alternative at character '?'
Je pensais aussi que. Êtes-vous sûr ? Êtes-vous en train de dire que "? Test" est analysé comme un jeton WORD? – leonbloy
Oui, c'est ce qui se passe. J'utilise l'IDE antlr3 pour eclipse pour le tester ... –