ANTLR解析器挂在proxy.handshake调用

时间:2009-11-24 20:28:53

标签: parsing antlr antlr3 parser-generator ecma262

我试图让一个基本的ECMAScript解析器工作,并为ECMAScript 3找到一个完整的ANTLR语法,它似乎编译好并生成相应的Lexer / Parser / Walker Java文件。
(在Eclipse {3.5}中运行ANTLR IDE plugin

然而,当实际尝试将它与一些简单的测试代码一起使用时(在guide on ANTLR wiki之后),它只是在尝试创建解析器时挂起:

CharStream MyChars = new ANTLRFileStream(FileName); // FileName is valid
ES3Lexer MyLexer = new ES3Lexer(MyChars);
CommonTokenStream MyTokens = new CommonTokenStream(MyLexer);
MyTokens.setTokenSource(MyLexer);
ES3Parser MyParser = new ES3Parser( MyTokens ); // hangs here
ES3Parser.program_return MyReturn = MyParser.program();

我已经将问题追溯到ES3Parser构造函数中,它正在调用函数proxy.handshake() - 在此行之前我可以成功执行System.out.println("text")但在此之后我什么都没得到。

那么,我该如何找到它为什么会挂起并停止它 - 或者甚至绕过这一部分(可以/我应该禁用调试吗?) - 只要这样就可以让它工作并让我继续做有用的东西。

2 个答案:

答案 0 :(得分:4)

Antlr中有一个-debug选项,可以生成额外的代码,允许进行远程调试。当代码暂停

dbg.Handshake();

调用,它正在等待远程调试器连接到它。在AntlrWorks中,您可以使用Run - >远程调试选项,用于连接到它并逐步执行代码。

如果您不想使用远程调试功能,请从ANTLR选项文本框中删除-debug选项。

档案 - >偏好 - >一般 - > ANTLR选项

答案 1 :(得分:2)

我通过在ANTLR IDE插件中禁用调试代码的生成来解决这个问题。

此设置在Windows>下;偏好> ANTLR>代码生成。

展开“常规”部分并取消勾选调试选项:

https://www.bpsite.net/misc/eclipse-antlr-debug.png
(来源:bpsite.net