gpt4 book ai didi

java - 在分离的语法器和词法分析器上运行 `TestRig` 会导致 `java.lang.ClassCastException` 或 `Can' t load Test as lexer or parser`

转载 作者:行者123 更新时间:2023-12-02 05:24:59 25 4
gpt4 key购买 nike

我有一个分离的解析器和词法分析器语法,想要运行 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;

...

我的类路径环境变量指向完整antlr.jar和当前目录。

  • antlrjava org.antlr.v4.Tool 的别名
  • grunjava 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 结束。文件的共同部分是语法名称。即 TestLexerTestParser -> Test 是语法的名称。

关于java - 在分离的语法器和词法分析器上运行 `TestRig` 会导致 `java.lang.ClassCastException` 或 `Can' t load Test as lexer or parser`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56239449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com