专家访谈:《编译技术》课程教学的一些体会

 

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

 

北京航空航天大学 计算机学院

 张莉

 

       可能是因为北航工科院校的特点,我们的编译课程一直采用了《编译技术》这个名字,意在强调编译系统的构造及其相关技术。

    

       曾经一度,有人讲我们的学生毕业后很少做编译器了,是否不用学编译课程了。我不这样认为。虽然,我们重在介绍编译系统的构造和相关技术,但是在这个过程中,我们介绍了计算机领域三个非常重要的概念和技术:1)高级程序设计语言的工作原理;2)一种程序/模型转换的方法:实现模型从一种语言表达形式到另一种语言表达形式的(语义)等价转换技术;3)软件系统的概念。毕竟对于大多数本科生而言,编译系统是他们构造的第一个相对完整的软件系统。而之前更多是针对语言、数据结构和算法的程序设计练习。

      

       基于这三个定位,我们在教学过程中考虑如何将这三点有机的结合起来,贯穿整个教学过程。尽可能做到问题驱动、目标驱动,重视系统性,让大家理解为什么要学习“枯燥”的理论部分。


       第一,大家都认为编译课难学、难讲,尤其是理论部分。经过多年的教学,我发现学生更多的是不理解为什么要学那么多理论、那么多分析方法,不能很好的建立之间的逻辑关系;还有就是不理解学编译有什么用。对此,我们采用问题驱动的方法,在讲解过程中不断提出问题。如讲语法分析部分,介绍了递归子程序法,可以编写某些语法的编译程序,但是我们必须对于每一个文法手工编写相应的编译程序,于是一个问题是:是否可以找到一种机器自动生成编译程序的方法呢?由此,逐渐引出LL(1)分析法。再由自顶向下分析法的不足引出自底向上分析法。从而保证整个课程有一条清晰的线索贯穿各个知识点,并在讲解过程中不断强化这条线索。

      

       第二,是编译课程的实践性。这是一门实践性很强的课程。学生要真正理解编译系统,往往是在做完编译课程设计之后。为此,我们要求所有的学生都要完成一个编译系统(从词法分析到程序执行),无论大小、复杂与否,从而真正理解整个编译过程,以及系统的运行过程。为到达这个目标,我们设计了不同难度系统的题目:包括不同复杂程度的文法、生成不同的代码(从伪代码,到X86汇编、MIPS汇编指令等)、是否要求进行代码优化以及不同的代码优化要求等,从而满足不同基础的学生进行课程实践的要求。

    

       第三,是考虑编译技术的实用性。作为一门介绍高级程序设计语言原理的课程,对于编写高质量的程序是非常实用的。学了编译技术,学生理解了编译过程和程序执行过程,对于提高学生的程序调试能力是非常有用的。为此,我们也介绍了一些调试工具,提高学生的编程水平。

 

 

 

       编译课程面临很多挑战:随着技术的发展和社会的需求,如何平衡基础性和实用性、前端和后端(尤其是优化技术)的讲解比例、基础性和前沿性(新的语言特征的处理、并行编译技术、面向对象编译技术)......希望和更多的同仁聚在一起,交流编译课程教学中取得的经验,研讨面临的挑战和问题。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值