我知道可以通过终端使用ANTLR的TestRig“ grun”生成解析树的图形表示形式:
$ alias grun='java org.antlr.v4.runtime.misc.TestRig'
$ grun Example test -gui
hello world
EOF
但是可以从Java应用程序中调用TestRig吗?我想利用TestRig功能来制作一个Java应用程序,该应用程序接受用户输入并显示生成的解析树图形表示。
我已经尝试了以下方法:
import org.antlr.v4.runtime.misc.TestRig;
...
TestRig test = new TestRig(args);
test.process();
但是我得到了这个信息:
无法将示例加载为词法分析器或解析器
它看起来应该起作用,因为它可以正确识别我在Eclipse上设置的参数
Example test -gui
,但是TestRig似乎无法找到语法。如何正确设置参数?如果不可能,还有其他方法可以在Java应用程序中运行ANTLR的TestRig吗?
最佳答案
好的,我已经解决了我的问题。通过查看TestRig类的源代码,我发现我只需要使用inspect()方法来生成GUI视图。这是一个示例代码:
// Create an input stream that receives text from the terminal
ANTLRInputStream input = new ANTLRInputStream(System.in);
// Create an Lexer that receives the char stream
ExampleLexer lexer = new ExampleLexer(input);
// Create a token stream from the lexer
CommonTokenStream tokens = new CommonTokenStream(lexer);
// Create a parser that receives the token stream
ExampleParser parser = new ExampleParser(tokens);
// Create a parser tree starting from the first rule
TestContext tree = parser.test();
//Generates the GUI
tree.inspect(parser);
编辑:至于版本4.5.1,生成树的代码更改为此:
//Generates the GUI
Trees.inspect(tree, parser);