论文阅读:Neural Code Comprehension: A Learnable Representation of Code Semantics--NeurIPS 2018

本文针对现有方法在理解程序语义方面的不足,提出了基于中间表示(IR)的代码理解方法。通过LLVM编译器将源代码转化为IR,构建XFG以捕获数据和控制依赖,使用inst2vec学习语义嵌入。实验表明,这种方法在程序分析任务中表现出色,优于专门方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘要:

大多数作品直接处理代码或者使用语法树表示,然而因为程序的一些结构特征,像函数调用、分支、以及语句顺序的可替换性,现有的方法没有足够地理解程序语义的鲁棒性。本文提出了一种新的技术去学习代码语义,并将其应用于各种程序分析任务中。具体来说,首先规定一个适应于人类和机器生成的程序的健壮的代码分布假设,根据这个假设定义一个基于代码中间(IR,独立于源代码编程语言)表示的嵌入空间inst2vec。利用程序的数据流和控制流,我们为IR提供了一个新的上下文表示的定义,XFG。然后使用类比和聚类的方法对嵌入进行定性分析,并对三个不同的高级任务的学习表示进行评估。实验表明,即使没有微调,单个RNN架构和固定inst2vec嵌入也优于性能预测(计算设备映射、最佳线程粗化)和原始代码(104个类)的算法分类的专用方法。

现有方法的缺陷:

①??源程序设计语言固定

②顺序处理token,主要以功能的、无循环的代码为目标,这些代码并不能代表大多数应用程序。

总体结构

在这里插入图片描述

主要过程

源代码(不限制语言)->IR(通过LLVM编译器表示成中间表示)->XFGs(使用数据流和控制流构造,所以支持循环和函数调用)->使用XFG训练单个语句的嵌入空间(inst2vec&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值