Antlr4 4.9.2调用TestRig生成语法树报ClassCastException问题求助
问题原因
你的报错是TestRig命令参数传错导致的,两个核心错误点:
- TestRig第一个参数要求传入ANTLR生成的语法解析器前缀,你使用官方Java8语法生成的解析器前缀是
Java8,你填了目标测试类名Test2,导致TestRig尝试将你写的普通Test2类强转为ANTLR Parser类,触发ClassCastException。 - TestRig第二个参数要求传入语法的起始规则名,官方Java8语法的根规则为
compilationUnit,你填写的r不是有效规则名。
正确操作方案
你之前生成、编译Java8词法/语法分析器的步骤完全正确,无需修改,按以下步骤调整后续操作即可:
- 不需要提前编译
Test2.java,TestRig直接读取源代码文本解析,不需要编译为class文件。 - 执行如下命令即可输出Test2.java的语法树:
# Windows环境命令 java -cp ".;D:\lib\antlr\antlr-4.9.2-complete.jar" org.antlr.v4.gui.TestRig Java8 compilationUnit Test2.java -tree
如果需要弹出可视化窗口展示语法树,将末尾的-tree参数替换为-gui即可。
Ubuntu环境适配
只需要将类路径分隔符从分号改为冒号即可,命令示例:
# Ubuntu环境命令 java -cp ".:/你的antlrjar包存放路径/antlr-4.9.2-complete.jar" org.antlr.v4.gui.TestRig Java8 compilationUnit Test2.java -tree
内容的提问来源于stack exchange,提问作者Jin Hc
相关产品推荐
相关产品推荐

