本发明一般涉及软件,并且更具体地涉及评估源代码的方法和相关节点。
背景技术:
1、人工智能(ai)(尤其是机器学习(ml))的使用一直在上升。ai和ml几乎在生活的每个领域都占有一席之地。ai/ml的一个有前途的应用领域是具有各种目标(例如漏洞预测、源代码审查和完成、综合、修复等)的智能软件分析。
2、仅关于数组形式的数值数据来对ml模型进行训练和开发。例如,考虑ml的图像分类任务。图像由像素组成,像素是图像的最小部分,其中每个像素都有自己的颜色,在灰色系统中用0到256之间的数字表示。因此,从ml模型的角度来看,图像实际上被视为包括数值的矩阵。
3、另一方面,源代码主要用高级编程语言(诸如java、python等)编写,该高级编程语言包括来自英语(或其他)自然语言的基于文本的关键字、词和短语。因此,用高级语言编写的一段源代码可能难以直接使用ml模型进行处理。
技术实现思路
1、根据本发明构思的一些实施例,一种提供对编程语言的源代码进行评估的方法包括以下操作。提供编程语言的源代码,其中源代码包括多个源代码元素。从源代码的该多个源代码元素中选择源代码元素。基于该源代码元素生成多个令牌,其中该多个令牌中的每个令牌包括文本字符序列。基于源代码元素的该多个令牌生成源代码元素的二叉抽象语法树(ast)表示,其中二叉ast表示包括多个二叉ast节点,该多个二叉ast节点包括二叉ast令牌节点和二叉ast空节点,其中二叉ast令牌节点中的每一个基于源代码元素的该多个令牌中的相应一个。将二叉ast令牌节点和二叉ast空节点中的每一个编码为相应数值。基于二叉ast表示生成源代码元素的数值数组表示,其中基于相应二叉ast令牌节点和二叉ast空节点在二叉ast表示中的相应位置,将该二叉ast令牌节点和二叉ast空节点的数值映射到数值数组表示中的位置。
2、根据本发明构思的一些其他实施例,源代码评估节点适用于执行以下操作。提供编程语言的源代码,其中源代码包括多个源代码元素。从源代码的该多个源代码元素中选择源代码元素。基于该源代码元素生成多个令牌,其中该多个令牌中的每个令牌包括文本字符序列。基于源代码元素的该多个令牌生成源代码元素的二叉抽象语法树(ast)表示,其中二叉ast表示包括多个二叉ast节点,该多个二叉ast节点包括二叉ast令牌节点和二叉ast空节点,其中二叉ast令牌节点中的每一个基于源代码元素的该多个令牌中的相应一个。将二叉ast令牌节点和二叉ast空节点中的每一个编码为相应数值。基于二叉ast表示生成源代码元素的数值数组表示,其中基于相应二叉ast令牌节点和二叉ast空节点在二叉ast表示中的相应位置,将该二叉ast令牌节点和二叉ast空节点的数值映射到数值数组表示中的位置。
3、根据本发明构思的又一实施例,源代码评估节点包括处理电路以及与处理电路耦接的存储器。存储器包括在由处理电路执行时使源代码评估节点执行以下操作的指令。提供编程语言的源代码,其中源代码包括多个源代码元素。从源代码的该多个源代码元素中选择源代码元素。基于该源代码元素生成多个令牌,其中该多个令牌中的每个令牌包括文本字符序列。基于源代码元素的该多个令牌生成源代码元素的二叉抽象语法树(ast)表示,其中二叉ast表示包括多个二叉ast节点,该多个二叉ast节点包括二叉ast令牌节点和二叉ast空节点,其中二叉ast令牌节点中的每一个基于源代码元素的该多个令牌中的相应一个。将二叉ast令牌节点和二叉ast空节点中的每一个编码为相应数值。基于二叉ast表示生成源代码元素的数值数组表示,其中基于相应二叉ast令牌节点和二叉ast空节点在二叉ast表示中的相应位置,将该二叉ast令牌节点和二叉ast空节点的数值映射到数值数组表示中的位置。
4、根据本发明构思的又一实施例,一种计算机程序包括要由源代码评估节点的处理电路执行的程序代码,由此程序代码的执行使源代码评估节点执行以下操作。提供编程语言的源代码,其中源代码包括多个源代码元素。从源代码的该多个源代码元素中选择源代码元素。基于该源代码元素生成多个令牌,其中该多个令牌中的每个令牌包括文本字符序列。基于源代码元素的该多个令牌生成源代码元素的二叉抽象语法树(ast)表示,其中二叉ast表示包括多个二叉ast节点,该多个二叉ast节点包括二叉ast令牌节点和二叉ast空节点,其中二叉ast令牌节点中的每一个基于源代码元素的该多个令牌中的相应一个。将二叉ast令牌节点和二叉ast空节点中的每一个编码为相应数值。基于二叉ast表示生成源代码元素的数值数组表示,其中基于相应二叉ast令牌节点和二叉ast空节点在二叉ast表示中的相应位置,将该二叉ast令牌节点和二叉ast空节点的数值映射到数值数组表示中的位置。
5、根据本发明构思的另外的实施例,一种计算机程序产品包括非暂时性存储介质,所述非暂时性存储介质包括要由源代码评估节点的处理电路执行的程序代码,由此程序代码的执行使源代码评估节点执行以下操作。提供编程语言的源代码,其中源代码包括多个源代码元素。从源代码的该多个源代码元素中选择源代码元素。基于该源代码元素生成多个令牌,其中该多个令牌中的每个令牌包括文本字符序列。基于源代码元素的该多个令牌生成源代码元素的二叉抽象语法树(ast)表示,其中二叉ast表示包括多个二叉ast节点,该多个二叉ast节点包括二叉ast令牌节点和二叉ast空节点,其中二叉ast令牌节点中的每一个基于源代码元素的该多个令牌中的相应一个。将二叉ast令牌节点和二叉ast空节点中的每一个编码为相应数值。基于二叉ast表示生成源代码元素的数值数组表示,其中基于相应二叉ast令牌节点和二叉ast空节点在二叉ast表示中的相应位置,将该二叉ast令牌节点和二叉ast空节点的数值映射到数值数组表示中的位置。
6、根据本发明构思的一些实施例,可以通过为源代码元素生成二叉抽象语法树表示并且使用该二叉ast表示来生成源代码的数值数组表示来促进对源代码的更有效评估。这类操作可以例如使用机器学习(ml)促进对源代码元素的评估,以提供漏洞预测、代码审查、代码完成、综合、修复等中的一项或多项。
1.一种提供对编程语言的源代码进行评估的方法,所述方法包括:
2.根据权利要求1所述的方法,还包括:
3.根据权利要求2所述的方法,其中所述非二叉ast令牌节点的数量超过所述二叉ast令牌节点的数量。
4.根据权利要求1至3中任一项所述的方法,其中基于所述源代码的多组所述多个令牌中的每一组超过所述二叉ast令牌节点的数量。
5.根据权利要求1至4中任一项所述的方法,其中所述二叉ast表示具有深度n,其中所述二叉ast表示具有层级i=0,1,2,…n,其中所述二叉ast表示的每个层级i包括2i个节点,其中层级i=0,1,2,…n-1的每个节点在下一层级具有2个子节点,其中所述二叉ast表示包括个节点,并且其中所述数值数组表示包括分别对应于所述二叉ast表示的所述个节点的个数值。
6.根据权利要求5所述的方法,其中从所述二叉ast表示中省略基于所述源代码元素生成的所述多个令牌中的至少一个。
7.根据权利要求1至6中任一项所述的方法,其中生成所述多个令牌包括基于对所述源代码元素的词汇分析生成所述多个令牌。
8.根据权利要求1至7中任一项所述的方法,其中所述源代码元素包括字母、字符、数字和运算符。
9.根据权利要求1至8中任一项所述的方法,其中对于所述二叉ast令牌节点中的每一个,所述相应数值包括数值元组。
10.根据权利要求1至9中任一项所述的方法,还包括:
11.根据权利要求10所述的方法,其中评估包括以下至少一项:使用所述ml模型预测所述源代码的软件漏洞、检测所述源代码的漏洞、识别所述源代码中的错误、和/或校正所述源代码中的错误,其中所述ml模型基于所述源代码元素的数据集并基于以下至少一项:与所述数据集的源代码元素相对应的对应的相应漏洞、和/或与所述数据集的源代码元素相对应的相应错误。
12.根据权利要求10至11中任一项所述的方法,其中所述源代码元素是第一源代码元素,其中所述多个令牌是第一多个令牌,其中所述二叉ast表示是第一二叉ast表示,并且其中所述多个二叉ast节点是第一多个二叉ast节点,所述方法还包括:
13.一种源代码评估节点(1600),适用于:
14.根据权利要求13所述的源代码评估节点(1600),其中所述源代码评估节点(1600)还适用于:
15.根据权利要求14所述的源代码评估节点(1600),其中所述非二叉ast令牌节点的数量超过所述二叉ast令牌节点的数量。
16.根据权利要求13至15中任一项所述的源代码评估节点(1600),其中基于所述源代码的多组所述多个令牌中的每一组超过所述二叉ast令牌节点的数量。
17.根据权利要求13至16中任一项所述的源代码评估节点(1600),其中所述二叉ast表示具有深度n,其中所述二叉ast表示具有层级i=0,1,2,…n,其中所述二叉ast表示的每个层级i包括2i个节点,其中层级i=0,1,2,…n-1的每个节点在下一层级具有2个子节点,其中所述二叉ast表示包括个节点,并且其中所述数值数组表示包括分别对应于所述二叉ast表示的所述个节点的个数值。
18.根据权利要求17所述的源代码评估节点(1600),其中基于所述源代码元素生成的所述多个令牌中的至少一个被从所述二叉ast表示中省略。
19.根据权利要求13至18中任一项所述的源代码评估节点(1600),其中生成所述多个令牌包括基于对所述源代码元素的词汇分析生成所述多个令牌。
20.根据权利要求13至19中任一项所述的源代码评估节点(1600),其中所述源代码元素包括字母、字符、数字和运算符。
21.根据权利要求13至20中任一项所述的源代码评估节点(1600),其中对于所述二叉ast令牌节点中的每一个,所述相应数值包括数值元组。
22.根据权利要求13至21中任一项所述的源代码评估节点(1600),其中所述源代码评估节点(1600)还适用于:
23.根据权利要求22所述的源代码评估节点(1600),其中评估包括以下至少一项:使用所述ml模型预测所述源代码的软件漏洞、检测所述源代码的漏洞、识别所述源代码中的错误、和/或校正所述源代码中的错误,其中所述ml模型基于所述源代码元素的数据集并基于以下至少一项:与所述数据集的源代码元素相对应的对应的相应漏洞、和/或与所述数据集的源代码元素相对应的相应错误。
24.根据权利要求22至23中任一项所述的源代码评估节点(1600),其中所述源代码元素是第一源代码元素,其中所述多个令牌是第一多个令牌,其中所述二叉ast表示是第一二叉ast表示,并且其中所述多个节点是第一多个节点,并且其中所述源代码评估节点(1600)还适用于:
25.一种源代码评估节点(1600),包括:
26.根据权利要求25所述的源代码评估节点(1600),其中所述存储器还包括在由所述处理电路执行时使所述源代码评估节点(1600)进行以下操作的指令:
27.根据权利要求26所述的源代码评估节点(1600),其中所述非二叉ast令牌节点的数量超过所述二叉ast令牌节点的数量。
28.根据权利要求25至27中任一项所述的源代码评估节点(1600),其中基于所述源代码的多组所述多个令牌中的每一组超过所述二叉ast令牌节点的数量。
29.根据权利要求25至28中任一项所述的源代码评估节点(1600),其中所述二叉ast表示具有深度n,其中所述二叉ast表示具有层级i=0,1,2,…n,其中所述二叉ast表示的每个层级i包括2i个节点,其中层级i=0,1,2,…n-1的每个节点在下一层级具有2个子节点,其中所述二叉ast表示包括个节点,并且其中所述数值数组表示包括分别对应于所述二叉ast表示的所述个节点的个数值。
30.根据权利要求29所述的源代码评估节点(1600),其中基于所述源代码元素生成的所述多个令牌中的至少一个被从所述二叉ast中省略。
31.根据权利要求25至30中任一项所述的源代码评估节点(1600),其中生成所述多个令牌包括基于对所述源代码元素的词汇分析生成所述多个令牌。
32.根据权利要求25至31中任一项所述的源代码评估节点(1600),其中所述源代码元素包括字母、字符、数字和运算符。
33.根据权利要求25至32中任一项所述的源代码评估节点(1600),其中对于所述二叉ast令牌节点中的每一个,所述相应数值包括数值元组。
34.根据权利要求25至33中任一项所述的源代码评估节点(1600),其中所述存储器还包括在由所述处理电路执行时使所述源代码评估节点(1600)进行以下操作的指令:
35.根据权利要求34所述的源代码评估节点(1600),其中评估包括以下至少一项:使用所述ml模型预测所述源代码的软件漏洞、检测所述源代码的漏洞、识别所述源代码中的错误、和/或校正所述源代码中的错误,其中所述ml模型基于所述源代码元素的数据集并基于以下至少一项:与所述数据集的源代码元素相对应的对应的相应漏洞、和/或与所述数据集的源代码元素相对应的相应错误中的至少一个。
36.根据权利要求34至35中任一项所述的源代码评估节点(1600),其中所述源代码元素是第一源代码元素,其中所述多个令牌是第一多个令牌,其中所述二叉ast表示是第一二叉ast表示,并且其中所述多个节点是第一多个节点,并且其中所述存储器还包括在由所述处理电路执行时使所述源代码评估节点(1600)进行以下操作的指令,
37.一种计算机程序,包括要由源代码评估节点(1600)的处理电路(1603)执行的程序代码,由此所述程序代码的执行使所述源代码评估节点(1600)执行根据权利要求1至12中任一项所述的操作。
38.一种计算机程序产品,包括非暂时性存储介质,所述非暂时性存储介质包括要由源代码评估节点(1600)的处理电路(1603)执行的程序代码,由此所述程序代码的执行使所述源代码评估节点(1600)执行根据权利要求1至12中任一项所述的操作。