Spark 机器学习 AST 比较

Spark machine learning AST comparison

我是机器学习的新手,但我正在尝试研究是否可以使用机器学习来比较源代码的两个 AST(抽象语法树)以确定它们是否相似。

理想情况下,使用一些数据集进行一些训练并比较任何两个给定的 AST 以找到相似之处。

这里有什么建议吗?

您似乎期望机器学习算法能够完成发现两个 AST 之间的相关 "distance" 的繁重工作。 很不寻常。相反,您可能会考虑两棵树的整体结构:它们在树的每一层是否具有相似数量的节点。如果他们这样做 - 至少对于树的绝大部分 - 那么您可能希望为两棵树之间的 "distance metrics" 定义两种方法之一:

  • 不同节点值的数量

  • 节点值的相对差异 - 可能是传统的 Levenshtein 距离 .. 但更可能是理解特定语言的语义以查看它们有多相似的比较。例如。能够理解两个结构代表相同的语句,但可能具有不重要的空格或其他格式差异。或者变量名称可能不同但语义相同。

  • 另一个额外的检查可能是定义有多少子树是相同的。然后为发散的子树定义一个空间度量,能够找到结构 similarities/differences 仅为该子树

总结为:"nothing out of the box for the entire problem - but you can leverage existing ideas/algorithms for particular localized cases".