前言:我们精心挑选了数篇优质编译原理论文文章,供您阅读参考。期待这些文章能为您带来启发,助您在写作的道路上更上一层楼。
CDIO工程教育模式是能力本位的培养模式,其优势在于让学生以主动、团队合作、课程与课程之间有机联系的学习方式,获取与工程实践相关的知识与能力。CDIO培养大纲将工科毕业生的能力分为工程基础知识、个人能力、团队合作能力和工程系统能力4个层面,大纲要求以综合的培养方式使学生在这4个层面达到预定目标。只有把知识、能力、社会需求融合起来,以能力为导向,以学科知识和社会需要为依托,整合课程组织结构,才能培养出符合社会经济发展要求的工程技术人才。CDIO工程教育以实际应用项目的开发过程为主线,提炼出项目开发经历的构思、设计、实施、运行4个主要环节,培养学生系统开发的能力[3-4]。实施CDIO工程教育模式,基本原则是落实“做中学”以及“基于项目的学习”,它体现了现代工程师所应具备的服务于现代工业产品从构思、设计、实现到运行的全过程所必须拥有的基本能力。
课程教学改革从以下4个方面展开。1)学生分组,导入项目。课程教学以项目导入的方式开始,首先鼓励学生搜集编译基础理论和技术在计算机应用领域的成功案例;其次引导学生搜集开源的编译工具,按照支持的源语言和语法分析方法分类。以上两项前期工作对应CDIO模式的构思部分,需明确客户的需求,考虑技术、企业战略和制度等因素,不断改进概念、技术和商业计划。项目的最终目标是用C语言编写一个PL/0语言处理系统。在教学过程中,学生分成若干个项目组,在教师的指导下编写项目计划书,划分项目的功能模块;指定各个模块的负责人,模拟实际项目开发,进行分工协作。2)案例驱动,模仿提升。CDIO工程教育模式要充分体现“做中学”,以“项目案例”为载体组织整个教学过程,以案例开发过程安排教学内容,灵活运用启发式和研究性的教学方法。课程教学要为学生构建项目开发的情景,调动学生的主动性与参与性,提高学生的实践创新能力。在编译原理课程教学过程中,我们发现有些学生学习缺乏积极性和主动性,课外缺少自主训练和探索,虽然通过了课程考核,但是实际只了解到一些基本概念和零碎的知识断点,不具备运用所学原理和技术进行编译器开发的能力。为了培养学生“构思—设计—实现—运作”编译系统的技能,我们将编译原理的学习过程分为模仿和提升两个阶段。(1)模仿阶段的主要目标是以PL/0语言处理系统为案例,引导学生学习基础知识,掌握基本算法,激发学生兴趣。项目开发分为8项子任务,这些任务可在教师的指导下完成。任务1:安装测试用C语言实现的PL/0语言处理系统;完成PL/0语言语法的EBNF描述。任务2:PL/0编译程序中词法分析程序的设计和实现。任务3:PL/0编译程序中语法分析程序的设计和实现;自顶向下递归调用子程序的方法。任务4:PL/0编译程序中语义分析和中间代码生成。任务5:PL/0编译程序中符号表的设计与实现。任务6:PL/0编译程序中运行时的存储组织。任务7:PL/0编译程序中的目标代码生成。任务8:PL/0编译程序各阶段整合运行,编写PL/0语言使用说明书。教师可展示用C语言实现的案例,要求学生模仿整个实现过程,用Java语言再次实现PL/0语言处理系统。学生则通过此案例,模拟项目开发全过程。(2)提升阶段的主要目标是让学生学习编译器开发的流程,学会运用编译技术进行项目开发。本阶段分为以下几个步骤。步骤1:编译器程序设计提高。定义一个待实现的源语言,如PL/0语言的扩充或者C语言的一个子集,要求学生用C或者Java实现编译程序。步骤2:编译技术扩展。引导学生学习面向对象语言编译技术,如收集整理开源编译器GCC的资料,描述GCC的总体结构、编译流程、代码组织。步骤3:编译器实用工具。引导学生学习嵌入式系统编译器及其工具的应用开发,包括C和Java编译器开发。步骤4:项目实训。引导学生利用编译技术进行项目开发,如设计开发C语言程序设计自动评分系统、基于语法分析技术的企业名称识别算法、基于语义分析的数据驱动型漏洞检测方法、编译原理在通信协议转换中的应用、编译原理在反病毒技术中的研究和应用等。3)开放资源,自主协作。CDIO注重自主学习能力的培养,提升学生独立解决问题的能力,同时也重视团队协作精神的培养,发挥团队的力量,协同工作完成任务。网络环境下的自主和协作学习要求教师提供充分的网络资源。在教学中,课程组搜集整理了国内外编译原理课程的教学资源,整理了各种实用编程语言及其表示规则,设计了适合学生需要的“做中学”项目和任务,并在课程的教学网络平台共享,通过开放资源和自主协作的学习,鼓励学生在课外通过网络和移动设备开展学习讨论,用课外学习弥补课程学时的不足;通过课外自学,充分发挥学生的主观能动性,锻炼学生“自主设计、自主实现、自由探索”,引导和鼓励学生积极组织并参与项目组的学习和研讨活动,让个人融入项目团队,提升整个团队的工程实践能力。4)考核评价,多点多面。CDIO注重工程实践能力的培养,工程实践能力是各种能力的综合体现,因此考核评价要兼顾这种特性。所谓多点主要是指编译原理具有纷繁复杂的知识点,因此对知识点的考核应以促进学生主动学习、研究性学习为目的,注重对学习过程的考查。教师可通过查看学习记录、平时作业和练习情况,考核学生对基本知识点的掌握情况;通过小组活动记录,查看学生在项目组讨论中的活跃度,了解学生提出问题的数量和质量以及解决问题的思路,考核学生的知识整合和应用能力。所谓多面主要是指编译原理课程在培养学生实践创新能力方面具有多面性,因此考核评价方式要有利于培养创新能力、实践技能、解决实际问题能力,从多个层面开展。教师可通过对项目构思与设计展示、子项目实施情况、项目汇报与答辩、学生的自评与互评、教师与企业工程师的评价等多种方式考核学生的专业知识、个人自身能力、团队合作能力、设计项目和开发系统能力。
3CDIO模式编译原理教学实施过程中存在的问题与对策
1)“双师型”教师队伍的建设问题目前,从事编译理论研究和技术开发的教师不多,有编译器开发经验的教师比较缺乏。编译原理课程“双师型”教师队伍奇缺。湖北省教育厅和湖北工程学院制定政策,资助并鼓励青年教师进入相关企业与工程师合作解决实践中的技术难题。同时,湖北工程学院每年派出专业课青年教师到武汉大学、华中科技大学等高校进修深造。通过这两个途径,学校可以解决“双师型”师资队伍建设的问题。2)学生实习实训平台的建设问题。毕业生就业难和符合市场需求的应用性人才短缺问题一直是高校、用人单位和毕业生共同的困扰。学生综合能力是就业成败的关键因素,CDIO工程教育模式强化工程应用实习实训平台的建设,希望为解决这种困扰提供帮助。湖北工程学院与中国航天三江集团公司合作共建的工程实践教育中心和湖北工程学院国家级大学生创新创业训练计划项目已获得教育部批准。在此基础上,计算机学院已经与国内10余家IT企业和科研机构合作共建实习实训基地,校企合作层面深化,操作方案细化,实现与行业需求的无缝对接。
4结语
1.1编译原理课程的特点及学习编译原理的目的
编译原理课程逻辑性强,理论性强,内容抽象,课时少,学生学习编译原理容易造成知识之间断裂,很难做到融会贯通。学生普遍存在畏难情绪,教学效果不理想。一般应用型本科学习编译原理目的是:掌握编译理论和基本技术,同时具有设计、实现、分析和移植编译程序等方面的初步能力,为从事计算机软件开发工作及理论研究打下坚实基础。
1.2教学中存在的问题
一般应用型本科院校学生的兴趣是应用计算机去处理现实问题而不是理论知识的获取,但是传统的编译原理教学内容理论性强,并且学生认为学习编译理论即是要构造编译器,所以学生的学习兴趣不浓。同时,学习编译原理要涉及到离散数学、组成原理、操作系统和数据结构等多方面的知识,所以学生接受吸收编译原理的理论知识和技术比较难。
1.3实践环节薄弱
编译程序是大型复杂的软件系统,在教学中一般把编译原理逻辑划分成五个阶段进行讲授,如:词法分析、语法分析、语义分析与中间代码生成、中间代码优化和目标代码生成。但是这样做易导致学生不清楚编译各个部分是如何协调工作的,尤其对于语法制导翻译技术和语义规则,学生理解起来异常困难,把复杂的编译理论和技术通过编程实现,大部分学生上机时无从下手,没有思路。
2软件工程化的编译原理教学改革
把软件工程化的思想引入到编译理论教学中,将软件工程的知识由浅入深、阶梯状、循序渐进地贯穿在编译原理实践各个阶段项目的开发中。
2.1依据应用型本科的特点进行教材建设
近几年来,经过教学团队继续不懈的努力,《编译方法及应用》教材在充分吸收国内外最新计算机教学理念和教育体系的同时,面向一般工程类院校本科教学,在基础理论之上,更加注重编译原理应用性、基本知识和基本技能的培养,集思想性、科学性、启发性、先进性和适应性于一身。自编《编译原理实验指导书》规范学生实验报告的格式,对实践涉及到的关键算法和数据存储结构给予说明,从软件工程的角度,从实验的需求、可行性报告等方面,要求学生完善文档体系,引导帮助学生完成编译原理实验。自编《编译原理习题与解析》,对知识点、重点、难点和典型算法进行深度总结,选择或设计富有启发性的例题,并对这些例题给出透彻的分析与解答,使学生掌握问题的解决方法和思路,收到了举一反三的效果,学生编译原理期末考试成绩明显高于往年。
2.2优化编译方法课程体系和教学内容
编译原理的整个知识体系是数十年来无数学术精英在形式语义学、计算数学、计算机科学等相关领域不懈探索、积累的结果。整个编译程序是一个完整的系统算法,理论性强而抽象。鉴于此,面向软件工程化改造编译理论,阶梯状迭代工程实践项目,将现代应用软件工程模型特点与编译技术紧密结合,引导学生利用大型软件的分析设计方法及手段,不断充实编译方法课程的内容,从而使得本课程的教学内容不仅具有先进性,还具有实用性。通过对知识点的概要总结、实验指导、课堂锻炼、经典习题解答、课后研讨等方式,加强学生对编译抽象理论的理解,把软件工程化思想引入到编译方法教学实践中,加强学生对编译理论与实践的相互深化与促进。
2.3基于软件工程化的教学实践
以创新性和实践性为目标,开设综合性设计性必做实验项目,引导学生利用大型软件的分析设计方法及手段进行编译原理实践,构造一个完整的编译器。按照编译程序的逻辑功能结构,将一个完整的编译实践划分为:词法分析、语法语义分析、中间代码生成、代码优化和目标代码生成。将软件工程的知识由浅入深、阶梯状、循序渐进地贯穿在编译原理实践各个阶段项目开发中。把编译理论知识内容巧妙地隐含在每个任务之中,学生以任务驱动、成立开发项目小组的形式协作完成任务。编译实践每个阶段的需求是前一个阶段的拓展,因此每一个阶段的软件开发可以看成前一阶段开发的迭代,从而锻炼学生解决大型软件开发项目中用户需求不断变更的疑难问题的能力,以及最大程度地使用重用技术的能力。教师组织开发团队进行汇报,小组内部之间经常交流情况和信息,以减少误解,删除软件中的个人特征,提高软件的质量,从而提高学生项目规划、队伍组织、工作分配、成员交流和演讲汇报等多方面的能力,培养学生的团体合作精神、团队合作进行项目研发的能力,以及采用软件工程化方法开发大型软件的能力,为研究和学习软件生产线新技术奠定基础。以创新性和实践性为目标,开设选作实践项目,如:算符优先文法的FIRSTVT、LASTVT集合的求法,算符优先文法的判断;FIRST、FOLLOW集合的求法,LL(1)文法的判断;LR(0)文法的判断,SLR(1)文法的判断。通过开设选作实践项目,拓展学生的思维,更进一步提高了学生把基础理论、基本技术、基本方法转化为解决实际问题的能力,以及理论与实践相结合的能力。
2.4编译原理技术的工程应用
形式化方法是编译理论最重要的方法,由于形式化方法是建立在严格的语法和语义规则基础上的,因此注重向学生介绍编译原理技术的工程应用,如:形式化方法在TEX科技排版系统和方正排版系统上的应用,形式化方法在数字电路设计和验证、通信电路设计和验证、需求分析描述、系统正确性验证等方面应用,取得了显著的成绩。
2.5培养编译方法教学团队
有计划、有目的地培养中青年教师。助教在完成编译原理课程的辅导、作业批改、实验辅导、软件综合课程设计的安排和实施等的基础上,参与编译原理课程、离散数学、汇编语言程序设计课程的建设,并参与课程大纲的讨论及教学计划的制订,获得了多项教改成果。课程团队还鼓励青年教师把先进的科研方向带进本科生课堂,实现科研与教学的有机结合,不仅有利于提高授课内容的先进性,也有利于锻炼年青教师的创造性和责任感。通过教学实践、实验教学的训练以及定期组织教学研究讨论,青年教师的教学态度得到进一步端正、教学方法得到进一步丰富,教学水平也有了很大的提高。课程团队还让青年教师通过科研的实际锻炼提高自己的研究能力,扩展知识面。课程团队目前已建立起一支强有力的教学梯队,形成了以高素质教师为骨干力量的教师队伍。
3结语
【摘要】本文根据编译原理课程的特点,结合自己的教学经验,探讨了普通本科院校编译原理的实践教学内容的设置,对普通高校更深入的教学改革和创新人才的培养具有一定的意义。
【关键词】编译原理教学内容课程实验
1引言
编译原理课程是计算机科学与技术专业的重要专业课,它不仅能帮助学生更深入地了解计算机以及计算机程序的本质,还能提高学生进行问题求解的能力。本课程的理论性和实践性都很强。国外和国内分别从二十世纪六十和八十年代开始设置“编译原理”课程,从文献[1,2]两本专著的内容可以看出,几十年来,“编译原理”课程可以讲授的内容越来越多。设置该课程的目的在于系统地向学生讲叙编译程序设计的基本理论、编译系统的结构及编译程序各部分的设计原理和实现技术。通过对这些知识的学习,使学生既能掌握编译理论和编译方法等方面的基本知识,又具有设计、分析、实现和维护编译程序等各方面的综合能力。该课程一般包括理论教学和实验教学两部分。编译原理理论知识包括形式语言、有穷自动机等抽象内容及大量的算法,较难理解和掌握,因此“编译原理”的实验教学对于深化学生对所学理论知识的理解,提高学生的理论联系实践的能力和编程水平具有重要的作用。
本文根据编译原理课程的特点,结合自己的教学经验与我院的实际情况,探讨了普通本科院校编译原理的实践教学内容的设置。
2课程实验的重要性
编译原理是集理论与实践于一体的一门课程,在理论课中所介绍的基本概念、原理、方法和算法,一定要通过实验加以理解和吸收,才能能够达到真正的理解、吸收和掌握。编译原理课程实验的内容主要放在对词法分析、语法分析和语义分析、中间代码生成、中间代码优化和目标代码生成的方法上。由于编译原理课程有很强的理论性与实践性,在学习时普遍感到内容抽象,不易理解,掌握起来难度很大。因此通过教学实践和对学生所做的调查表明,设计一组与理论内容相配套的实验是十分必要的。
3课程实验的设计
针对编译原理课程的特点及要求,共设置了五个实验项目。这组实验既和理论课内容相辅相承,同时相互之间又互相关联,构成了一个实验整体。
实验一
题目:消去C、C++程序中的注释(2学时,必做)
实验目的:掌握C语言文件的基本操作,消除源C语言程序中的注释,为以后的编译提供方便。
实验要求:对给定的带注释的C语言源程序,利用该程序去掉注释,输出去除注释的源程序。
实验二
题目:词法分析(必做,4学时)
目的:通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。
要求:编写程序对输入的源程序字符串进行词法分析,对符合下述文法描述的字符串,建立单词符号表,不符合的字符串给出错误信息。
内容:用扩充的BNF表示如下:
<标识符><字母>{<字母><数字>}
<整型常数><数字>{<数字>}
<算符>+-*/()=
<字母>abc…yABC…Y
<数字>1234567890
实验三
题目:递归下降分析法(4学时,选做)
目的:根据给定的文法编制调试递归下降分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对递归下降分析法的理解。
要求:对给定的文法,利用递归下降分析法对任意输入的符号串进行分析语法分析,对符合下述文法描述的字符串(表达式或赋值语句),给出中间代码,不符合的字符串给出错误信息。转中国-内容:用扩充的BNF表示如下:
<赋值语句><标识符>=<表达式>
<表达式><表达式>{+<项>-<项>}<项>
<项><项>{*<因子>/<因子>}<因子>
<因子><标识符>(<表达式>)
即:Si=E
EE+TE-TT
TT*FT/FF
Fi(E)
实验四
题目:语法分析程序LL(1)(4学时,必做)
目的:通过该实验使学生掌握描述语法规则的文法,以及加深对语法分析中自顶向下分析法中的预测分析法的理解。
要求:对给定的文法建立预测分析表,利用预分析法对实验一中词法分析产生的符号进行语法分析,对符合下述文法描述的字符串(表达式或赋值语句),给出中间代码,不符合的字符串给出错误信息。
内容:用扩充的BNF表示(同实验三)。
实验五
题目:语法分析程序LR(1)(4学时,必做)
目的:通过该实验使学生加深对语法分析中自下而上分析法中的LR分析法的理解。
要求:对给定的文法手工建立LR(1)分析表;利用LR分析法对实验二中词法分析产生的符号进行语法分析,对符合实验中文法描述的字符串(表达式或赋值语句)给出中间代码;不符合的字符串给出错误信息。
内容:用扩充的BNF表示(同实验三)