Tive os mesmos problemas que neste problema: https://github.com/antlr/antlr4/issues/147 e a correção também funcionou para mim.
Em seguida, tentei separar o lexer do analisador e recebo uma exceção quando tento executar o TestRig.
arquivo HelloL.g4:
// Define a grammar called Hello
lexer grammar HelloL;
Hello : 'hello' ;
ID : [a-z]+ ; // match lower-case identifiers
WS : [ \t\r\n]+ -> skip ; // skip spaces, tabs, newlines
arquivo HelloP.g4:
// Define a grammar called Hello
parser grammar HelloP;
options { tokenVocab=HelloL; }
r : Hello ID ; // match keyword hello followed by an identifier
Em seguida, executo estes comandos:
java -cp .;antlr-4.1-complete.jar org.antlr.v4.Tool HelloL.g4
java -cp .;antlr-4.1-complete.jar org.antlr.v4.Tool HelloP.g4
javac -cp .;antlr-4.1-complete.jar Hello*.java
java -cp .;antlr-4.1-complete.jar org.antlr.v4.runtime.misc.TestRig HelloP r -tree sample.txt
Então, recebo esta exceção:
Exception in thread "main" java.lang.ClassCastException: class HelloP
at java.lang.Class.asSubclass(Unknown Source)
at org.antlr.v4.runtime.misc.TestRig.process(TestRig.java:159)
at org.antlr.v4.runtime.misc.TestRig.main(TestRig.java:143)
Conteúdo de sample.txt
hello parrt
Este é o conteúdo da pasta em que trabalho (os arquivos em lote contêm basicamente os comandos acima - mas também testei diretamente no shell):
Experimente
java -cp.; antlr-4.1-complete.jar org.antlr.v4.runtime.misc.TestRig Hello r -tree sample.txt
sem o P.
Ter
Receio que não funcionou:
Can't load Hello as lexer or parser
Já que dividi o arquivo "Hello.g4" em "HelloL.g4" (lexer) "HelloP.g4" (analisador)
não há mais uma gramática combinada "Hello", apenas um lexer (HelloL) e um analisador (HelloP).
Oh, certo. torne-o HelloLexer e HelloParser como os nomes dos seus itens, incluindo os nomes dos arquivos. por favor, não poste perguntas aqui.