[发明专利]对程序竞赛型源代码按照解题方法做自动分类与评分的方法有效
申请号: | 201710883195.2 | 申请日: | 2017-09-26 |
公开(公告)号: | CN107729925B | 公开(公告)日: | 2020-03-31 |
发明(设计)人: | 孙广中;潘轶功 | 申请(专利权)人: | 中国科学技术大学 |
主分类号: | G06K9/62 | 分类号: | G06K9/62;G06F11/36 |
代理公司: | 北京凯特来知识产权代理有限公司 11260 | 代理人: | 郑立明;郑哲 |
地址: | 230026 安*** | 国省代码: | 安徽;34 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 程序 竞赛 源代码 按照 解题 方法 自动 分类 评分 | ||
1.一种对程序竞赛型源代码按照解题方法做自动分类与评分的方法,其特征在于,包括:
对数据库中针对问题P的各程序在抽象语法树上做程序变换,获得标准化后的程序;
从标准化后的程序或程序片段中提取特征,获得所有的特征集合;
基于提取的所有的特征集合进行多实例多分类学习,获得分类模型;
利用分类模型对新输入的针对问题P的各程序进行自动分类,并进行评分;
其中,所述对数据库中针对问题P的各程序在抽象语法树上做程序变换包括:控制语句变换、运算顺序敏感的运算符的变换、有副作用的运算符的变换、算术表达式的变换和逻辑表达式的变换;其中:
控制语句变换:C语言中控制语句包含if语句、switch语句、for语句、while语句和do-while语句;将switch语句转化为if语句,将for语句和do-while语句转化为while语句;
运算顺序敏感的运算符的变换:C语言中,规定运算顺序的运算有:“&&”、“||”、“?:”和“,”,引入临时变量,将一条语句分割成运算顺序不敏感的多条语句;
有副作用的运算符的变换:将所有副作用的运算符统一为“=”运算符,且每条语句最多只有一个赋值运算符;
算术表达式的变换:先用分配律展开表达式,然后消去单目的“+”运算符,并将双目的“-”运算符转化为单目的“-”运算符和双目的“+”运算符,最后将单目的“-”运算符上移,即将负号往语法树根部移动;
逻辑表达式的变换:将逻辑运算定律规则变换为双重否定律或者德·摩根律。
2.根据权利要求1所述的一种对程序竞赛型源代码按照解题方法做自动分类与评分的方法,其特征在于,在做程序变换之前,给主体部分只有一条语句的if、switch、for、while以及do-while语句添加一对大括号。
3.根据权利要求1所述的一种对程序竞赛型源代码按照解题方法做自动分类与评分的方法,其特征在于,所提取的特征分为四类:简单特征、语法树特征、数据依赖图特征和控制语句特征;
记保留字集合为:记运算符集合为:记程序中的变量集合为:程序中出现的常数集合记为CONST;语法树节点集合记为:NODEAST,语法树节点nodeAST∈NODEAST定义为如下形式的四元组:
其中,TYPE∈{KW,OP,VAR,CONST}代表节点的类型,value∈TYPE代表节点的具体取值;nson∈N代表子节点的个数,N为自然数集合,nson元组代表nson个子节点,将语法树节点的定义简化为:
数据依赖图节点集合记为NODEDDG,数据依赖图节点nodeDDG∈NODEDDG定义为如下形式的六元组:
其中,op∈OP是运算符,是操作数,nvalue是运算符op的操作数,lvalue∈VAR是存储运算结果的变量;nodeDDG被一条有向边关联,并且nodeDDG是头节点,nextl是尾节点,将数据依赖图节点的定义简化为:
提取各特征方法如下:
a、提取简单特征:简单特征包括不同保留字和运算符在程序或者程序片段中出现的次数;
保留字kwo在程序或者程序片段中出现的次数由下式定义:
其中,函数1{x}的取值范围为{0,1},符号.是一个二元运算符;
运算符opt在程序中出现的次数由下式定义:
将运算数全为变量的运算符出现的数目和存在常量运算数的运算符出现的数目分开统计,分别定义为:
和:
包含所提取的简单特征的集合记为XSimple;
b、提取语法树特征:语法树特征包括不同运算符对出现在语法树同一条边的两个节点上的数目,定义为:
其中,node0和node1为某两个语法树上的节点;
包含所提取的语法树特征的集合记为XAST;
c、提取数据依赖图特征:数据依赖图特征包括不同运算符对出现在数据依赖图同一条边的两个节点上的数目,定义为:
包含所提取的数据依赖图特征的集合记为XDDG;
d、提取控制语句特征:
1)不同的控制结构和控制结构组合在程序中出现的次数,其中控制结构组合while-if出现的次数:
其中,f为1到node0节点的深度之间的任意值;
2)不同保留字和运算符在控制语句的条件表达式中出现的次数;
包含所提取的控制语句特征的集合记为XControl;
则提取的所有的特征集合Xall为:
Xall=Xsimple∪XAST∪XDDG∪XControl。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国科学技术大学,未经中国科学技术大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710883195.2/1.html,转载请声明来源钻瓜专利网。