Antlr4: Hallo Beispiel funktioniert nicht unter Windows, nachdem es in separate Lexer und Parser aufgeteilt wurde

Erstellt am 16. Juli 2013  ·  3Kommentare  ·  Quelle: antlr/antlr4

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):
image

Alle 3 Kommentare

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.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen