《表1 本文选用的AST节点》
在程序代码中,符号粒度可能是字符级别[23]、单词级别以及AST的节点等[24~26]。相关研究指出,AST的唯一节点是SDP中程序的合适粒度,因为该程序中的语义和结构信息几乎可以完整保留。使用名为javalang[27]的开源Python项目作为将Tera-PROMISE库中的Java代码解析为AST的工具。继Phan等人[3]的研究,仅选择三种类型的AST节点作为实验用的AST节点:第一种是与类实例化和方法调用关联的节点,使用它们的方法名或类名作为令牌;第二种类型是声明节点,例如方法声明、类型声明,接口声明和枚举声明;最后一种类型是控制流节点,例如条件控制(IfStatement)、循环控制(ForStatement、WhStateState)和异常控制(ThrowStatemen、CatchClause)。消除了诸如Assignment之类的局部节点,因为这些节点是在方法内声明的,即使不同的方法具有相同名称的局部变量,它们也可能具有不同的含义。本文所选用的AST节点如表1所示,图1展示了与该代码相对应的AST。
图表编号 | XD00198057100 严禁用于非法目的 |
---|---|
绘制时间 | 2020.12.31 |
作者 | 梅锋、蔡子仪、陆璐 |
绘制单位 | 广东省广播电视网络股份有限公司中山分公司、华南理工大学计算机科学与工程学院、华南理工大学计算机科学与工程学院 |
更多格式 | 高清、无水印(增值服务) |