我有一个单独的解析器和词法分析器语法,想运行org.antlr.v4.gui.TestRig
来调试/测试我的语法。
我的词法分析器语法始于:
lexer grammar TestLexer;
IDS: [a-zA-Z];
WS: [ \t];
NL: [\r?\n];
...
我的解析器语法以:
parser grammar TestParser;
options { tokenVocab=TestLexer; }
testRule: WS* IDS+ NL;
...
我的类路径env变量指向完整的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
,缺少什么?
答案 0 :(得分:0)
使用分离的词法分析器和解析器时,必须为词法分析器和解析器生成代码。仅通过为解析器生成代码不会自动完成此操作。
执行:
antlr TestLexer.g4
antlr TestParser.g4
javac *.java
为(词法分析器和解析器)生成代码后,必须运行:
grun Test -gui testInput.txt
其中testInput.txt
包含一些要解析的测试输入。
注意::使用分离的词法分析器和解析器时,期望词法分析器以Lexer
结尾,解析器以Parser
结尾。文件的共同部分是语法名称。
即TestLexer
和TestParser
-> Test
是语法的名称。