(19)国家知识产权局
(12)发明 专利
(10)授权公告 号
(45)授权公告日
(21)申请 号 202210527592.7
(22)申请日 2022.05.16
(65)同一申请的已公布的文献号
申请公布号 CN 114625844 A
(43)申请公布日 2022.06.14
(73)专利权人 湖南汇视威智能科技有限公司
地址 410000 湖南省长 沙市开福区通泰街
街道中山路589 号开福万达广场B区商
业综合体(含 写字楼)37013
(72)发明人 顾善植 耿铭阳 吴瑶 王聪睿
胡亚清 李无忧 周浩然
(74)专利代理 机构 深圳中一联合知识产权代理
有限公司 4 4414
专利代理师 李艳丽(51)Int.Cl.
G06F 16/33(2019.01)
G06F 40/30(2020.01)
G06F 8/70(2018.01)
(56)对比文件
CN 1900910 A,20 07.01.24
CN 113342654 A,2021.09.0 3
CN 113326531 A,2021.08.31
CN 110766151 A,2020.02.07
CN 114186017 A,202 2.03.15
US 2020327118 A1,2020.10.15
张理想.基 于多维标注信息的代码搜索技 术
研究. 《东 南大学学报》 .2020,
审查员 陈竹心
(54)发明名称
一种代码搜索方法、 装置及设备
(57)摘要
本申请适用于计算机技术领域, 提供了一种
代码搜索方法、 装置及设备, 所述方法包括: 获取
待搜索代码, 并且获取待搜索代码的语言属性;
根据语言属性确定待搜索代码对应的中间表示
提取规则; 通过中间表示提取规则提取待搜索 代
码的中间表 示信息; 根据语言属性和中间表示信
息构建语义图; 对语义图进行向量化处理, 得到
语义图对应的代码表示向量; 根据代码表示向量
从候选代码中获取满足预设搜索条件的待搜索
代码对应的目标代码。 上述方案, 通过提取中间
表示信息, 精 准的挖掘待搜索 代码中的一些深层
次的语义信息, 更多的关注待搜索 代码的语义特
征, 这样, 无论是单语 言搜索还是多语言搜索, 都
大大提高了代码搜索的精度。
权利要求书3页 说明书14页 附图3页
CN 114625844 B
2022.08.09
CN 114625844 B
1.一种代码搜索方法, 其特 征在于, 包括:
获取待搜索代码, 并且获取所述待搜索代码的语言属性; 其中, 所述语言属性的数量为
一个或者多个;
根据所述语言属性确定所述待搜索代码对应的中间表示 提取规则;
通过所述中间表示 提取规则提取 所述待搜索代码的中间表示信息;
根据所述语言属性和所述中间表示信息构建语义图; 其中, 所述语义图标识所述待搜
索代码的语义信息;
所述根据所述语言属性和所述中间表示信息构建语义图, 包括:
遍历所述中间表示信 息中包含的三地址指令, 根据 所述语言属性对应的第 一构建规则
构建Java代码语义图; 其中, 所述语言属性包括Java语言; 所述第一构建规则包括: 当所述
三地址指令为运算指令时, 将每个操作数节点连向操作符节点, 并将所述操作符节点连向
计算结果节点; 当所述三地址指 令为函数调用指 令时, 将每个参数节点连向函数名节点, 并
将所述函数名节点连向返回值节点; 当所述三地址指令为跳转指令时, 则将跳转的条件节
点连向跳转的label 块节点;
所述根据所述语言属性和所述中间表示信息构建语义图, 还 包括:
根据所述语言属性对应的第二构建规则将栈指令格式的所述中间表示信息的格式由
栈指令格式转化为三地址指 令格式, 并构建Python代码语义图; 其中, 所述语 言属性还包括
Python语言; 所述第二构建规则包括: 当所述栈指令格式的所述中间表示信息为数据流指
令, 从栈中取出或压入数据, 并将所述数据流指 令与其对应的数据进 行合并处理, 并得到包
含三地址指令的中间表示信息; 当所述栈指令格式的所述中间表示信息为控制流指令, 根
据控制流指 令找到待 执行的目标位置, 在所述目标位置的前添加label块节 点, 并根据指 令
意图生成跳转指 令; 当所述三地址指 令为运算指 令时, 将每个操作数节点连向操作符节点,
并将所述操作符节点连向计算结果节点; 当所述三地址指令为函数调用指令时, 将每个参
数节点连向函数名节点, 并将所述函数名节点连向返回值节点; 当所述三地址指令为跳转
指令时, 则将跳转的条件节点连向跳转的所述 label块节点;
对所述语义图进行向量 化处理, 得到所述语义图对应的代码表示向量;
根据所述代码表示向量从候选代码中获取满足预设搜索条件的所述待搜索代码对应
的目标代码。
2.如权利要求1所述的代码搜索方法, 其特征在于, 所述获取所述待搜索代码的语言属
性, 包括:
获取所述待搜索代码的语法关键词;
根据所述语法关键词识别出 所述待搜索代码的语言属性。
3.如权利要求1所述的代码搜索方法, 其特 征在于, 所述语言属性包括Java语言;
所述通过所述中间表示 提取规则提取 所述待搜索代码的中间表示信息, 包括:
当所述待搜索代码可以进行正常编译时, 将所述待搜索代码输入JLang工具进行处理,
得到所述待搜索代码的中间表示信息; 其中, 所述中间表示信息为 三地址码格式。
4.如权利要求3所述的代码搜索方法, 其特征在于, 在所述当所述待搜索代码可以进行
正常编译时, 将所述待搜索代码 输入JLang工具进 行处理, 得到所述待搜索代码的中间表 示
信息之前, 还 包括:权 利 要 求 书 1/3 页
2
CN 114625844 B
2当所述待搜索代码不可以进行正常编译时, 将所述待搜索代码输入JCoffee工具进行
补全处理, 得到可以进行正常编译的待搜索代码。
5.如权利要求1所述的代码搜索方法, 其特 征在于, 所述语言属性包括Pytho n语言;
所述通过所述中间表示 提取规则提取 所述待搜索代码的中间表示信息, 包括:
将所述待搜索代码输入Dis工具进行处理, 得到所述待搜索代码的中间表示信息; 其
中, 所述中间表示信息为栈指令格式。
6.如权利要求1所述的代码搜索方法, 其特征在于, 所述对所述语义图进行向量化处
理, 得到所述语义图对应的代码表示向量, 包括:
将所述语义图输入预先训练的DiffPool向量化神经网络模型进行处理, 得到所述语义
图对应的代码表示向量; 其中, 所述语义图对应的代码表示向量 为一维实数向量。
7.如权利要求1所述的代码搜索方法, 其特征在于, 所述根据所述代码表示向量从候选
代码中获取满足预设搜索条件的所述待搜索代码对应的目标代码, 包括:
获取候选代码及其对应的候选表示向量;
计算所述代码表示向量和每 个所述候选代码的候选表示向量之间的余弦距离;
对所有所述余弦距离进行排序得到余弦距离序列, 根据 所述余弦距离序列 得到满足预
设搜索条件的所述待搜索代码对应的目标代码。
8.一种代码搜索装置, 其特 征在于, 包括:
第一获取单元, 用于获取待搜索代码, 并且获取所述待搜索代码的语言属性; 其中, 所
述语言属性的数量 为一个或者多个;
第一处理单元, 用于根据所述语言属性确定所述待搜索代码对应的中间表示提取规
则;
第二处理单元, 用于通过所述中间表示提取规则提取所述待搜索代码的中间表示信
息;
构建单元, 用于根据 所述语言属性和所述中间表示信息构建语义图; 其中, 所述语义图
标识所述待搜索代码的语义信息;
所述构建单 元, 具体用于:
遍历所述中间表示信 息中包含的三地址指令, 根据 所述语言属性对应的第 一构建规则
构建Java代码语义图; 其中, 所述语言属性包括Java语言; 所述第一构建规则包括: 当所述
三地址指令为运算指令时, 将每个操作数节点连向操作符节点, 并将所述操作符节点连向
计算结果节点; 当所述三地址指 令为函数调用指 令时, 将每个参数节点连向函数名节点, 并
将所述函数名节点连向返回值节点; 当所述三地址指令为跳转指令时, 则将跳转的条件节
点连向跳转的label 块节点;
所述构建单 元, 具体还用于:
根据所述语言属性对应的第二构建规则将栈指令格式的所述中间表示信息的格式由
栈指令格式转化为三地址指 令格式, 并构建Python代码语义图; 其中, 所述语 言属性还包括
Python语言; 所述第二构建规则包括: 当所述栈指令格式的所述中间表示信息为数据流指
令, 从栈中取出或压入数据, 并将所述数据流指 令与其对应的数据进 行合并处理, 并得到包
含三地址指令的中间表示信息; 当所述栈指令格式的所述中间表示信息为控制流指令, 根
据控制流指 令找到待 执行的目标位置, 在所述目标位置的前添加label块节 点, 并根据指 令权 利 要 求 书 2/3 页
3
CN 114625844 B
3
专利 一种代码搜索方法、装置及设备
文档预览
中文文档
21 页
50 下载
1000 浏览
0 评论
309 收藏
3.0分
温馨提示:本文档共21页,可预览 3 页,如浏览全部内容或当前文档出现乱码,可开通会员下载原始文档
本文档由 人生无常 于 2024-03-18 14:06:56上传分享