【问题标题】:ANTLR parser hanging at proxy.handshake callANTLR 解析器挂在 proxy.handshake 调用
【发布时间】:2010-12-20 01:07:39
【问题描述】:

我正在尝试让一个基本的 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") 但之后我什么也得不到。

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

【问题讨论】:

    标签: parsing antlr antlr3 parser-generator ecma262


    【解决方案1】:

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

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

    展开常规部分并取消选中调试选项:


    (来源:bpsite.net

    【讨论】:

      【解决方案2】:

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

      上暂停时
      dbg.Handshake();
      

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

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

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

      【讨论】:

        猜你喜欢
        • 2011-01-20
        • 2018-05-09
        • 1970-01-01
        • 1970-01-01
        • 2012-05-31
        • 1970-01-01
        • 2012-04-21
        • 2014-01-18
        • 1970-01-01
        相关资源
        最近更新 更多