2009-11-24 77 views
4

我試圖獲得一個基本的ECMAScript解析器的工作,並發現一個完整的ANTLR語法爲ECMAScript 3,它似乎編譯好並生成適當的Lexer/Parser/Walker Java文件。ANTLR解析器掛在proxy.handshake調用

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(); 

我:

然而,在實際嘗試一些簡單的測試代碼中使用它(以下guide on ANTLR wiki)(適用於Eclipse 3.5中ANTLR IDE plugin運行),它只是試圖創建解析器時掛起我們已經將問題追蹤到ES3Parser的構造函數中,它在調用函數proxy.handshake() - 在此行之前,我可以成功執行System.out.println("text"),但在此之後,我什麼也得不到。所以,我該如何去找出它掛起的原因,並停止它 - 甚至只是繞過這一部分(可以/應該禁用調試?) - 只要它能讓它工作並允許我繼續下去做有用的東西。

回答

2

我通過在ANTLR IDE插件中禁止生成調試代碼來解決這個問題。

此設置位於Windows>首選項> ANTLR>代碼生成。

展開常規部分和勾去掉調試選項:

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

4

有一個在的Antlr導致額外的代碼來生成允許遠程調試-debug選項。當代碼暫停上的

dbg.Handshake(); 

呼叫,它正在等待遠程調試器連接到它。在AntlrWorks中,您可以使用「運行」 - >「遠程調試」選項連接到它並單步執行代碼。

如果您不希望使用遠程調試功能,請從ANTLR選項文本框中刪除-debug選項。

文件 - >首選項 - >常規 - > ANTLR選項