我在同一種編程語言的一些方言之間編寫了一個轉換器。我在網上發現了一個語法 - 它很複雜,可以處理所有的情況。現在我正在嘗試寫出適當的操作。ANTLR中的寫入語言轉換器
大部分輸入只是要重寫輸出。我需要做的是解析函數調用,執行我的魔術(重命名函數,重新排序參數等)並寫入它。
我使用AST作爲輸出。當我遇到一個函數調用時,我構建了一個自定義對象結構(從我的目標語言中定義的類),調用相應的函數,並且我有一個字符串表示我想要獲得的轉換後的函數。
問題是,我應該用這個字符串做什麼?我想替換封閉規則的.text屬性,但setText()僅適用於詞法分析器規則,規則的.text屬性是隻讀的。如何解決這個問題呢?
program
: statement_list { output = $statement_list.text; }
;
//...
statement
: expression_statement
// ...
;
expression_statement
: function_call
// ...
;
function_call
: ID '(' { /* build the object, assign name */
Function function = new Function();
//...
}
(
arg1 = expression { /* add first parameter */ }
(',' arg2 = expression { /* add the rest of parameters */ }
)*
)?
')' { /* convert the function call */
string converted = Tools.Convert(function);
// $setText(converted); // doesn't work
// $functionCall.text = converted; // doesn't work
}
;
的ANTLRMorph項目是在http://www.antlr.org/wiki/display/Morph/Home;jsessionid=1EE0150D66C1B50451B202AD44D74134 我們的目標是能夠prople以ASF-SDF的精神編寫具有具體語法重寫規則的翻譯員。 順便說一下,ASF-SDF(http://www.meta-environment.org/)確實應該考慮寫這樣的翻譯。 – tonio 2010-03-24 14:38:07