我在FORTRAN中有一个数值库(我相信FORTRAN IV),我想将它转换为Python代码。我想要真正的源代码,我可以在任何Python虚拟机上导入--- Windows,MacOS-X,Linux,Android。我手动开始这样做,但是库中有大约1000个例程,所以这不是一个合理的解决方案。
答案 0 :(得分:9)
编辑:添加了有关numpy的信息
此类工具适用于Fortran to Lisp,Fortran to C,甚至Fortran to Java。但是你永远不会有一个Fortran to Python工具,原因很简单:与Fortran,Lisp或C不同, Python没有GOTO [1]。 Fortran(尤其是Fortran IV)代码中有许多GOTO。即使Jacopini有一个定理表明你可以用结构化编程模拟GOTO,实现一个真实(高效)的语言转换工具实在太麻烦了。
因此,您不仅需要翻译1000个例程的代码,而且还需要理解每个算法及其所有重叠的getos,并在编写之前将算法转换为结构化程序它在Python中。祝你好运!
嘿,为什么你觉得包装好坏? Windows,OSX和Linux都有Fortran和C [2]编译器以及好的包装器!对于C(此处不是您的语言,但f2c可能是一个选项),有SWIG,Fortran已f2py,现已与numpy集成。 SWIG有一些support for Android。
顺便说一下,你可以使用numpy来代替转换为“纯粹的”Python:numpy功能类似于Fortran 90(参见比较here),所以你可以考虑首先将你的程序翻译成F90更顺畅的过渡。似乎还有一个Numpy on Adnroid。如果您在64位Windows上需要numpy,则有二进制文件here。
如果您决定使用包装器,gfortran将在Linux上运行(只需从分发包安装),Windows(MinGW)和Android。 如果你继续这一行,不要忘记编译FIV代码,因此通常存在“一次性循环”问题(通常编译器选项很好)。您可能还需要手动转换一些旧的非标准语句,这些语句在现代编译器中找不到。
显然,您还可以选择将项目语言切换为Lisp或Java ...
[1]您可能会问:但如果GOTO出现问题,那么Fortran to Java工具怎么样呢?好吧,它使用JVM的技巧,内部有GOTO instruction。 Python字节码中还有一个GOTO(查找JUMP here),因此可能需要在此处进行调查。所以我之前的陈述是错误的:可能是一个Fortran to Python工具,使用像Java这样的字节码技巧。但它仍然需要开发,好的库(如numpy,matplotlib,pandas ......)的可用性至少可以说是不必要的。
答案 1 :(得分:1)
我wrote a translator将Fortran的子集转换为Python(和其他几种语言)。它仅与Fortran的一小部分兼容,但我希望它仍然有用。
翻译器可以解析此Fortran函数:
LOGICAL function is_greater_than(a, b)
real,intent(in) :: a
real,intent(in) :: b
is_greater_than = a<b
end function is_greater_than
...并将其翻译为该Python函数:
def is_greater_than(a,b):
return a<b