ANTLR вызывает ошибку при разборе входной строки ?test
с размещенной вами грамматикой. Как обычно бывает, ошибка связана с инструментом, используемым вокруг ANTLR (я вижу, что это часто случается и с ANTLRWorks, к сожалению!)
Чтобы проверить это самостоятельно (правильно), создайте файл Test.g
:
grammar Test;
test : WORD+;
WORD : ('a'..'z')+;
WS : ' '+ {$channel = HIDDEN;};
и файл 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();
}
}
и загрузите копию JAR ANTLR 3.2 в том же каталоге.
Теперь сгенерируйте лексер и парсер:
java -cp antlr-3.2.jar org.antlr.Tool Test.g
скомпилировать все исходные файлы Java:
javac -cp antlr-3.2.jar *.java
и запустить основной класс:
java -cp .:antlr-3.2.jar Main
(замените :
на ;
, если вы используете Windows!)
, который выдаст следующее сообщение об ошибке:
line 1:0 no viable alternative at character '?'