我可以使用什么正则表达式来修复这个非标准的Fortran语法?



我有一堆使用非标准结构符号的Fortran 77文件(在这里描述):

STRUCTURE /item/
   INTEGER id
   CHARACTER(LEN=200) description
   REAL price
END STRUCTURE

这显然是一些旧编译器使用的语法,但后来在Fortran 90中标准化为:

TYPE item
   INTEGER id
   CHARACTER(LEN=200) description
   REAL price
END TYPE

我想做的是使用sed或其他适当的工具来自动处理我的源文件,以找到旧语法的所有用途,并修补它们以使用更新的语法(即将"结构"的所有实例更改为"类型"并删除斜杠)。我确信我可以建立一些正则表达式集来做到这一点,但我在这方面还不够熟练,无法开始。

另一方面,与记录符号也有类似的不兼容性,也在链接中描述:

RECORD /item/ pear, store_catalog(100)

就变成:

TYPE(item) pear, store_catalog(100)

我认为类似的技术也可以用来修复这些实例。

我不太熟悉Fortran语法所以我不知道如何概括这个,但是你的例子可以用

来解决
sed 's%^STRUCTURE /(.*)/$%TYPE 1%;
     s%^END STRUCTURE$%END TYPE%'

注意使用%分隔命令(s, substitute)、pattern和replacement。通常您会使用/,但这是要匹配的模式的一部分。

您的RECORD问题确实应该有类似的解决方案。

最新更新