我需要爲具有前向引用的語言創建語法。我認爲最簡單的方法是在生成的AST上進行幾次傳遞,但我需要一種方法在樹中存儲符號信息。ANTLR前向引用
現在我的分析器正確地生成一個AST並計算變量和函數定義的範圍。問題是,我不知道如何將範圍信息保存到樹中。
片段我的語法:
composite_instruction
scope JScope;
@init {
$JScope::symbols = new ArrayList();
$JScope::name = "level "+ $JScope.size();
}
@after {
System.out.println("code block scope " +$JScope::name + " = " + $JScope::symbols);
}
: '{' instruction* '}' -> ^(INSTRUCTION_LIST instruction*)
;
我願把目前的範圍參考成一棵樹,是這樣的:
: '{' instruction* '}' -> ^(INSTRUCTION_LIST instruction* {$JScope::symbols})
它甚至有可能?有沒有其他方法可以將當前範圍存儲在生成的樹中?我可以在樹語法中生成範圍信息,但它不會改變任何東西,因爲我仍然需要將它存儲在樹上的第二遍。
不[此Q&A](HTTP:/ /stackoverflow.com/questions/4075510/how-to-implement-a-function-call-with-antlr-so-那可以稱爲 - 甚至在之前)幫助? – 2010-11-18 00:14:00