我是ANTLR的初學者,我有它的創作者的2本書,我正在閱讀很多博客/論壇帖子,但似乎我只是不明白現在。如何在ANTLR中實現流量控制(*執行* if-else,for ... while ....)?
我能找到的所有語法代碼都是這樣的,而樹語法代碼就是這樣,但我無法理解一個控制流是如何完成的。
因爲我想,我不能把我的問題要問你不夠清楚,讓我這樣說:
能否請你告訴我一切必要的代碼,在傳遞給解析器
for (i=0; i!=3; i=i+1) {
if (i==2) print i;
else print "not 2";
}
將輸出:
not 2
not 2
2
最好在Java中。
編輯:我發現在code.google.com上託管的一個使用ANTLR的小項目,基於此,我明白了我的問題是多麼的愚蠢! :)
你所要求的是**很多**不僅僅是解析。你也要求編譯和執行。解析器將源代碼作爲輸入並生成AST(抽象語法樹)。它不運行代碼。 – 2011-04-29 21:04:47
格雷格,我的意思是詢問究竟是在哪裏發生,如果 - 其他和......發生,我不知道我是否必須在解析器中放置某些東西,或者它應該在我的訪問者中。 – name 2011-04-29 21:06:41
您可能不需要編譯和執行,但至少需要「解釋」程序以模擬程序語義的效果。 ANTLR讓你有一個解析和更多的努力,AST是撰寫這樣一位翻譯的重要基礎。在AST上編寫的口譯員通常不是很難,但ANTLR只是簡單地將AST交給你,讓你實現你想要的(一個解釋器或編譯器,只要你喜歡)。 – 2011-04-29 22:00:38