自动确定自由格式与定型格式Fortran代码的区别

3

我需要知道,对于一个公共领域的软件包,如果给定的Fortran代码没有固定格式的代码,但不幸的是不能使用扩展名来确定。是否有可靠的方法来解决这个问题/是否有示例代码可以解决这个问题?


我不确定我理解你的问题... 你想自动确定它,也就是说,不通过(手动)查看代码来确定吗? - Alexander Vogt
是的,我必须自动确定它。 - albert
我不知道有什么快速简便的解决方案... 我会尝试两件事情:将其编译为自由格式,如果失败了,则使用固定格式(您可以为每个文件编写脚本)。或者,您可以编写一个检查源代码的脚本,例如第一列是否符合固定格式,以及行是否超过72列。如果失败了,那就是自由格式。 - Alexander Vogt
我不能使用编译器,我需要它在一个文档系统中,该系统尝试进行自己的解析。你提供的第二个解决方案是我正在寻找的,但我还没有找到可靠的方法来实现这一点。仅仅检查第一列和/或长度为72是不够的。 - albert
Fortran代码可以同时是有效的自由源格式和有效的固定源格式 - Cray将其称为“可移植源格式”http://docs.cray.com/books/007-3692-005/html-007-3692-005/hu2ulchri.html。 - Fortranner
2个回答

3

您需要编写自己的程序/脚本来检查表单。

第72列之前是否有&字符,且不在字符串内?-> 自由格式

在注释以外的第一列是否有非数字字符? -> 自由格式

还有其他可能性,但它们通常必须能够决定语句是否有效,这更加困难:

在自由格式中,判断列中的字符是继续字符还是语句的一部分。

在固定格式中,判断第一列中的非!字符是注释还是有效语句。

可能存在既符合固定格式又符合自由格式的文件,但这不应该是问题。


1
感谢您的建议。规则:“在第一列中,非!是否用作注释符号?->固定形式”不适用,例如单词“CHARACTER”可以在第一列中开始。 - albert
也许你可以看一下 这个 程序。它的作用是将 FORTRAN 代码转换为 Fortran 90 代码。那里应用的很多规则/转换可能对你的脚本有用! - Alexander Vogt
@Albert, 没错,这个应该在你需要对语句的有效性进行决定的组中。但是我写成了注释符号,而不是第一列中的任何非 ! 字符。 - Vladimir F Героям слава
我认为你需要同时查找注释和续行符,因为你很可能有一些既没有注释也没有续行符的情况。我认为查找 "c " 可以捕获绝大多数情况,最终你真的关心病态的例子吗? - agentp
&符号在固定格式源代码的第6列是有效的。我还要评论一下,有很多固定格式源代码超过了第72列,依赖于编译器选项来使其正常工作。 - Steve Lionel

0

Silverfrost FTN95使用的文件扩展名为:

.for, .f or .fix - fixed format
.f90 .f95 - free format

如果用户想要覆盖默认设置,他们可以使用命令行选项(也可以将其作为默认值打开或关闭)

您可以将这些扩展作为第一猜测,然后查看前几行并查看它们是否匹配


2
很遗憾,无法在此使用该扩展。 - Alexander Vogt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接