MACER:加速编译错误修复的模块化框架
1. 引入
对于新手程序员而言,编程环境反馈(如编译器错误信息)虽在形式上无误,但在指导他们纠正错误方面却常常显得力不从心。这主要源于两个方面:其一,错误信息中使用的专业术语可能让初学者感到陌生;其二,编译器可能无法准确理解用户的意图。
例如,在C语言里,对于整数变量 i
,语句 0 = i;
会产生“表达式不可赋值”的错误。实际上,问题仅仅是赋值方向有误,但错误信息引入的“表达式”和“可赋值性”概念却可能使初学者困惑。
面对这样的反馈,初学者往往需要向人类导师寻求帮助,然而这种方式并不具备可扩展性。为解决这一问题,MACER应运而生,它能够自动为存在编译错误的程序提供修复建议,从而减轻人类导师的负担。
1.1 相关工作
- DeepFix :它是最早运用深度学习(序列到序列模型)来同时定位和修复错误的方法之一。
- TRACER :通过将修复流程划分为修复行定位和修复预测,取得了更好的性能。此外,它还引入了严格的
Pred@k
指标,该指标将预测的修复与学生期望的实际修复进行对比,而不是像现有的修复准确率指标那样仅仅统计编译错误的减少情况。 - RLAssist :引入了强化学习,从而消除了对标记训练数据的需求,但训练时间较长。
1.2 主要贡献
- 模块化修