【摘要】 “编译原理”是计算机专业的核心理论课程之一,兼具较强的理论性和实践性。针对我校“编译原理”课程的教学实践,本文探讨了该课程教学内容的选取和实践教学设置。以利于充分发挥其在课程教学中的优势和作用,提高教学质量。
【关键词】 编译原理;教学内容;实验教学
榆林学院 信息工程学院教改项目(《编译技术及应用》课程教学改革探索与实践)
编译原理是计算机科学与技术专业的专业必修课,是计算机学科的核心课程。主要介绍了高级程序设计语言编译系统的构造原理、设计方法以及主要实现技术,综合了数据结构、计算机语言、算法和软件设计、离散数学等知识。涉及形式语言描述、有穷自动机等抽象内容。也被视作该专业最难的课程之一。根据我院本课程的教学目标:通过编程语言实现技术的学习,了解编译程序的实现原理和技术;利用从本课程学习到的知识,增强编写和调试程序的能力。同时结合我校的实际情况,对本课程的教学与实践内容进行了选取。
1、“编译原理”在本科教学中的地位与教学现状
“编译原理”课程是专门介绍如何将高级语言翻译为低级语言的编译程序的工作原理和方法的课程。因此,可以说该课程是建立在高级语言或汇编语言基础上,综合运用编译理论及多门前修课程如“数据结构”“离散数学”等课程的相关知识来解决高级语言在机器上运行的实际问题的一门课程。课程内容丰富,具有严密的逻辑性,对提高学生计算机软件素质具有很大作用,可以使学生真正了解计算机的工作过程,认识计算机信息处理的实质,并综合运用所学的软件设计技术来分析解决问题。
教学效果不理想:课程直观性不强且理论性强,而且很多理论性概念容易搞混。通常教学过程并不涉及编译器的具体实现,因此学生学起来没有兴趣。理论知识理解不透彻影响学生的动手能力。由于涉及到离散数学、高级程序编程等课程,综合性、连贯性均很强。诸多原因致使实践环节相对薄弱。
2、教学内容的选取
针对我校刚升本的一般本科院校,教材采用及教学内容的选取应强调对编译原理和技术的宏观理解及全局把握,而不要把学生的注意力分散到一些细节的算法上,在讲述各章的理论的同时要有一些C语言小程序作为例题或习题。结合编译的各个阶段,对教学内容的选取如下:
词法分析:本部分主要以正规式、NFA(不确定的有限自动机)、DFA(确定的有限自动机)及其最小化为主线来讲解,同时对词法分析器进行介绍,演示用C语言写的一个简单语言的词法分析器,并要求学生上机实现;
语法分析:这一部分中,上下文无关文法是必备的基础知识。语法分析包括自上而下与自下而上的语法分析二种。
语义分析和中间代码的产生:静态语义检查通常包括:类型检查、控制流检查、一致性检查、相关名字检查,重点应放在类型检查上。中间代码生成主要介绍各种形式的中间语言,把赋值语句和各种控制流语句翻译成中间代码的语义动作。
属性文法与语法制导翻译:语法制导的定义和语法制导的翻译方案是描述编程语言翻译的两种常用形式方法。
运行时存储空间的组织和管理:这是最需要搞明白的部分。尤其在用C这样比较低级的语言时,掌握这部分内容对编写程序和程序排错都很有帮助。
代码生成及优化:选择一种采用简单的寄存器分配策略的代码生成算法加以介绍,让学生对代码生成有所了解即可。用实例来介绍各类优化,让学生明白编译器能完成哪些优化,而不要给学生介绍各种优化算法。
3、实验内容的选取
设计一组适宜的实验内容:首先,要将编译理论和方法在实验中得以概括,使学生不仅掌握它们本身的具体应用,而且掌握由这些理论和方法所构造的编译程序的各个部件是如何在整个系统中协调运行的,这是实验最重要的目的之一。其次,必须合理地简化,使学生比较容易完成。针对编译原理课程的特点及要求,共设置了五个实验项目。这组实验既和理论课内容相辅相承,同时相互之间又互相关联,构成了一个实验整体:
1)、消去C、C++程序中的注释
对给定的带注释的C语言源程序,利用该程序去掉注释,输出去除注释的源程序。
2)、词法分析(必做,4学时)
通过设计编制调试一个具体的词法分析程序,加深对词法分析原 理的理解。
内容:用扩充的BNF表示例如:
<标识符>→<字母>{<字母><数字>}
3)、递归下降分析法(4学时,选做)
根据给定的文法编制调试递归下降分析程序,以便对任意输入的符号串进行分析。
内容:用扩充的BNF表示例如:
<赋值语句>→<标识符>=<表达式>
4)、语法分析程序LL(1)(4学时,必做)
通过该实验使学生掌握描述语法规则的文法。
内容:对给定的文法建立预测分析表,利用预分析法对实验一中词法分析产生的符号进行语法分析,对符合下述文法描述的字符串(表达式或赋值语句),给出中间代码,不符合的字符串给出错误信息。
5)、语法分析程序LR(1)(4学时,必做)
通过该实验使学生加深对语法分析中自下而上分析法中的LR分析法的理解。
对给定的文法手工建立LR(1)分析表;利用LR分析法对实验二中词法分析产生的符号进行语法分析,对符合实验中文法描述的字符串(表达式或赋值语句)给出中间代码;不符合的字符串给出错误信息。
4、“编译原理”课程教改思路
根据培养目标和本专业主干课程间的内在关系来决定教学内容和教学方法。在“编译原理”教学过程中,要结合某种高级语言(如C语言),对其难以掌握、容易出错的语法难点用编译理论加以分析,培养学生灵活运用所学理论知识分析题、解决问题的能力。另一方面,要加强课外阅读指导。可布置学生阅读一些简单的由文法定义的网络协议等资料,拓展知识面,了解形式语言和自动机理论在计算机领域中的广泛应用。课程的实验,以编译理论中的一些经典算法的实现为主,培养学生的实践能力和动手能力;也可以通过对算法的实现的练习,准确、牢固地理解和掌握这些算法,从而提高实际应用能力。本课程的课程设计,要充分考虑编译理论与实际应用的结合,突出开创性和实用性。
5、结语
编译原理课程在计算机课程体系中的重要地位,决定了其课程建设和改革的长期性,对培养计算机专业的人才也有着重要的作用,探索该课程的教学方法,提高教学质量是从事计算机教育工作者的必须重视的问题,也是一个永远值得探讨的问题,我们根据我系的实际情况合理的运用现代手段,综合考虑多种因素,将该课程的教学改革推向更科学的发展道路。
参考文献
[1] 编译原理课程的教学研究与探索[J].教育信息化,2005(10):10-12.
[2] 张昱,陈意云,郑启龙.编译原理课程的教学方法和教材建设[J].中国大学教学,2005,(7):61-62.
[3] 胡作进,胡林生.编译原理课程教学改革刍议[J].安徽广播电视大学学报,2006,(4):55-57.
[4] 阎立钦.创新教育[M].教育科学出版社,1999:23-25.