跳轉至內容

ROSE 編譯器框架/概覽

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

瞭解 ROSE 是什麼至關重要,這樣您就可以決定它是否可以幫助您解決問題。

什麼是 ROSE

[編輯 | 編輯原始碼]

ROSE 是一個庫,為使用者提供訪問編譯器技術的途徑,這些技術以前對於非專家來說是不可獲得的。

什麼是編譯器技術?編譯器是將原始碼轉換為機器二進位制檔案的複雜軟體。編譯器開發人員已經建立了強大的技術來解析、分析、轉換和最佳化輸入原始碼。

傳統的編譯器,如 GCC,使用這些技術,但它們基本上對使用者不可用。然而,即使使用者在 gcc 中擁有這些功能,評估結果也會非常困難。使用者輸入原始碼,編譯器輸出機器程式碼。使用者可以訪問自己的程式碼,也許還可以訪問彙編級別的程式碼生成,但比較這兩個非常困難,因為涉及的程式碼生成不是為了清晰度,而是為了編譯器開發人員的需要。

但是,如果編譯器返回轉換後更改的忠實源程式碼表示呢?將原始原始碼轉換為轉換後的原始碼。一個源到源編譯器。

ROSE 是一個源到源編譯器。

ROSE 為使用者提供了編譯器技術的庫。它還為使用者提供了訪問原始碼分析構建塊的途徑,允許使用者建立自己的編譯器、分析器、翻譯器、預處理器等。

如果您正在尋找這種工具,請繼續深入維基瞭解更多關於 ROSE 的資訊。

如何使用它

[編輯 | 編輯原始碼]

ROSE 的一個典型用例是

  • 輸入:您有原始碼作為輸入,例如 myfile.c
  • 您的基於 ROSE 的翻譯器/分析器/編譯器/工具:myTranslator.cpp
    • 首先,您呼叫 ROSE 提供的 frontend() 函式來生成輸入的中間表示(IR 或抽象語法樹/AST 以準確地講)
    • 然後,您呼叫並組合 ROSE 提供的其他 AST 分析/轉換/最佳化函式來分析或轉換 AST
    • 最後,您呼叫 ROSE 提供的 backend() 函式來將分析和/或轉換後的 AST 反解析為原始碼,並可以選擇呼叫後端編譯器(例如 GCC)來生成目的碼。
  • 輸出:反解析後的原始碼,命名為 rose_myfile.c,以及可選地從它生成的obj檔案 myfile.o

要成為一名高效的 ROSE 開發人員,您需要

  • 熟悉輸入程式碼的 AST,因為您必須編寫程式碼來遍歷樹、找到您感興趣的內容,並最終對 AST 進行分析和轉換
  • 熟悉 ROSE 提供的函式。您知道的函式越多,您完成工作的速度就越快,因為您可以儘可能避免重複造輪子。

瞭解了全域性概念後,您可以閱讀 ROSE 的文件,瞭解如何使用它。

華夏公益教科書