基于路径的通用程序属性预测表示
在软件工程领域,编程语言理解与表示(即代码表示学习)一直是一个备受关注和具有挑战性的任务,其旨在应用深度学习技术生成源代码特征的数值表示同时保持其语义,这些表示可用于促进后续与代码相关的任务。然而,AST(抽象语法树)作为一种基本的代码特征,在代码表示学习中广泛应用,但目前缺乏对 AST-based 代码表示如何促进后续代码相关任务的系统和定量评估。本文通过详细的实证研究首次探索了 AST-based 代码表示在促进后续代码相关任务方面的有效性,并比较了基于代码标记序列和基于 AST 的代码表示方法在三种常见类型的代码相关任务上的性能。令人惊讶的是,整体定量统计结果表明,与基于代码标记的代码表示方案相比,基于 AST 的代码表示方法在所有三个任务中的表现均较差。进一步的定量分析显示,基于 AST 的代码表示方法在所有三个任务的某些子样本中优于基于代码标记的代码表示方法。我们还进行了全面的实验,评估和揭示了 AST 解析 / 预处理 / 编码方法的选择对基于 AST 的代码表示和后续代码相关任务的影响。本研究为未来的研究人员提供了关于如何选择每个阶段的解决方案以充分利用 AST 的详细指导。
Dec, 2023
本研究提出了从源代码的抽象语法树构建异构编程图用于方法命名和代码注释生成的方法,并使用异构图神经网络学习这些图。实验结果表明,利用编程图中节点和边的类型信息可以帮助学习程序语义,本方法优于基线模型。
Dec, 2020
本文介绍了如何使用图表示代码的句法和语义结构,并使用基于图的深度学习方法来学习对程序结构进行推理的方法。作者在两个任务上对该方法进行了评估:VarNaming 和 VarMisuse,结果表明使用已知结构的建模方法具有优势,并且可以在许多情况下学习推理有意义的变量名和解决 VarMisuse 任务,并且 VarMisuse 还可以发现成熟开源项目中的错误。
Nov, 2017
本文提出了一种基于 Abstract Syntax Tree 的 Prüfer 序列设计的时序表示方案,以捕获计算机程序的结构 / 句法信息,并用于代码概括的发展深度学习模型。经实验证明,我们的方法具有高效性和优越性。
Nov, 2021
本文提出了一种多视图图形编程表示方法,使用图形神经网络处理数据和控制流,并在此基础上评估了该方法在算法检测中的性能,结果表明这种方法比先前的方法表现得更好。
Feb, 2022
本文介绍一种用于程序自动合成的方法,通过结合模式识别和显式推理来解决这些复杂的编程问题,同时使用新颖的中间表示和训练算法,使程序合成系统能够自学,从而在简单的英文描述编程问题数据集上取得了最先进的性能表现。
Feb, 2019
通过神经符号表示以及基于抽象解释衍生的执行模型,我们提供了一种表示部分程序的一般技术。这种技术可以帮助程序综合引擎在寻找程序解决方案时使用更强大的语言结构,从而在给定的搜索预算内更准确地综合程序。
Dec, 2020
本文提出了一种 “编码准则” 来建立程序向量表示,从而使深度学习成为程序分析的现实,并且通过实验评估证明了该准则的成功性,并在程序分类任务中实现了高准确性,证实深度学习在程序分析领域的成功性,预见未来深度学习将成为程序分析的杰出技术。
Sep, 2014
提出使用图神经网络(GNNs)基于程序的抽象语法树(ASTs)将变量集合映射到两个程序之间,以修复初级编程作业(IPAs)中初学者经常出现的错误,并在实验中表明,与当前最先进的程序修复方法相比,仅基于变量映射的方法可以修复大约 88.5%的错误程序。
Jul, 2023
本篇论文通过构建 AST-Probe 探针方法,证明了预训练语言模型中存在一个语法子空间以及该子空间可以用来恢复一个输入代码片段的完整 AST,进而表明预训练语言模型仅使用一部分表示空间来编码编程语言的语法信息。
Jun, 2022