org.antlr.v4.runtime.misc.TestRig挂起

4
我正在尝试执行来自这里的ANTLRv4示例http://www.antlr.org/wiki/display/ANTLR4/Getting-Started-with-ANTLR-v4
我已经下载了antlr-4.0-complete.jar并将其放置在某个目录中。
我创建了bat文件来运行org.antlr.v4.Tool(antlr.bat)和org.antlr.v4.runtime.misc.TestRig(run.bat)。
Tool在没有参数的情况下运行并输出一些内容,所以路径没问题。
我创建了Hello.g4,其内容如下:
// Define a grammar called Hello
grammar Hello;
r  : 'hello' ID ;         // match keyword hello followed by an identifier
ID : [a-z]+ ;             // match lower-case identifiers
WS : [ \t\r\n]+ -> skip ; // skip spaces, tabs, newlines

除了 antlr-4.0-complete.jar 以外,一切都在同一个目录下。

然后我运行 antlr4 Hello.g4 ,没有出现错误。一些文件出现在当前目录下(*.java*.tokens)。没有出现 Hello.java 文件。

接着我运行 javac Hello*.java 进行编译。一些 *.class 文件出现。

之后我运行 run Hello r -tree ,它卡住了,没有任何错误信息。

操作系统为 Windows 8 x64。

Java 版本为 1.6 32 位。

如何运行 ANTLR 示例?

1个回答

5

哦,它在等待我从控制台输入!在示例中并不是很清楚。


你好,我很欣赏你几个月前发布的这篇文章:https://dev59.com/LnHYa4cB1Zd3GeqPPMH1但是当你说它在等待输入时?我似乎也遇到了同样的问题,但是我正在示例中键入输入:hello parrt ^D (r hello parrt)它仍然只是坐在那里等待着什么,我还尝试用^Z替换了^D。 你还记得你做了什么吗?它在等待特定的代码或其他东西吗? - Andy
1
如果你使用 java org.antlr.v4.runtime.misc.TestRig Hello r -tree 运行它,那么你应该输入一些内容,比如 "hello world",然后按下 ENTER 键,接着按下 Ctrl-Z 键,再次按下 ENTER 键。它会响应 (r hello world),这是所输入短语的语法解释。 - Suzan Cioc
1
你还可以使用java org.antlr.v4.runtime.misc.TestRig Hello r -gui运行它,然后输入我上面写的内容,它将通过在窗口中绘制语法结构来响应。 - Suzan Cioc
我最初也以为这个答案挂了,但后来遇到了另一个问题:在Cygwin上,Ctrl+Z可能无法工作。如果它打印出诸如“0 [sig] bash 963!sigpacket :: process:抑制信号18以win32进程(pid 18484)”,那么很可能是这种情况。我建议尝试使用文件而不是控制台输入来调用TestRig。文件输入在两个平台上都可以正常工作。(控制台输入在本机Windows cmd上也可以正常工作,谢谢。) - Tomáš Záluský

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接