运行 分离语法器和词法分析器上的 `TestRig` 导致 `java.lang.ClassCastException` 或 `Can't load Test as lexer or parser`
Running `TestRig` on separated grammer and lexer results in `java.lang.ClassCastException` or `Can't load Test as lexer or parser`
我有一个单独的解析器和词法分析器语法,想要 运行 org.antlr.v4.gui.TestRig
到 debug/test 我的语法。
我的词法分析器语法开始于:
lexer grammar TestLexer;
IDS: [a-zA-Z];
WS: [ \t];
NL: [\r?\n];
...
我的解析器语法以:
开头
parser grammar TestParser;
options { tokenVocab=TestLexer; }
testRule: WS* IDS+ NL;
...
我的类路径环境变量指向完成 antlr.jar
和当前目录。
antlr
是 java org.antlr.v4.Tool
的别名
grun
是 java org.antlr.v4.gui.TestRig
. 的别名
当我 运行 antlr TestParser.g4 && javac *.java
解析器代码生成并编译时。
当我 运行 grun TestParser testRule -gui
我得到错误:
Exception in thread "main" java.lang.ClassCastException: class TestParser
at java.lang.Class.asSubclass(Class.java:3404)
at org.antlr.v4.gui.TestRig.process(TestRig.java:135)
at org.antlr.v4.gui.TestRig.main(TestRig.java:119)
当我 运行 grun Test testRule -gui
我得到错误:
Can't load Test as lexer or parser
我在使用组合语法时没有任何问题。
为了 运行 TestRig
还缺少什么?
使用分离的词法分析器和解析器时,您必须为词法分析器和分析器生成代码。这不是通过单独为解析器生成代码自动完成的。
执行:
antlr TestLexer.g4
antlr TestParser.g4
javac *.java
为(词法分析器和解析器)生成代码后,您必须 运行:
grun Test -gui testInput.txt
其中 testInput.txt
包含一些要解析的测试输入。
注意: 当使用分离的词法分析器和解析器时,预计词法分析器结束于 Lexer
,而分析器结束于 Parser
。文件的共同部分是语法名称。
即 TestLexer
和 TestParser
-> Test
是语法的名称。
我有一个单独的解析器和词法分析器语法,想要 运行 org.antlr.v4.gui.TestRig
到 debug/test 我的语法。
我的词法分析器语法开始于:
lexer grammar TestLexer;
IDS: [a-zA-Z];
WS: [ \t];
NL: [\r?\n];
...
我的解析器语法以:
开头parser grammar TestParser;
options { tokenVocab=TestLexer; }
testRule: WS* IDS+ NL;
...
我的类路径环境变量指向完成 antlr.jar
和当前目录。
antlr
是java org.antlr.v4.Tool
的别名
grun
是java org.antlr.v4.gui.TestRig
. 的别名
当我 运行 antlr TestParser.g4 && javac *.java
解析器代码生成并编译时。
当我 运行 grun TestParser testRule -gui
我得到错误:
Exception in thread "main" java.lang.ClassCastException: class TestParser
at java.lang.Class.asSubclass(Class.java:3404)
at org.antlr.v4.gui.TestRig.process(TestRig.java:135)
at org.antlr.v4.gui.TestRig.main(TestRig.java:119)
当我 运行 grun Test testRule -gui
我得到错误:
Can't load Test as lexer or parser
我在使用组合语法时没有任何问题。
为了 运行 TestRig
还缺少什么?
使用分离的词法分析器和解析器时,您必须为词法分析器和分析器生成代码。这不是通过单独为解析器生成代码自动完成的。
执行:
antlr TestLexer.g4
antlr TestParser.g4
javac *.java
为(词法分析器和解析器)生成代码后,您必须 运行:
grun Test -gui testInput.txt
其中 testInput.txt
包含一些要解析的测试输入。
注意: 当使用分离的词法分析器和解析器时,预计词法分析器结束于 Lexer
,而分析器结束于 Parser
。文件的共同部分是语法名称。
即 TestLexer
和 TestParser
-> Test
是语法的名称。