parsing - ANTLR 解析器卡在 proxy.handshake 调用上

标签 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") 但之后我什么也没得到。

那么,我该如何找出它挂起的原因并停止它 - 或者甚至只是绕过这一部分(我可以/应该禁用调试吗?) - 只要它可以正常工作并允许我继续使用做有用的事情。

最佳答案

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

dbg.Handshake();

调用,它正在等待远程调试器连接到它。在 AntlrWorks 中,您可以使用“运行”-->“远程调试”选项连接到它并单步调试代码。

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

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

关于parsing - ANTLR 解析器卡在 proxy.handshake 调用上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1792716/

相关文章:

antlr - 从解析树中排除某些标记

java - 变量的 ANTLR 语法

r - 当有下标时从公式中提取变量

java - 为什么我的 Java ANTLR 语法文件没有编译?

c - 解析 C 中的整数行

antlr - 如何使用 Java System.out.println 在解析器中直接生成 XML

java - 语法谓词+树运算符

java - ANTLR 生成无效的 Java 异常抛出代码

python - Python中的Perl兼容正则表达式(PCRE)

C:将字符串解析为键值对