Ich hatte die gleichen Probleme wie in dieser Ausgabe: https://github.com/antlr/antlr4/issues/147 und der Fix hat auch bei mir funktioniert.
Ich habe dann versucht, den Lexer vom Parser zu trennen, und erhalte eine Ausnahme, wenn ich versuche, das TestRig auszuführen.
Datei 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
Datei HelloP.g4:
// Define a grammar called Hello
parser grammar HelloP;
options { tokenVocab=HelloL; }
r : Hello ID ; // match keyword hello followed by an identifier
Ich führe dann diese Befehle aus:
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
Ich bekomme dann diese Ausnahme:
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)
Inhalt von sample.txt
hello parrt
Dies ist der Inhalt des Ordners, in dem ich arbeite (die Batch-Dateien enthalten im Wesentlichen die obigen Befehle - ich habe es aber auch direkt in der Shell getestet):
Versuchen
java -cp .;antlr-4.1-complete.jar org.antlr.v4.runtime.misc.TestRig Hallo r -tree sample.txt
ohne P.
Ter
Ich fürchte, es hat nicht funktioniert:
Can't load Hello as lexer or parser
Da ich die Datei "Hello.g4" in "HelloL.g4" (Lexer) "HelloP.g4" (Parser) aufgeteilt habe
es gibt keine kombinierte Grammatik "Hello" mehr, sondern nur noch einen Lexer (HelloL) und einen Parser (HelloP).
Oh, richtig. Machen Sie HelloLexer und HelloParser als Namen Ihrer Elemente, einschließlich der Dateinamen. bitte hier keine fragen posten.