目前全国计算机应用能力等级考试及各省的高校计算机教学水平考试都有上机操作考试,编程考试是其主要内容之一。在编程考试中,一方面,由于考生人数多,必须采用机器评卷;另一方面,由于考生之间水平差距较大,针对同一问题编写的程序千姿百态。编译、连接、运行都可能出错,尤其是运行过程可能会产生死循环,因此,目前还没有采用完整的源程序作为机器评卷的依据。现在已投入使用的采用机器评卷的考试题型有填写问题的结果和填写少量语句两种。前一种题型的缺点一是容易舞弊,二是有些问题不编程也可得到结果;后一种题型的缺点是,难以看出考生独立解决问题的能力。因此有必要提出一种基于完整源程序分析且能采用机器阅卷的考试题型及评卷算法,吸取以前机器评卷系统的优点,运用其部分设计思路,结合了自己的思想设计完善编程考试机器评卷系统。加强自身对计算机系统知识运用能力的锻炼。
此编程考试机器评卷系统通过对考生编制的每个源程序的分析过程给出评分。
在计算机科学的课程中,编译原理占有非常重要的位置,它是每个优秀的计算机专业人员必修的一门课程。它主要介绍编译程序的基本构造、一般设计方法和常用实现技术,讲解编译程序自动构造的原理和工具。具体内容包括:形式语言、有穷自动机原理及词法分析程序的自动构造、自上而下和自下而上的语法分析、语法制导翻译及中间代码生成,目标程序运行时的存储组织策略及代码生成等等。并结合教授内容,安排学生在剖析一个简单的编译程序的基础上,完成编译程序的有关实验。经过本课程的学习,要求学生不但掌握一般高级语言编译程序的初步的基本技能,并能为不同模式和不同领域的语言的实现方案寻找解决途径,另外还能运用编译程序构造的原理和技术完成相关软件工具的设计和开发工作。
词法分析阶段的任务是对构成源程序的字符串从左到右进行扫描和分解,根据语言的词法规则,识别出一个一个具有独立意义的单词( 也称单词符号, 简称符号 )。语法分析的任务是在词法分析的基础上, 根据语言的语法规则从单词符号串中识别出各种语法单位( 如表达式、说明、语句等 ) ,并进行语法检查,即检查各种语法单位在语法构上的正确性。语义分析与中间代码的生成。语义分析的任务是首先对每种语法单位进行静态的语义审查,然后分析其含义,并用另一种语言形式 (比源语言更接近于目标语言的一种中间代码或直接用目标语言 ) 来描述这种语义。代码优化的任务是对前阶段产生的中间代码进行等价变换或改造,以期获得更为高效即省时间和空间的目标代码。编译程序在工作过程中需要建立一些表格,以登记源程序中所提供的或在编译过程中所产生的一些信息,编译各个阶段的工作都涉及到构造、查找、修改或存取有关表格中的信息,因此,在编译程序中必须有一组管理各种表格的程序。
本课题的名称为:编程考试机器评卷系统。编程考试是计算机等相关专业的常见考试,其具体要求为对指定的题目设计算法并使用考试所规定的编程语言(如:C语言、JAVA语言、python语言)编写程序实现其设计的算法以完成题目的要求。由此我们可以把本课题按照要求分为两大功能模块来完成:某种编程语言的解析(语法分析、词法分析等);评分系统的设计(如何针对错误来打分、分数如何存储与显示给用户)。
a) 某种语言的解析:本模块是系统中最重要的模块也是最难实现的模块是其他模块的基础。在这里选用最熟悉的、使用也最为广泛的C语言进行解析。C语言有着较为复杂的语法与词法规则。在本课题中拟模仿微软的经典编译器VC++的设计,来完成对C语言的解析,包括语法词法分析、关键字的高亮现实、输出程序中出现的错误等等。显示风格模拟VC++6.0的界面设计。
评分系统的设计:机器评卷永远也代替不了人来评卷,使用机器评卷系统终归会遇到很多机器很难解决的问题。例如在程序中某一处发生用户丢失标点符号,这个现象对于评卷来说是一个小问题,但是对于程序来说就是一个大的问题(语法错误程序无法通过编译)。而且机器评卷永远也不可能如人评卷那样准确。因此,在本课题中评卷系统的设计遵守两大原则:尽量体现人性化设计对于小错误、小问题不给予严重的扣分;模拟VC++6.0的编译功能,已其检查的出的错误为评分标准。