4

我试图让一个基本的 ECMAScript 解析器工作,并为ECMAScript 3找到了一个完整的 ANTLR 语法,它似乎可以编译并生成适当的 Lexer/Parser/Walker Java 文件。
(在Eclipse 3.5 的ANTLR IDE 插件中运行)

但是,当实际尝试将它与一些简单的测试代码一起使用时(遵循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")但之后我什么也没得到。

那么,我该如何找出它为什么挂起并停止它——或者甚至只是绕过这一部分(我可以/应该禁用调试吗?)——只要它可以工作并让我继续做有用的事情.

4

2 回答 2

4

Antlr 中有一个 -debug 选项,它会导致生成额外的代码以进行远程调试。当代码在

dbg.Handshake();

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

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

文件 --> 首选项 --> 常规 --> ANTLR 选项

于 2010-03-23T02:57:06.697 回答
2

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

此设置位于 Windows > Preferences > ANTLR > Code Generation 下。

展开 General 部分并取消选中 debug 选项:

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

于 2009-11-27T19:57:17.210 回答