java - 从 Java 应用程序中运行 ANTRL TestRig GUI

标签 java eclipse antlr antlr4

我知道可以通过终端使用 ANTLR 的 TestRig“grun”生成解析树的图形表示:

$ alias grun='java org.antlr.v4.runtime.misc.TestRig'​​
$ grun Example test -gui
hello world
​​​​E​O​F​​​​

但是是否可以从 Java 应用程序中调用 TestRig?我想利用 TestRig 功能来制作一个 Java 应用程序,该应用程序接受用户输入并显示生成的解析 TreeMap 形表示。

我已经尝试过以下操作:

import org.antlr.v4.runtime.misc.TestRig;
...
TestRig test = new TestRig(args);
test.process();

但是我收到了这条消息:

Can't load Example as lexer or parser

它看起来应该可以工作,因为它正确识别了我在 Eclipse 上设置的参数Example test -gui,但 TestRig 似乎无法找到语法。

如何正确设置参数?如果这不可能,是否有其他方法可以在 Java 应用程序中运行 ANTLR 的 TestRig?

最佳答案

好的,我已经解决了我的问题。通过查看TestRig类的源代码,我发现我只需要使用inspect()方法来生成GUI View 。下面是一个示例代码:

// 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);

关于java - 从 Java 应用程序中运行 ANTRL TestRig GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29353114/

相关文章:

java - 用于SQL和性能的Grails 3.0日志记录和监视工具

java - JDBC准备好的语句/引用另一个准备好的语句中的准备好的语句

eclipse - 以编程方式打开 eclipse 编辑器

java - 使用递归将某个基数中的数字转换为十进制数

java - 用 Java 实现自由格式查询语言

javascript - Antlr4 Javascript 目标 - 访客问题和标记替代方案

java - 如何让JButton点击后不被选中?

java - 测试表的最大值时出错?

parameters - antlr 传递参数和语义谓词

java - 从数组中删除重复项(没有集合或排序)