">
一、工程化方法引入编译方法实践
1.工程化方法
依托常州伍杰公司开发的统一软件数据管理系统(USDM),该管理系统支持软件开发过程的动态管理。采用工程化原理和技术来开发和维护软件,更好地从管理和技术两方面开发和维护软件[5]。各个开发小组在数据管理系统(USDM)平台上,把编译方法实践作为一个独立的产品,围绕软件产品任务书、合同或软件研制要求的规定,开展包括软件程序设计、测试、确认、验证、交付安装和维护在内的所有软件生存周期的活动。工程化强调完善文档体系,将编译方法实践开发的思想按文档规范的要求写出来,将软件的需求、设计、编程、测试全部形成文件的形式提交到USDM平台上。
2.项目管理
依托常州伍杰公司开发的统一软件数据管理系统(USDM),建设信息化实景教学平台。将软件工程的知识由浅入深、阶梯状、循序渐进地贯穿在编译原理实践各个阶段项目开发中。对学生实行项目团队式管理,即模拟真实项目团队组织方式。负责教师在该平台上实现编译方法实践各个阶段项目团队划分,指定各个团队项目经理,并给予项目经理较高权限。项目经理根据组员个人能力和今后发展方向对他们进行角色分配,如设计人员、测试人员,等等。使每个学生都能参与其中,每个人至少担任一项以上角色。学生凭借电脑或者笔记本、互联网、自己的学号,随时随地登录USDM进行项目开发。项目经理监控整个项目开发过程,从总体上把握项目的总进程和项目完成质量。教师在实践过程中与项目经理沟通并实施指导,学生根据实验要求设计算法,进行数据测试及测试结果分析。将实践的需求、设计、编程、测试全部形成文档的形式通过该平台提交。提高学生在项目规划、队伍组织、工作分配、成员交流等多方面的实践能力;培养学生团体合作精神,培养学生团队合作级项目研发的能力。
3.可视化论坛
可视化论坛提供聊天、白板、音频、视频、协同浏览等功能。其含义是项目团队工作人员在其机器上打开某个文档并进行操作浏览时,其他相关人员也可以在自己的机器上看到操作过程,操作和观看几乎是同步进行的。通过可视化论坛方便项目开发小组内部和小组之间交流信息,以便减少误解,删除软件中的个人特征,提高软件的质量。使学生提早接触大型IT企业实际工作环境,学习专业CASE工具的使用,为今后工作打下良好基础。
4.项目团队答辩
开发团队根据编译实践自己拟定汇报的内容,由教师修改审核后,负责教师和各个小组选择代表作为答辩评委,各个项目小组进行项目答辩,答辩成绩作为开发团队实践成绩一部分。负责教师在数据管理系统(USDM)平台上审核项目实践过程中的文档体系,审核成绩也作为团队成绩一部分。提高了学生研究立项、总结概括、演讲交流和团体竞争意识的实践能力。
二、编译方法实践
1.预处理程序
编写编译预处理程序,输入高级语言源程序,实现对源程序中的多余空格、注释回车换行符等处理,为以后阶段编译提供方便。
2.词法分析
词法分析程序是编译程序的第一个阶段。输入经过预处理的源程序,可以作为单独的一遍也可以作为子程序调用。根据文法或状态转换图编写词法分析程序,生成单词符号表,检查处理单词符号错误,输出出错信息和TOKEN字[6]。其中常见单词的词法规则分别如下所示:标识符规则定义:<标识符>→l<标识符>l<标识符>g无符号整数规则定义:<无符号整数>→d<无符号整数>g运算符规则定义:<运算符>→+-=*/**…<界符>→,;()…其中,l∈{a—z}中的任何字母,d∈{1—9}中的任一数字,g∈{0—9}中的任一数字。开发小组在数据管理系统(USDM)平台上,利用软件工程化方法绘制词法分析UML类图和用例图等、拟定词法分析设计方案、内容。使学生能够以工程化方法理解自动机理论在编译技术中的应用,提高形式化描述能力、词法分析模块化程序设计的能力。
3.语法分析
语法分析是编译程序核心部分,它的任务是在词法分析基础上,增加语义动作,对于给定文法中的每一个产生式,编写相应的语义子程序。在语法分析过程中,每当用一个产生式进行推导或归约时,语法分析程序除执行相应的语法分析动作之外,还要调用相应的语义子程序,对表达式、赋值语句、循环控制语句等进行语法分析、查填符号表、并检查处理语法语义错误和输出语法出错信息、生成四元式列表。其中常见表达式的语法规则如下所示:E→E+TTT→T*FFF→(E)i开发小组在数据管理系统(USDM)平台上,利用软件工程化方法与语法分析相结合,扩充编译方法语法和语义规则,锻炼学生使用软件工程化方法撰写语法分析的需求分析,语法分析项目需求是词法分析的拓展,可以看为词法分析的迭代。从而引导学生处理大型软件开发项目中用户需求不断变更的疑难问题,并且最大程度地使用重用技术。引用抽象语法树技术剪除文法冲突时引入的无用结点,拉链反填技术加深了学生对一遍扫描编译程序中目标地址未知语义规则的理解。
4.目标代码生成
在语法分析基础上,输入四元式,对四元式进行优化处理,查填符号表,出错处理,生成汇编语言代码。其中目标代码生成算法重点是寄存器分配算法,设寄存器一共R1,R2,…Rn个,对于语句A=BOPC,给A分配寄存器的算法如下:Getreg(Ri){若B占用Ri且以后不再使用B,则返回寄存器Ri,若B虽不引用但活跃且B值不在内存,则生成指令STRiB;否则从空闲寄存器中返回一个Ri;否则从已经分配的寄存器R中,选取一个最远的将来才会使用的Ri,若Ri的值不在内存则生成指令STRiB;}工程化与目标代码生成相结合,培养学生以软件工程化方法设计目标代码生成寄存器分配算法,并进行软件保证维护与测试,书写软件使用说明书等。5.实验结果的展示学生实验结果展示实现C语言完整编译器,包括源代码的查询,课程设计报告,实验内容,C语言编译结果等。
三、结论
本文依托数据管理系统(USDM),把软件工程专业工程化理论思想引入到编译方法实践各个阶段中,采用工程化方法构造并且维护一个实用独立的编译系统。可以提高学生对软件工程化理论知识的理解、对编译方法理论知识的理解能力和实践动手能力,提高撰写完善文档体系能力和项目组成员之间互相合作的能力,提高团队合作级别项目研发的能力和工程化方法开发大型软件的能力,为研究和学习软件生产线新技术埋下伏笔。
作者:刘香芹 许清 单位:沈阳航空航天大学