欢迎来到天天文库
浏览记录
ID:34955757
大小:149.50 KB
页数:9页
时间:2019-03-15
《2012种子杯编程pk赛复赛说明文档》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、2012“种子杯”编程PK赛复赛说明文档编译器功能拓展尝试队名xxx光学与电子信息学院队员徐哲钊电子科学与技术1004班队员徐洁电子科学与技术1003班目录编译器功能拓展尝试1一、编译环境说明31.1开发测试环境31.2程序代码目录3二、程序的结构42.1命令行预处理42.2各功能点的实现4三、程序的模块53.1防止错误赋值53.2指针归空53.3无效分支53.4魔鬼数字63.5未使用的资源63.6函数关系调用图7四、功能完成的情况7五、程序的亮点7六、自定义的功能76.1内存检查76.2未赋初值就使用8七、参加种子杯的感受8附录9一、编译环境说明本部分介绍程序的开发的环境,以及
2、从整体上叙述程序工程目录下面的源代码的作用。1.1开发测试环境使用的编译器为VisualStudio2008英文版和VisualStudio2010中文版。程序的开发、测试、代码整理、文档编写均在win7下面完成。1.2程序代码目录为了使程序更加简洁易懂,将每个函数的头文件和源文件分开,并且文件名一一对应。其中头文件声明源文件中需要使用的函数,对应的源文件中则定义了函数的功能。功能点header、source文件名函数作用防止错误赋值5_1检测错误赋值指针归空5_2指针归空检查无效分支5_3_1检查if语句5_3_2检查while语句5_3_3检查switch语句5_3_4检查f
3、or语句魔鬼数字5_4检查魔鬼数字未使用的资源5_5_1函数未被调用过5_5_2宏未被使用5_5_3变量未被使用5_5_4函数返回值未被使用函数关系调用图5_6打印函数关系图自定义5_7_1_Custom检查内存泄漏5_7_2_Custom检查变量使用前是否被赋初值二、程序的结构2.1命令行预处理为了方便对命令的读取和处理,首先对命令进行格式化处理。由于格式化时需要替换宏,但是程序中需要检查到宏、需要考虑魔鬼数字,宏未被使用的情况,所以应该首先对魔鬼数字和宏未被使用的情况进行判断,之后再进行宏替换。具体的格式化步骤为其中特定字符包括"("")"","";""<"">""=""!"
4、"""*""+""-"其中如果出现多个组合一起,则只在组合的字符两侧添加。例如出现">="时只在字符两侧添加,不必再中间添加空格。这样处理的优势是方便读取命令和字符串:只需要根据";",读取一行命令,根据空格读取字符串或者关键字。2.2各功能点的实现程序中的全局变量为全局变量名数据类型作用commandstring数组储存命令cmdCountint命令行的数目errLenint错误的个数errNumint数组每一个错误出现的行数errTypeint数组每个错误的类型按照需求依次实现每一个功能点,详细见程序的模块。按照顺序检查到各个错误,然后根据错误出现的行数从小到大排序、打印。
5、三、程序的模块下部分分别详细介绍了各个功能实现的过程。由于程序的实现分为很多函数来实现,不可能一一细说每个函数的功能,所以在此介绍各个功能点实现的思路。3.1防止错误赋值错误赋值的情况仅当"=="号两端左端出现变量,右端出现常量时候报错。因此只需要依次检查"=="符号两端的变量类型,如果出现该情况则报错。其中右端为函数返回值时不需要报错,左端为数组类型的变量时需要报错。3.2指针归空由于每一个指针会申请地址空间,空间地址最终会被释放,因此首先查找free关键字;然后提取free后面的字符,检查是否出现给该字符赋值等于NULL的情况。如果未出现则报错。3.3无效分支考虑到无效分支的
6、情况比较复杂,我们将情况分解,采取从简单到复杂的方法。分为if,while,for,switch来实现。当出现上述关键字时候,提取括号中的变量名,然后依次向上查找是否存在给变量赋定值的情况,如果存在则报错。分支类型实现步骤if,while1、提取if,while后面的变量2、向上检测该变量是否被赋定值3、若存在则报错for1、提取for语句后面第二个分号前的变量2、向前检测变量的值3、判断for语句的循环条件4、若恒不成立则报错switch1、提取switch后面的变量2、得到变量值3、在case不成立的地方报错3.4魔鬼数字判断魔鬼数字是在宏替换之前,只需要查找除去宏定义以后,
7、程序中出现的所有数字,如果不为-1,0,1则为魔鬼数字。3.5未使用的资源将未使用的资源分为三类,如下3.5.1函数和宏未使用的资源类型出现的次数报错条件函数函数名出现一次函数只有声明或者定义,在该处报错函数名出现两次有定义和声明,则没被使用,报错只有定义,无声明,则不报错函数名出现三次及以上不报错宏宏出现一次宏未使用,报错宏出现两次及以上不报错在对宏统计使用次数的时候忽略了宏未被使用的情况。3.5.2变量分为每个函数单独实现,首先查找变量定义时出现的位置,然后再函数内部查找变量
此文档下载收益归作者所有