代码之家  ›  专栏  ›  技术社区  ›  Peter Boughton

ANTLR解析器在proxy.handshake调用时挂起

  •  4
  • Peter Boughton  · 技术社区  · 15 年前

    我正试图让一个基本的ECMAScript解析器工作,并为它找到了一个完整的ANTLR语法 ECMAScript 3 ,它看起来编译正常,并生成相应的Lexer/Parser/Walker Java文件。
    ANTLR IDE plugin 适用于Eclipse 3.5)

    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 回复  |  直到 14 年前
        1
  •  4
  •   probably at the beach    14 年前

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

    dbg.Handshake();
    

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

    文件-->首选项-->一般-->ANTLR选项

        2
  •  2
  •   Glorfindel DataWraith    5 年前

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

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

    https://www.bpsite.net/misc/eclipse-antlr-debug.png
    bpsite.net )