2012种子杯编程PK赛复赛说明文档.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2012种子杯编程PK赛复赛说明文档.doc

2012“种子杯”编程PK赛 复赛说明文档 编译器功能拓展尝试 队名 xxx 光学与电子信息学院 队员 徐哲钊 电子科学与技术1004班 队员 徐洁 电子科学与技术1003班 目录 编译器功能拓展尝试 1 一、编译环境说明 3 1.1开发测试环境 3 1.2程序代码目录 3 二、程序的结构 4 2.1命令行预处理 4 2.2各功能点的实现 4 三、程序的模块 5 3.1防止错误赋值 5 3.2指针归空 5 3.3无效分支 5 3.4魔鬼数字 6 3.5未使用的资源 6 3.6函数关系调用图 7 四、功能完成的情况 7 五、程序的亮点 7 六、自定义的功能 7 6.1内存检查 7 6.2未赋初值就使用 8 七、参加种子杯的感受 8 附录 9 一、编译环境说明 本部分介绍程序的开发的环境,以及从整体上叙述程序工程目录下面的源代码的作用。 1.1开发测试环境 使用的编译器为Visual Studio 2008英文版和Visual Studio 2010 中文版。程序的开发、测试、代码整理、文档编写均在win7下面完成。 1.2程序代码目录 为了使程序更加简洁易懂,将每个函数的头文件和源文件分开,并且文件名一一对应。其中头文件声明源文件中需要使用的函数,对应的源文件中则定义了函数的功能。 功能点 header、source文件名 函数作用 防止错误赋值 5_1 检测错误赋值 指针归空 5_2 指针归空检查 无效分支 5_3_1 检查if语句 5_3_2 检查while语句 5_3_3 检查switch语句 5_3_4 检查for语句 魔鬼数字 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命令行预处理 为了方便对命令的读取和处理,首先对命令进行格式化处理。由于格式化时需要替换宏,但是程序中需要检查到宏、需要考虑魔鬼数字,宏未被使用的情况,所以应该首先对魔鬼数字和宏未被使用的情况进行判断,之后再进行宏替换。 具体的格式化步骤为 其中特定字符包括 ( ) , ; = ! \ * + - 其中如果出现多个组合一起,则只在组合的字符两侧添加。例如出现=时只在字符两侧添加,不必再中间添加空格。 这样处理的优势是方便读取命令和字符串:只需要根据;,读取一行命令,根据空格读取字符串或者关键字。 2.2各功能点的实现 程序中的全局变量为 全局变量名 数据类型 作用 command string数组 储存命令 cmdCount int 命令行的数目 errLen int 错误的个数 errNum int数组 每一个错误出现的行数 errType int数组 每个错误的类型 按照需求依次实现每一个功能点,详细见程序的模块。按照顺序检查到各个错误,然后根据错误出现的行数从小到大排序、打印。 三、程序的模块 下部分分别详细介绍了各个功能实现的过程。由于程序的实现分为很多函数来实现,不可能一一细说每个函数的功能,所以在此介绍各个功能点实现的思路。 3.1防止错误赋值 错误赋值的情况仅当==号两端左端出现变量,右端出现常量时候报错。因此只需要依次检查==符号两端的变量类型,如果出现该情况则报错。其中右端为函数返回值时不需要报错,左端为数组类型的变量时需要报错。 3.2指针归空 由于每一个指针会申请地址空间,空间地址最终会被释放,因此首先查找free关键字;然后提取free后面的字符,检查是否出现给该字符赋值等于NULL的情况。如果未出现则报错。 3.3无效分支 考虑到无效分支的情况比较复杂,我们将情况分解,采取从简单到复杂的方法。分为if,while,for,switch来实现。 当出现上述关键字时候,提取括号中的变量名,然后依次向上查找是否存在给变量赋定值的情况,如果存在则报错。 分支类型 实现步骤 if,while 1、提取if,while后面的变量 2、向上检测该变量是否被赋定值 3、若存在则报错 for 1、提取for语句后面第二个分号前的变量 2、向前检测变量的值 3、判断for语句的循环条件 4、若恒不成立则报错 switch 1、提取switch后面的变量 2、得到变量值 3、在case不成立的地方报错 3.4魔鬼数字 判断

文档评论(0)

thl1006 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档