我正在开展一项研究项目,自动修改代码以包含高级数学概念(例如将随机效果添加到循环中或使用添加更高级物理模型的新函数封装现有函数)。
我向社区提出的问题是:是否有直接操作源代码的好工具?我想做的事情
我从不想实际编译代码我只想了解使用什么符号,以语法正确的方式替换和添加,并且能够在正确的位置声明变量。
我一直在使用最小的flex / bison方法取得了一些成功,但我觉得它并不健全。我讨厌编写一个完整的语言解析器,只是为了在行的末尾或函数的顶部添加一些新的信息。看起来这几乎是 所需要的东西,但似乎应该有一些工具来做这些类型的操作。
要更改的代码有多种语言,但我对FORTRAN特别感兴趣。
有什么想法吗?
答案 0 :(得分:2)
我们的DMS Software Reengineering Toolkit是一个通用程序转换系统,它接受任意语言描述以允许它操纵这些语言。它具有Fortran,C ++,C,Java,C#,COBOL和许多其他语言的前端。这些前端将源代码解析为编译器数据结构(例如,完整的AST),并使AST能够重新生成为有效的语言源文本,甚至保留注释。 DMS API允许任意导航/检查/修改AST,构建基于属性语法的分析器。 DMS提供支持机制,用于构建特定于语言的符号表,以及控制和数据流分析。最后,对于提供给DMS的任何语言,它可以将源模式匹配应用于AST,以及源到源模式驱动的转换以匹配和修改AST,其中每个转换都可以由任意分析谓词启用
您的任务之一是找到一个函数调用乘以某个东西。这种DMS模式可以识别它:
domain Fortran.
pattern match_multiplied_function_call(f: IDENTIFIER, a: arguments, t: term): product
= " \f(\a)*\t ";
匹配找到相应语法的AST。
DMS已经开发和使用超过15年。它已用于在非常大的目标软件系统上进行生产分析和转换(对于C,2500万行,COBOL 1000万行,Fortran 150万行等)。
Fortran前端处理F77和F90,它处理Fortran程序中常见的额外gunk(F2003,Cray指针......),甚至处理Fortran文本中使用的C预处理程序指令。
答案 1 :(得分:1)
我不确定这是你想要的100%,但请查看ANTLR。有人甚至为它做了Fortran grammar。
它似乎是一个使用语言表示的良好环境,似乎是模块化的,它可能支持你正在谈论的转换。
答案 2 :(得分:1)
就像我的前任回答你的问题一样,我不确定这是否是你正在寻找的(或者它是否会满足你的任何要求),但我知道有{{3} Eclipse的插件。
我不使用Eclipse,我从未使用过Photran,但我知道有些人使用它,所以我只是觉得我可以传播这个词......