
我很可能有一個愚蠢的問題,並且可能在錯誤的論壇上提問,但不知道該去哪裡。好的,我透過ratfor90使用gfortran(它是gfortran和fortran90的一個很好的小預處理器,它非常簡單,看起來像C,並且是為像我這樣的低生活者開發的..... .)你寫了一個非常短的ratfor90 ,然後它被翻譯成完整的gfortran 代碼,然後計算從那裡開始...我的問題:是否有一個“逆”翻譯器,可以接受完整的gfortran 代碼並將其翻譯為更短且易於閱讀的ratfor90 文件?
(以防萬一——我的電腦是 Dell Precision M、ubuntu 14.04、KDE 環境...)
答案1
有人可能已經將其作為一個研究項目來完成,但是
- 這就像一個反編譯器(沒有太多要討論的),並且
- ratfor 一開始就沒有很多開發人員。
也就是說,我在該地區看到的所有東西都是舊的(鑑於提到的兩點,這是預期的):
- 逆向編譯技術,Cristina Cifuentes,1994,提到了 BS Baker 中描述的一個程序。 一種構造流程圖的演算法。 ACM 雜誌,24(1):98–120,1977 年 1 月。
Baker[Bak77]提出了一種將流程圖建構成等效流程圖的演算法,該演算法使用以下控制結構:if..then..else、多層break、多層next和無限迴圈。每當無法使用先前的結構構建圖時,就會使用 Goto。該演算法也被擴展到不可約圖。事實證明,演算法產生了格式良好且正確嵌套的程序,並且最終圖中的任何 goto 語句都會向前跳躍。該演算法被實現在
struct
在 Unix 下運行的 PDP11/54 上的程式。它被用來將 Fortran 程式重寫為 Ratfor,這是一種利用控制結構的擴展 Fortran 語言。 struct 程式後來被 J.Reuter 在decomp
反編譯器從帶有符號資訊的目標檔案建立結構圖。 - 有關反組譯器/反編譯器的協助,1990 年的 usenet 線程,Mark William Hopkin 的評論說
有一個標準的 UNIX 實用程式(至少對於我們正在運行的 4.3 bsd 而言)可以執行以下操作:
"struct"
。此實用程式採用標準 Fortran-77 程式並從中產生 Ratfor 程式碼。 Ratfor 是一個「合理化」的 Fortran,包括所有源自 Algol 的控制結構。
正如您所看到的,兩人都評論了 20 世紀 70 年代的同一節目。關於 4.3BSD 的評論表明您可以在網上找到它的源代碼。我發現手冊頁的結論如下:
BUGS
Struct knows Fortran 66 syntax, but not full Fortran 77.
If an input Fortran program contains identifiers which are reserved
words in Ratfor, the structured version of the program will not be a
valid Ratfor program.
The labels generated cannot go above 32767.
If you get a goto without a target, try −e .
也就是說,該程序並不完整,並且(除了另一個研究項目)可能無法滿足您的需求。