ruby-on-rails - 有没有可以比较或解析多种语言的工具?

标签 ruby-on-rails ruby parsing static-analysis abstract-syntax-tree

<分区>

我感兴趣的是比较代码以找到匹配项,即查看两段不同的代码是否等同。例如,这里有 4 个匹配项,用于返回两个数字之和的方法(在 Java 中)。

int sum(int a, int b){
  return a + b;
}

int sum(int a, int b){
  return b + a;
}

int sum(int a, int b){
  int sum = a + b;
  return sum; 
}

int sum(int a, int b){
  int total = a + b;
  return total; 
}

虽然对两段源代码进行文本比较很容易,但编写能够识别上述匹配项的代码却很困难。这似乎是解析器或编译器的工作,但它不需要“完美”,因为它只是在寻找匹配项。

这是一个 Rails 网站,理想情况下它应该能够在 Ruby 中工作,但我也可以运行一个单独的服务。 Treetop是一种描述语法的语言,但描述语法也很困难。是否有现成的工具来比较多种语言(例如 Java、C++、Ruby 和 Python)的源代码?

它只需要一次找到一种语言的源代码之间的匹配项,但如果它也能找到不同语言的源代码之间的匹配项,那就太好了。

更新:匹配不是产生相同结果的任何代码,而是使用相同过程和步骤获得相同结果的代码。该工具不需要找到所有可能的匹配项,但它应该能够识别除了变量名或顺序(如上例所示)等细微差别外完全相同的代码。

最佳答案

此问题称为函数问题:确定两个程序是否计算相同的函数。众所周知,它是不可判定的,即这样的工具不可能存在。

基本上,如果您有这样的工具,那么您可以问:某个程序 P 是否等同于此程序:

while (true);

你会解决停机问题。 (这不是实际上证明的方式,它比那复杂得多,但这是基本思想。)

关于ruby-on-rails - 有没有可以比较或解析多种语言的工具?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19979766/

相关文章:

ruby-on-rails - 如何根据rails中的user_id过滤所有帖子?

c++ - 如何解析和显示 rosbag (C++) 发布的所有 rostopics 和消息

javascript - 隐藏所有未选中的列表元素,Ruby 或 JavaScript

ruby-on-rails - 将Rails应用程序部署到Heroku时出现App Crashed错误

ruby-on-rails - 使用 ActiveRecord::Relation 时的 RSpec 匹配器

ruby - 尝试通过 https 发出发布请求时获取 OpenSSL::SSL::SSLError: SSL_set_tlsext_host_name

ruby-on-rails - 首先对数组的特定项目进行排序

json - 确定 JSON 解析错误的位置

Scala:我可以将组合器解析器微调为本地贪婪吗?

sql - 中间可选模型的基本数据库设计