PSIMiner: A Tool for Mining Rich Abstract Syntax Trees from Code
JetBrains Research(JetBrains研究院);Higher School of Economics(高等经济学院);JetBrains N.V.;Saint Petersburg State University(圣彼得堡国立大学)
机器学习算法在源代码中的应用在过去几年中已经增长。由于这些算法对输入数据非常敏感,因此研究人员对输入表示进行实验也就不足为奇了。现在,表示代码的一个流行的起点是抽象语法树(AST)。抽象语法树已经在各种软件工程领域,特别是在IDE中使用了很长时间。现代IDE的API允许操作和遍历AST,解析代码元素之间的引用等。这些算法可以用新数据丰富AST,因此在基于ML的代码分析中可能很有用。在这项工作中,我们提出了PSIMiner-一个工具,用于处理来自IntelliJ平台的PSI树。PSI树包含代码语法树以及与它们一起工作的函数,因此可以使用现代IDE的静态分析算法来丰富代码表示。为了展示这个想法,我们使用我们的工具来推断Java AST中的标识符类型,并扩展了code2seq模型的方法名称预测问题。
2021-03-23 cs.LG cs.SE
ATOM: Commit Message Generation Based on Abstract Syntax Tree and Hybrid Ranking
提交消息记录代码更改(例如,功能修改和错误修复),并且对于程序理解很有用。在自然语言中。由于软件的频繁更新和时间成本,开发人员通常没有动力为代码更改编写提交消息。因此,自动化消息写入过程是必要的。以往对提交消息生成的研究都是从生成模型或检索模型中获益,但改变了代码的代码结构,即,AST对于捕获代码语义可能很重要,但尚未显式涉及。此外,虽然生成模型具有为新代码更改合成提交消息的优点,但它们不容易弥合代码和自然语言之间的语义鸿沟,而检索模型可以减轻这种鸿沟。在本文中,我们提出了一种新的提交消息生成模型,命名为ATOM,显式地采用抽象语法树表示代码的变化,并通过混合排名集成检索和生成的消息。具体地,混合排名模块可以从关于一个代码改变的检索到的消息和生成的消息中优先考虑最准确的消息。我们评估我们的数据集从56个流行的Java存储库爬上提出的模型ATOM。实验结果表明,在BLEU-4(一种广泛用于评估文本生成系统的准确性度量)方面,ATOM将最先进的模型提高了30.72%。定性分析也证明了ATOM在生成准确的代码提交消息方面的有效性。
2020-11-11 cs.SE
Unified Abstract Syntax Tree Representation Learning for Cross-Language Program Classification
程序分类可以看作是对代码的一种高层抽象,为与源代码理解相关的各种任务奠定基础,在软件工程领域有着非常广泛的应用,如代码克隆检测、代码气味分类、缺陷分类等。跨语言程序分类可以实现不同程序设计语言的代码迁移,并且还可以促进跨语言代码重用,从而帮助开发人员快速编写代码,减少代码迁移的开发时间。现有的研究大多集中在代码的语义学习,而很少有研究致力于跨语言任务。跨语言程序分类的主要挑战是如何提取不同程序设计语言的语义特征。为了解决这一问题,本文提出了一种统一抽象树(UAST)神经网络。具体而言,UAST的核心思想包括两个统一的机制。首先,UAST通过统一AST遍历序列和图形化AST结构来学习AST表示,以捕获语义代码特征。其次,我们构建了一种称为统一词汇表的机制,它可以减少不同程序设计语言之间的特征差距,从而可以达到跨语言程序分类的作用。此外,我们还收集了一个包含5种程序设计语言的20,000个文件的数据集,可以作为跨语言程序分类任务的基准数据集。我们在两个数据集上进行了实验,结果表明,我们提出的方法在四个评估指标(精度,召回率,F1分数和准确性)方面优于最先进的基线。
2022-05-01 cs.SE
Improving Code Summarization with Block-wise Abstract Syntax Tree Splitting
Xiamen University(厦门大学)
自动代码摘要将软件开发人员从手动注释的沉重负担中解放出来,有利于软件开发和维护。抽象语法树(AST)描述了源代码的语法结构,它被用来指导代码摘要的生成。然而,现有的基于AST的方法遭受训练的困难,并产生不充分的代码摘要。本文提出了一种基于块的抽象树分割方法(BASTS),该方法充分利用了AST丰富的树形语法结构,提高了代码摘要的质量。BASTS基于控制流图的支配者树中的块来分割方法的代码,并为每个代码分割生成分割AST。然后,每个分割的AST由Tree-LSTM使用预训练策略来建模,以捕获本地非线性语法编码。学习的语法编码与代码编码相结合,并输入到Transformer中以生成高质量的代码摘要。基准测试的综合实验表明,BASTS显着优于国家的最先进的方法在各种评估指标。为了便于再现,我们的实现可在https://github.com/XMUDM/BASTS上获得。
2021-03-18 cs.AI cs.CL cs.SE
A Novel Refactoring and Semantic Aware Abstract Syntax Tree Differencing Tool and a Benchmark for Evaluating the Accuracy of Diff Tools
提出基于RefactoringMiner的新型AST差异分析工具,解决多重映射、重构感知等局限,并构建首个含988个提交的AST节点映射基准,验证其具有更高的精确率、召回率及可比的执行速度。
2024-08-23 cs.SE
Revisiting Code Similarity Evaluation with Abstract Syntax Tree Edit Distance
University of Luxembourg(卢森堡大学);Luxembourg Institute of Science and Technology(卢森堡科学技术研究所)
本文重新审视代码相似度评估,重点研究AST编辑距离在多种语言中的表现,并提出并发布了一种增强版TSED自适应指标,实验证明其在所有测试语言中均有效。
2024-06-03 cs.CL cs.PL cs.SE
MontiCore: A Framework for the Development of Textual Domain Specific Languages
在本文中,我们展示了一个有效的开发文本领域特定的语言和支持工具的框架。我们使用一个无冗余和紧凑的定义,一个可读的具体语法和一个可理解的抽象语法,因为这两种表示显着重叠,在其结构。为了进一步提高抽象语法的可用性,这种定义格式将诸如关联和继承之类的附加概念集成到易于理解的基于语法的方法中。像语言继承和嵌入这样的模块化概念被用来简化基于现有语言的开发。此外,还解释了编辑器的生成和用于代码生成的模板方法。
2014-09-22 cs.SE
Code Completion by Modeling Flattened Abstract Syntax Trees as Graphs
Microsoft Research Asia(微软亚洲研究院);School of Informatics, Xiamen University(厦门大学信息学院)
代码完成已经成为集成开发环境的重要组成部分。当代的代码完成方法依赖于抽象语法树(AST)来生成语法正确的代码。然而,它们不能完全捕获编写代码的顺序和重复模式以及AST的结构信息。为了缓解这些问题,我们提出了一个新的代码完成方法命名为CCAG,模型的部分AST的扁平序列作为AST图。CCAG使用我们提出的AST图注意块来捕获AST图中的不同依赖关系,以用于代码完成中的表示学习。代码完成的子任务通过CCAG中的多任务学习进行优化,并且使用不确定性自动实现任务平衡,而无需调整任务权重。实验结果表明,CCAG具有优越的性能比国家的最先进的方法,它能够提供智能代码完成。
2021-03-17 cs.AI cs.CL cs.SE
Detecting Code Clones with Graph Neural Networkand Flow-Augmented Abstract Syntax Tree
Peking University(北京大学);Monash University(莫纳什大学)
代码克隆是语义相似的代码片段对,它们在语法上相似或不同。检测代码克隆可以帮助降低软件维护成本并防止错误。已有的代码克隆检测方法很多,但大多数都是针对语法克隆的检测,而对于具有不同语法特征的语义克隆检测效果不佳。为了检测语义克隆,研究人员尝试采用深度学习进行代码克隆检测,以自动从数据中学习潜在的语义特征。特别是,为了利用语法信息,一些方法使用抽象语法树(AST)作为输入,并在各种程序设计语言的代码克隆基准测试中取得了重大进展。然而,这些基于AST的方法仍然不能充分利用代码片段的结构信息,特别是语义信息,如控制流和数据流。为了充分利用控制和数据流信息,在本文中,我们建立了一个图形表示的程序流增强抽象语法树(FA-AST)。我们构造FA-AST通过增加原始AST与显式控制和数据流边缘。然后,我们将两种不同类型的图神经网络(GNN)应用于FA-AST上来度量代码对的相似性。就我们所知,我们是第一个将图神经网络应用于代码克隆检测领域的。我们将FA-AST和图神经网络应用于两个Java数据集:Google Code Jam和BigCloneBench。我们的方法在Google Code Jam和BigCloneBench任务上的表现优于最先进的方法。
2020-02-20 cs.AI cs.SE
VuLASTE: Long Sequence Model with Abstract Syntax Tree Embedding for vulnerability Detection
在本文中,我们建立了一个名为VuLASTE模型,它把漏洞检测作为一个特殊的文本分类任务。为了解决词汇爆炸问题,VuLASTE使用了来自自然语言处理的字节级BPE算法。在VuLASTE中,添加了一个新的AST路径嵌入来表示源代码嵌套信息。我们还使用Longformer的全局和扩张窗口注意力的组合从源代码中提取长序列语义。为了解决漏洞检测数据集中普遍存在的数据不平衡问题,采用焦点损失作为损失函数,使模型在训练时集中于分类不好的案例。为了测试我们的模型在真实源代码上的性能,我们从Github安全咨询数据库中构建了一个跨语言和多存储库的漏洞数据集。在这个数据集上,VuLASTE获得了29,51,86,228的前50,前100,前200,前500的点击率,高于最先进的研究。
2023-02-05 cs.AI cs.SE
PassSum: Leveraging Paths of Abstract Syntax Trees and Self-Supervision for Code Summarization
Software Institute, Nanjing University(南京大学软件学院)
PassSum是利用高效AST编码与自监督预训练的代码摘要生成方法,在Java、Python、Ruby数据集上性能优于现有方法,可减少标注数据依赖并加快收敛。
2026-10-14 cs.SE
Syntax and Stack Overflow: A methodology for extracting a corpus of syntax errors and fixes
在研究如何发现和修复语法错误时,一个问题是如何获得自然的和有代表性的语法错误示例。大多数语法错误数据集都不是免费的,开放的和公共的,或者它们是从新手程序员那里提取的,并不代表一般开发人员会犯的语法错误。所有技能水平的程序员都会在Stack Overflow上发布问题和答案,其中可能包含源代码片段以及相应的文本和标签。许多代码片段不进行解析,因此它们很适合形成语法错误和更正的语料库。我们的主要贡献是一种方法,用于提取自然的语法错误和相应的人工修复,以帮助语法错误的研究。Python抽象语法树解析器用于确定从SOTorrent数据集提取的代码块的初步错误和更正。我们通过在Python解释器中执行更正来进一步分析我们的代码。我们应用我们的方法生成了一个包含62,965个Python Stack Overflow代码片段的公共数据集,其中包含相应的标记、错误和堆栈跟踪。我们发现,Stack Overflow用户所犯的错误与学生开发人员或随机突变所犯的错误不匹配,这意味着该领域存在严重的代表性风险。最后,我们公开分享我们的数据集,以便未来的研究人员可以重用和扩展我们的语法错误和修复。
2019-07-17 cs.SE
cAST: Enhancing Code Retrieval-Augmented Generation with Structural Chunking via Abstract Syntax Tree
针对现有代码RAG基于行的分块方法易破坏语义结构的问题,提出基于抽象语法树的结构感知分块方法cAST,跨任务生成语义连贯的检索单元,显著提升代码检索与生成性能。
2025-10-02 cs.AI cs.CL cs.IR
Heterogeneous Directed Hypergraph Neural Network over abstract syntax tree (AST) for Code Classification
School of Computer Science and Technology, East China Normal University(计算机科学与技术学院,东华大学);NPPA Key Laboratory of Publishing Integration Development, ECNUP(出版集成发展关键实验室,ECNUP)
针对现有代码分类方法忽略AST中高阶关联及语义结构信息的问题,提出异构有向超图及其神经网络,在Python和Java数据集上超越现有方法。
2025-09-24 cs.AI cs.LG cs.SE
Which Syntactic Capabilities Are Statistically Learned by Masked Language Models for Code?
本文提出SyntaxEval技术,基于抽象语法树自动掩码代码输入以评估掩码语言模型的句法能力,并通过GitHub数据案例研究发现所测MLMs在部分句法能力上预测失败。
2024-02-21 cs.SE
AoA: Theorem Proving Agent over Abstract Syntax Tree of Redesigned Language
Nanyang Technological University Singapore(南洋理工大学新加坡分校);Imperial College London London, UK(伦敦帝国理工学院伦敦分校);University of Edinburgh Edinburgh, UK(爱丁堡大学爱丁堡分校)
研究针对交互式定理证明中人工操作限制可扩展性及基于LLM的证明智能体成本高的问题,提出将智能体从源文本提升到抽象语法树的方法,实现了AoA,在多个方面有显著提升且解决更多难题。
2026-07-21 cs.AI cs.LG cs.PL
AST-Probe: Recovering abstract syntax trees from hidden representations of pre-trained language models
University of Murcia(穆尔西亚大学);University of Montreal(蒙特利尔大学);Institute for Clarity in Documentation(文档清晰化研究所);Inria Paris-Rocquencourt(法国国家信息与自动化研究所巴黎-罗克库尔中心);Rajiv Gandhi University(拉吉夫·甘地大学);Tsinghua University(清华大学);Palmer Research Laboratories(帕尔默研究实验室)
预先训练的语言模型的目标是学习文本数据的上下文表示。预训练的语言模型已经成为自然语言处理和代码建模的主流。使用探针,一种研究隐藏向量空间的语言属性的技术,以前的工作表明,这些预先训练的语言模型在其隐藏表示中编码简单的语言属性。然而,以前的工作没有评估这些模型是否编码的整个语法结构的程序设计语言。在本文中,我们证明了一个语法子空间的存在,躺在隐藏的表示预先训练的语言模型,其中包含的语法信息的程序设计语言。我们表明,这个子空间可以从模型的表示中提取,并定义了一种新的探测方法,AST-Probe,使整个抽象语法树(AST)的输入代码片段恢复。在我们的实验中,我们表明,这个句法子空间存在于五个国家的最先进的预训练语言模型。此外,我们强调模型的中间层是编码大多数AST信息的层。最后,我们估计了该句法子空间的最佳大小,并表明其维度远低于模型表示空间的维度。这表明预先训练的语言模型使用其表示空间的一小部分来编码程序设计语言的语法信息。
2022-09-10 cs.AI cs.CL cs.LG
Modular Tree Network for Source Code Representation Learning
源代码的学习表示是许多程序分析任务的基础。近年来,神经网络在这一领域已经取得了成功,但现有的模型大多没有充分利用程序的独特结构信息。虽然基于抽象语法树的神经模型可以处理源代码中的树结构,但它们不能捕获程序中不同类型子结构的丰富性。本文提出了一种模块化树网络(MTN),它根据输入的抽象语法树动态地将不同的神经网络单元组合成树结构。与以往的树结构神经网络模型不同,MTN能够捕捉不同类型AST子结构之间的语义差异。我们评估我们的模型上的两个任务:程序分类和代码克隆检测。在这两个任务中,与最先进的方法相比,我们的模型实现了最好的性能,显示了利用源代码的更精细的结构信息的优势。
2021-04-01 cs.SE
Abstract Syntax Tree for Programming Language Understanding and Representation: How Far Are We?
Nanjing University(南京大学);Nanyang Technological University(南洋理工大学)
本文通过实证研究系统评估了基于AST与基于Token的代码表示在多项代码任务上的效果,发现AST整体表现较弱但在特定子集上有优势,并分析了AST各处理阶段的影响,为后续研究提供指导。
2023-12-01 cs.AI cs.CL cs.PL
GAP-Gen: Guided Automatic Python Code Generation
University of California, Irvine(加州大学欧文分校)
提出GAP-Gen方法,通过Syntax-Flow和Variable-Flow引入Python语法与语义约束,改进微调过程,在多个数据集上微调T5和CodeT5,显著提升自动Python代码生成性能。
2023-05-10 cs.CL cs.LG cs.PL
Program Understanding: A Reengineering Case for the Transformation Tool Contest
在软件再工程中,核心工件之一是遗留系统的源代码。事实上,在大多数情况下,它是唯一确定的工件,因为随着时间的推移,代码已经偏离了原始的架构和设计文档。任何再工程项目的第一个任务是收集对系统架构的理解。因此,一种常见的方法是使用解析器将源代码翻译成符合实现系统的程序设计语言的抽象语法的模型,然后可以对其进行查询。除了查询之外,转换还可以用于生成系统架构上更抽象的视图。这个转换案例处理从Java语法图创建状态机模型。它是从一个真正的再工程项目中的一个任务衍生出来的。
2011-11-21 cs.PL cs.SE
Mining patterns in syntax trees to automate code reviews of student solutions for programming exercises
本文提出机器学习方法ECHO,通过挖掘抽象语法树模式自动复用教育代码审查反馈,实验证明其能准确快速预测反馈注释,显著减少手动反馈工作量。
2024-04-26 cs.CY cs.LG cs.SE
Evaluation of LLMs on Syntax-Aware Code Fill-in-the-Middle Tasks
University of California at Berkeley(加州大学伯克利分校);AI at Meta(Meta人工智能部门)
本研究提出语法感知代码中间填充基准SAFIM,含多语言17720个低污染示例与配套评估框架,经15个LLM评估发现FIM预训练可同时提升FIM与L2R能力,预训练方法和数据质量比模型规模更重要。
2024-06-23 cs.AI cs.CL cs.LG