SF.*_*SF. 32 cvs diff merge semantic-analysis
是否存在用于编程语言的差异/合并工具,它以语法识别的方式工作(如XML Diff Tool),不仅仅是逐行比较(并且可选地忽略空格).
我对实际遵循语言语法和分隔符的程序感兴趣,建议在不破坏语法正确性的情况下进行更改,或者在多行中分隔语句.示例行为是:
*找到一个if(){引入额外嵌套级别的自动捆绑闭合支撑}下面的几行.)
*保持匹配语法元素在一起,避免像删除块往往创建的愚蠢:
int function_A()
{
int ret;
ret = something;
ret += something_else;
Run Code Online (Sandbox Code Playgroud)
return ret;
}
int function_B()
{
if(valid)
{
int ret;
ret = something;
ret += something_else;
Run Code Online (Sandbox Code Playgroud)
return ret;
}
Run Code Online (Sandbox Code Playgroud)
else return -1;
}
Run Code Online (Sandbox Code Playgroud)
就个人而言,我很想找到能够处理C++语法的软件,但了解其他语言的解决方案也会很有趣.
typ*_*.pl 11
听起来你对Bram Cohen(BitTorrent创建者)Patience Diff算法(用于市集版本控制系统)感兴趣.
摘自第二个链接:
耐心差异的另一个优点是它经常不匹配普通不应匹配的行.例如,如果您已完全重写了一段代码,则它不应与每个版本中的空行匹配,如此示例所示.最后,有这个例子:
Run Code Online (Sandbox Code Playgroud)void func1() { x += 1 } +void functhreehalves() { + x += 1.5 +} + void func2() { x += 2 }这很简单明了,但是频繁的diff算法会像这样解释它:
Run Code Online (Sandbox Code Playgroud)void func1() { x += 1 +} + +void functhreehalves() { + x += 1.5 } void func2() { x += 2 }
Beyond Compare会做一些你要问的事情.它不能保持语法正确性或一次比较语言块,但它可以执行以下操作:
old_variable_name左边的每个地方的单个会话被替换new_variable_name为右边.它是迄今为止我使用过的最好的差异合并工具.它也是跨平台,便宜(标准30美元,专业50美元),评估期非常慷慨,值得一试.
请参阅我们的SmartDifferencer工具.
SmartDifferencers是特定于语言的,由生产质量语言解析器驱动,构建AST并比较树.这使得他们完全独立于文本布局和干预评论; 值得注意的是,如果文字所代表的实际值没有不同,它们不受文字文本(基数,移动小数点+改变指数,不同转义序列)的变化的影响.结果以语言语法术语和合理的编辑操作(移动,复制,插入,删除,重命名标识符在块内)报告.
有C#,Java,C++,Python和各种其他语言的版本.网站上有各自的例子.
对于C存在SmartDifferencer,但是在没有完整编译器命令行的情况下解析C文件有时会出现问题,因此有时它会失败并且您必须回退到更原始的比较工具,例如diff.我们正在努力改善这种状况.
| 归档时间: |
|
| 查看次数: |
5336 次 |
| 最近记录: |