POSIX shell脚本的语义补丁

时间:2017-01-10 21:47:46

标签: shell refactoring automated-refactoring

是否有使用语义补丁 shell脚本进行重构的工具,就像C的Coccinelle一样?

示例修改是从

切换
command > file

语法到"粘性"一个

command >file

1 个答案:

答案 0 :(得分:2)

是否有重构shell脚本的工具?我对此表示怀疑。

但是,您可以使用常规program transformation system (PTS)构建一个。

这些是接受语言描述的工具(你需要一个POSIX shell脚本的语法),将解析所述langauge构建AST,然后允许你将转换应用于那些AST,最后将AST重新打印回有效的源文本

好的PTS让您使用源代码模式表达代码更改(Cocinelle不是一个特定用途的PTS,因为它只适用于C,但它属于这种源模式驱动的类别),而不是编写过程代码来修改树。

大多数问题是它们不会超越(无上下文)AST的匹配,而真正的约束要求工具理解“上下文”(例如,源文本中远处的信息如何影响意义文本中的一个特定点)。 Cocinelle也这样做,这就是为什么它是一个有趣的工具;这种能力是必要的来改变传统的编程语言。

我们的DMS软件再造工具包是一个通用的PTS,为上下文分析(符号表,控制和数据流分析......)提供支持。我认为像Unix一样的(Unix)shell脚本语言,都具有各种类似宏的功能,这使得处理它们比Java等无宏语言更难处理。 DMS为捕获和处理预处理器条件和宏提供内置支持;它目前使用这些来处理C和C ++。

但是,Posix转换不是开箱即用的。您必须定义其语法,以及对DMS的各种上下文分析支持。此时,您可以开始使用源模式编写依赖于上下文的转换。这项工作可以用于DMS,但不是周末练习。所以真正的问题是,

您打算做多少自动修补;是否足以证明配置PTS的合理性?