加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – 正则表达式匹配,用于删除句点字符的某些用法

发布时间:2020-12-14 05:58:06 所属栏目:百科 来源:网络整理
导读:我有一些Fortran 77源文件,我试图从非标准的STRUCTURE和RECORD语法转换为标准化的Fortran 90 TYPE语法.这方面的一个棘手问题是结构成员的不同处理方式. 非标: s.member = 1 标准: s%member = 1 因此,我需要在这些场景中捕获句点的所有用法,并用%字符替换
我有一些Fortran 77源文件,我试图从非标准的STRUCTURE和RECORD语法转换为标准化的Fortran 90 TYPE语法.这方面的一个棘手问题是结构成员的不同处理方式.

非标:

s.member = 1

标准:

s%member = 1

因此,我需要在这些场景中捕获句点的所有用法,并用%字符替换它们.还不错,除非您考虑可以使用句点的所有方式(数字中的小数点,包含语句中的文件名,注释中的标点符号,Fortran 77关系运算符,可能还有其他).我已经做了一些预处理来修复关系运算符以使用Fortran 90符号,我并不真正关心修改注释的语法,但我还没有想出一个很好的方法来翻译它.对于上述情况,为%.看起来我应该能够用sed做到这一点,但我不确定如何匹配我需要修复的实例.这是我想到的规则:

在逐行的基础上:

>如果该行以< whitespace> include开头,那么我们不应对该行做任何事情;将它传递给输出,所以我们不会搞乱include语句中的文件名.
>以下字符串是没有符号等价物的运算符,因此必须保留它们:.not. .和. .要么. .eqv. .neqv.
>否则,如果我们找到一个被2个非数字字符包围的句点(因此它不是小数点),那么它应该是我想要替换的运算符.将该期间更改为%.

我自己不是本土的Fortran演讲者,所以这里有一些例子:

include 'file.inc'        ! We don't want to do anything here. The line can
                          ! begin with some amount of whitespace

if x == 1 .or. y > 2.0    ! In this case,we don't want to touch the periods that
                          ! are part of the logical operator ".or.". We also don't
                          ! want to touch the period that is the decimal point 
                          ! in "2.0".
if a.member < 4.0 .and. b.othermember == 1.0 ! We don't want to touch the periods
                                             ! inside the numbers,but we need to
                                             ! change the "a." and "b." to "a%"
                                             ! and "b%".

有什么好方法可以解决这个问题吗?

编辑:我实际上发现了一些其他运算符,其中包含一个没有符号等价物的点.我已经更新了上面的规则列表.

解决方法

你不能用正则表达式做到这一点,并不是那么容易.

如果我必须做你必须做的事情,我可能会手工完成,除非代码库很大.如果前者适用,首先将所有[a-zA-Z0-9].[a-zA-Z]替换为非常奇怪的东西,保证永远不会编译,如“@ WHATEVER @”,然后继续搜索所有这些手动控制后手动更换.

如果代码量很大,那么你需要编写一个解析器.我建议你使用python来标记基本的fortran结构,但请记住fortran不是一种易于解析的语言.按“每个例程”工作,并尝试查找所有使用的变量名称,将它们用作过滤器.如果您遇到类似a.whatever的内容,并且您知道a位于本地或全局变量列表中,请应用更改.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读