《编译技术》课程教学的一些体会

来源:百度文库 编辑:神马文学网 时间:2024/04/26 12:16:54
《编译技术》课程教学的一些体会 北京航空航天大学 计算机学院 张莉        可能是因为北航工科院校的特点,我们的编译课程一直采用了《编译技术》这个名字,意在强调编译系统的构造及其相关技术。            曾经一度,有人讲我们的学生毕业后很少做编译器了,是否不用学编译课程了。我不这样认为。虽然,我们重在介绍编译系统的构造和相关技术,但是在这个过程中,我们介绍了计算机领域三个非常重要的概念和技术:1)高级程序设计语言的工作原理;2)一种程序/模型转换的方法:实现模型从一种语言表达形式到另一种语言表达形式的(语义)等价转换技术;3)软件系统的概念。毕竟对于大多数本科生而言,编译系统是他们构造的第一个相对完整的软件系统。而之前更多是针对语言、数据结构和算法的程序设计练习。             基于这三个定位,我们在教学过程中考虑如何将这三点有机的结合起来,贯穿整个教学过程。尽可能做到问题驱动、目标驱动,重视系统性,让大家理解为什么要学习“枯燥”的理论部分。 
       第一,大家都认为编译课难学、难讲,尤其是理论部分。经过多年的教学,我发现学生更多的是不理解为什么要学那么多理论、那么多分析方法,不能很好的建立之间的逻辑关系;还有就是不理解学编译有什么用。对此,我们采用问题驱动的方法,在讲解过程中不断提出问题。如讲语法分析部分,介绍了递归子程序法,可以编写某些语法的编译程序,但是我们必须对于每一个文法手工编写相应的编译程序,于是一个问题是:是否可以找到一种机器自动生成编译程序的方法呢?由此,逐渐引出LL(1)分析法。再由自顶向下分析法的不足引出自底向上分析法。从而保证整个课程有一条清晰的线索贯穿各个知识点,并在讲解过程中不断强化这条线索。             第二,是编译课程的实践性。这是一门实践性很强的课程。学生要真正理解编译系统,往往是在做完编译课程设计之后。为此,我们要求所有的学生都要完成一个编译系统(从词法分析到程序执行),无论大小、复杂与否,从而真正理解整个编译过程,以及系统的运行过程。为到达这个目标,我们设计了不同难度系统的题目:包括不同复杂程度的文法、生成不同的代码(从伪代码,到X86汇编、MIPS汇编指令等)、是否要求进行代码优化以及不同的代码优化要求等,从而满足不同基础的学生进行课程实践的要求。            第三,是考虑编译技术的实用性。作为一门介绍高级程序设计语言原理的课程,对于编写高质量的程序是非常实用的。学了编译技术,学生理解了编译过程和程序执行过程,对于提高学生的程序调试能力是非常有用的。为此,我们也介绍了一些调试工具,提高学生的编程水平。       编译课程面临很多挑战:随着技术的发展和社会的需求,如何平衡基础性和实用性、前端和后端(尤其是优化技术)的讲解比例、基础性和前沿性(新的语言特征的处理、并行编译技术、面向对象编译技术)......希望和更多的同仁聚在一起,交流编译课程教学中取得的经验,研讨面临的挑战和问题。 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hzbooks/archive/2009/07/14/4347299.aspx