ANTLR 解析器挂在 proxy.handshake 调用上
-
22-09-2019 - |
题
我正在尝试让基本的 ECMAScript 解析器工作,并找到了完整的 ANTLR 语法 ECMAScript 3, ,它似乎编译正常并生成适当的 Lexer/Parser/Walker Java 文件。
(跑进里面 ANTLR IDE 插件 对于 Eclipse 3.5)
然而,当实际尝试将它与一些简单的测试代码一起使用时(以下 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
我通过在 ANTLR IDE 插件中禁用调试代码的生成解决了这个问题。
此设置位于 Windows > Preferences > ANTLR > Code Generation 下。
展开常规部分并取消选中调试选项:
(来源: bpsite.net)
其他提示
Antlr 中有一个 -debug 选项,可以生成额外的代码,从而允许远程调试。当代码暂停时
dbg.Handshake();
调用时,它正在等待远程调试器连接到它。在 AntlrWorks 中,您可以使用“运行”-->“远程调试”选项连接到它并单步调试代码。
如果您不想使用远程调试功能,请从 ANTLR 选项文本框中删除 -debug 选项。
文件 --> 首选项 --> 常规 --> ANTLR 选项
不隶属于 StackOverflow