Har*_*rry 5 java refactoring command-line sed toolkit
grep诸如、sed、awk、 和 之类的命令行工具perl允许执行文本搜索和替换操作。
但是,是否有任何工具允许我从命令行在 Java 代码库中执行语义搜索和替换操作?
例如,Eclipse IDE 允许我轻松地重命名变量、字段、方法或类。但我希望能够从命令行执行相同的操作。
上面的重命名操作只是一个示例。我还希望能够选择具有附加语义约束的替换文本,例如:
使用此类任意语义约束选择代码后,我希望能够对其进行任意转换。
所以,基本上,我需要访问代码的符号表。
问题:
你想要的是能够根据语法,受各种语义条件的约束找到代码,然后能够用新的语法替换找到的代码。
对符号表的访问(符号类型/范围/范围中的提及)只是一种语义约束。您可能还需要其他功能,例如控制流排序(这发生在之后)和数据流到达(此处生成的数据在那里被消耗)。事实上,您可能认为重要的语义条件数量无限,具体取决于语言的属性(该函数是否与该函数并行访问数据?)或您的应用程序兴趣(该矩阵是上三角矩阵吗?)
一般来说,您不可能拥有一个现成的工具具有所有可能感兴趣的语义条件。这意味着当您发现需要新的语义条件时,您需要表达它们。
您可能希望最好的工具是
有一个经典的工具可以做到这一点,即调用源程序到源程序的转换系统。
我的公司提供 DMS 软件重组工具包,它就是其中之一。DMS 已被用于对多种语言(包括 OP 的目标:Java)进行大规模生产转换。DMS的重写规则的形式为:
rule <rule_name>(syntax_parameters): syntax_category =
<match_pattern> -> <replacement_pattern>
if <semantic_condition>;
Run Code Online (Sandbox Code Playgroud)
您可以看到模式语言和重写规则的更多详细信息,如下所示:DMS 重写规则。
值得注意的是,重写规则代表对树的操作。这意味着虽然它们可能看起来像文本字符串匹配,但实际上并非如此。因此,无论存在任何空格问题,重写规则都会匹配(在 DMS 的情况下,即使数字基数或字符串转义存在差异)。这使得 DMS 模式匹配比正则表达式更有效,并且更容易编写,因为您不必担心这些问题。
此软件推荐链接显示了如何使用 DMS 定义规则,以及(根据 OP 的请求)“从命令行运行它们”:这不像运行 SED 那样简洁,但它正在执行更复杂的任务。
DMS 有一个带有符号表、控制和数据流分析的 Java 前端。如果需要额外的语义分析,可以使用 DMS 的底层编程语言对其进行编码。
| 归档时间: |
|
| 查看次数: |
353 次 |
| 最近记录: |