【技术实现步骤摘要】
基于上下文相关错误模型的编程提示生成方法
[0001]本专利技术属于计算机
,涉及修复错误程序技术和自动化编程提示技术,具体涉及一种基于上下文相关错误模型的编程提示生成方法。
[0002]专利技术背景
[0003]近年来,越来越多的学生开始学习计算机编程,自动且准确地为学生生成个性化的编程提示可以使得他们更好地掌握编程技能。因此自动化编程提示技术受到了关注。目前,针对编程提示生成问题,国内外已有若干工具或系统实现,所采用技术包括基于图的方法、基于聚类的方法和基于程序合成的方法。
[0004]现有的编程提示生成方法,所存在的问题包括:(1)生成提示效率低下,需要人工提供经验信息;(2)抗干扰能力差,由于编程题目的开放性,同一个问题往往对应多种解决方法,使用不同方法解决问题的代码构成了数量巨大的可行解空间,现存的编程提示生成方法极易受到可行解空间大小的影响;(3)生成提示不够个性化,无法为学生提供准确的错误程序修复提示;(4)可扩展性差,往往与具体题目关联。
技术实现思路
[0005]针对上述现有问题,本专利技术提供了一种基于上下文相关错误模型的编程提示生成方法,提出了一种上下文相关的错误模型(contextual error model,CEM),研究如何高效地从已有错误
‑
正确代码对中学习到常见错误的上下文信息,并利用程序中的上下文信息为学生生成个性化的编程提示,以用于修复错误程序。
[0006]本专利技术提供了一种基于上下文相关错误模型的编程提示生成方法,包括 ...
【技术保护点】
【技术特征摘要】
1.一种基于上下文相关错误模型的编程提示生成方法,其特征在于,包括如下步骤:(1)对程序建立抽象语法树,采用根节点路径描述抽象语法树中节点的上下文信息;设计上下文相关错误模型CEM如下:CEM={ε=<δ,λ:g
b
→
g
a
>|δ∈{update,add,delete},λ∈Λ,g
b
∈G,g
a
∈G}其中,模型CEM包括一系列上下文相关的重写规则ε;δ表示重写规则的编辑动作,add表示新增节点,delete表示删除节点,update表示更新节点;Λ为根节点路径集合,λ为重写规则发生的根节点路径;g
b
、g
a
分别表示在根节点路径λ下重写规则动作发生前和发生后的节点,G表示程序的编程语言的所有抽象语法树节点类型组成的集合;定义函数为执行上下文相关错误模型中重写规则的函数,如下:其中,add(g
a
,g
b
)表示将g
a
节点插入到g
b
节点后,delete(g
b
)表示删掉节点g
b
,update(g
a
,g
b
)表示使用节点g
a
替换节点g
b
;(2)根据已有的错误
‑
正确代码对构造上下文相关错误模型,从中学习对错误程序代码的解决方法,获得上下文相关错误模型;(3)利用上下文相关错误模型修复错误程序,根据修复过程为错误程序生成相应的编程提示,包括:从上至下遍历待检测程序中每个节点,对每个节点的根节点路径,在上下文相关错误模型中进行路径约束判断,寻找错误代码匹配的重写规则;将错误代码匹配的上下文相关错误模型中重写规则的变量与满足路径约束的语法树节点中的变量进行映射;计算待检测错误程序相对上下文相关错误模型的平均语义得分,根据该分数决定是否执行节点所匹配的重写规则。2.根据权利要求1所述的方法,其特征在于,所述的步骤(2)中,利用已有的错误
‑
正确代码对自动构造上下文相关错误模型,包括:步骤2.1,获取错误
‑
正确代码对对应的两棵抽象语法树,获取两棵抽象语法树的根节点的直接子节点序列,分别作为错误子序列和正确子序列;步骤2.2,利用编辑距离算法计算将错误子序列转化为正确子序列的编辑动作序列;设错误
‑
正确代码对中错误程序在根节点路径λ下的所有直接子节点为τ
wrong
,正确程序在根节点路径λ下的所有直接子节点为τ
correct
,len
wrong
为τ
wrong
的大小,len
correct
为τ
correct
大小,根据下面公式构造小,根据下面公式构造小,根据下面公式构造表示τ
wrong
和τ
correct
之间的编辑距离;
由上面公式获得从τ
wrong
到τ
correct
的一个编辑动作序列,当错误子序列和正确子序列中节点不匹配时,根据上式获得编辑动作action,由编辑动作序列得到当前根节点路径的一系列上下文相关的重写规则;步骤2.3,输出上下文相关错误模型,该错误模型包含从两棵抽象语法树中学习到的对相应错误程序代码的解决方法;对不同错误
‑
正确代码对执行步骤2.1和2.2,获得包含对不同错误程序代码解决方法的上下文相关错误模型。3.根据权利要求1或2的方法,其特征在于,所述的方法中,获取根节点路径的方式如下:设g为需要求解的抽象语法树中的节点,根据下面函数ζ(g)来求解节点g的根节点路径:其中...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。