跳轉到內容

ROSE 編譯器框架/如何建立跨語言翻譯器

來自華夏公益教科書,開放的書籍,開放的世界

在本 HOW-TO 中,將介紹生成跨語言翻譯器的步驟。我們將使用 Fortran 到 C 的翻譯器作為示例。

更改原始檔資訊

[編輯 | 編輯原始碼]
  • 更改輸出檔名。字尾名需要使用以下函式更改。
void SgFile::set_unparse_output_filename (std::string unparse_output_filename ) 
  • 更改輸出語言型別。
void SgFile::set_outputLanguage(SgFile::outputLanguageOption_enum outputLanguage) 	
  • 將輸出設定為僅目標語言。
 We use set_C_only for the Fortran to C translation.  This process might be optional.
void SgFile::set_C_only(bool C_only)

識別語言相關的 AST 節點

[編輯 | 編輯原始碼]
  • 例如,ROSE AST 使用不同的 AST 節點來表示 C 和 Fortran 中的迴圈。下圖顯示了不同語言中的相同迴圈。
C 使用 SgForStatement 表示 for 迴圈。
C SgForStatement
Fortran 使用 SgFortranDo 表示 do 迴圈。
Fortran SgFortranDo

實現翻譯函式

[編輯 | 編輯原始碼]
  • 使用 wholeAST 作為參考來實現翻譯函式。
  • 從原始 AST 節點複製所需資訊,生成新的 AST 節點。
  • 刪除原始節點,並確保 AST 中的父/子關係設定正確。

測試輸出程式碼

[編輯 | 編輯原始碼]
  • 如果編譯器可用以測試輸出程式碼,則執行後端使用後端編譯器生成物件。
  • 如果目標語言的編譯器不可用,則確保可以從測試用例生成輸出程式碼。建議對所有測試輸出執行編譯測試。
華夏公益教科書