我很可能有一个愚蠢的问题,并且可能在错误的论坛上提问,但不知道该去哪里。好的,我通过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 .
也就是说,该程序并不完整,并且(除了另一个研究项目)可能无法满足您的需求。