课程分类

课程介绍
课程目录
用户评论
课程介绍
课程目录
用户评论

你将获得

  • 掌握某些知识点
  • 学会某些技巧(或思路)

教学服务

  • icon

    1v1专属答疑服务

  • icon

    BAT专家面试辅导

讲师介绍

  • 南京大学老师  从事教育工作 对教学很有研究 擅长生物医学方面的教育

  • 大学老教授,从事科研教学工作  参加过国家自然科学基金项目 擅长解决数学物理方面的难题 重视基础教学工作 能够从本质上上剖解问题

  • 课程详情

    一、课程发展历史概述

    编译器产生于20世纪60年代,在计算机科学技术的发展过程中发挥着巨大的作用,是开发计算机应用系统不可缺少的重要工具。编译器的原理和技术具有十分普遍的意义,在每一个计算机科技工作者的职业生涯中,这些原理和技术都被反复用到。编译器的设计涉及到形式语言和自动机理论、编程语言和类型理论、计算机体系结构、算法设计和软件工程等多个学科的知识。

    第一个编译器诞生后不久,国外就开设了编译原理课程,并且随着相关理论和技术的不断发展和完善,课程内容在不断地更新、充实和深化。例如:

    • 语法分析从介绍递归下降和算符优先分析方法过渡到主要介绍LR语法分析方法及语法分析器的自动生成;

    • 语义分析从分离地介绍各个问题的解决办法到系统地介绍基于属性文法的语法制导定义及其实现方法;

    • 运行时存储空间的组织和管理从静态分配、栈式分配、堆分配一直发展到增加垃圾收集算法;

    • 代码优化从孤立地介绍各种优化技术到突出介绍数据流分析的理论基础,强调在数据流分析的一般框架下解决各个具体数据流问题。

    编译原理课程自开设以来,一直是计算机科学技术专业学生的必修课程。

    中国科学技术大学计算机专业在1958年由老一辈计算机科学家夏培肃院士等亲自创办。创办之初就参与了中科院计算所自主设计并研制成功的我国第1台通用计算机—107机的研制。1980年前后就开设了编译原理课程,由中科院计算所研究人员主讲,采用他们基于开发BCY语言(类ALGOL60语言)编译器的经验编写的讲义。1982年成立计算机科学技术系时,由王汝传老师(现在是南京邮电大学博导)采用自编讲义主讲编译原理,以介绍编译器各逻辑阶段的流程图为课程的主要内容。

    1984年改由完成过Pascal语言编译器开发的陈意云老师主讲编译原理,从那时起到目前为止,编译原理课程的师资队伍中,除个别人外,都从事编程语言的理论和实现技术方面的研究工作,从而都很好地具备从事编译原理教学所需的理论和技术背景。

    中国科学技术大学计算机专业编译原理课程1984年开始采用陈火旺、钱家骅和孙永强编写的教材《程序设计语言编译原理》(国防工业出版社,1984);1987年开始在教学中补充Compilers: principles, techniques, and tools(Alfred V. Aho, Ravi Sethi Jeffrey, D. Ullman. New York: Addison-Wesley, 1986)书上有关属性文法和类型检查等方面的内容;1990年开始采用陈意云根据上述经典教材编写的教材。随着教学经验和相关科研工作的积累,对编译原理课程讲授内容和方法逐步形成自己的观点。为此,教材内容也在不断调整,现在采用的是陈意云和张昱编写的《编译原理》(高等教学出版社,第二版,2008)。

    编译原理的课程实践从1984年开始,以实现扩展PL/0语言到扩展PL/0抽象机的编译器和实现扩展PL/0抽象机的解释器为内容。这个实验的内容经不断充实,一直持续到2000年以后。2007年开始实施新的课程实践,它以“源语言-抽象语法树-低级中间表示-汇编代码的内部表示-x86/MIPS汇编”为主线搭建的课程实践体系,安排了各种循序渐进、规模适度、“综观全局、实现局部”、强调工程质量规范的课程设计,并提供配套的实验支持库和课程设计开发包。

     

    二、课程内容体系结构

    近十年来,我们基于下面观点不断进行教学内容更新、教学方法改革和教材编写:

    1、强调主线:让学生在宏观上理解和全局上把握编译原理和技术比掌握一些细节算法重要得多。

    2、重视编程语言有关理论和形式方法:这对深刻理解和把握编译原理和技术是必要的。 

    3、鼓励将所学理论和技术用于解决或解释实际问题:这些问题源于学生编写、编译和运行程序的实践,能激发学生学习本课程的兴趣。

    4、跟踪新技术:及时将新技术反映在教学中,利于学生了解技术的动态和发展趋势。

    课程内容粗略地可以分成如下几个板块(板块并非完全对应教材的章节):

    1、编译器各逻辑阶段的功能、接口和所采用的主要技术

    该部分包括词法分析、语法分析、类型检查(静态语义分析)、中间代码生成、代码生成和独立于机器的优化。此外,还有学习代码生成部分必不可少的运行时存储空间的组织和管理。该部分构成编译原理课程的核心。

    2、和编译技术相关的理论知识

    该部分包括形式语言和自动机理论、语法制导的定义和属性文法、类型论和类型系统、数据流分析的理论基础。这是深入把握编程语言及其实现技术的必备知识。

    3、和编译及编程相关的一些实用知识

    该部分强调编译知识与实际编写、编译和运行程序的联系,它包括:

    • 用编译原理的知识分析实际编写、编译和运行程序中碰到问题的例题或习题。

    • 编译系统和运行系统(其中无用单元收集部分因课时压缩到60学时而从未作为课堂教学内容)。

    • 依赖于机器的优化。依赖于体系结构的优化涉及一些复杂算法,不太可能作为本科生编译原理课程的内容,但是简要介绍现代计算机体系结构、指令调度、基本块调度、全局调度、软件流水、并行性和数据局部性优化等,会引导学生关注如何编写高效的程序。

    4、其它范型(paradigm)的编程语言的编译技术

    该部分简要介绍面向对象语言和函数式语言的编译(课时压缩到60学时后,函数式语言的编译未再继续作为教学内容),以拓宽对编程语言和编译技术的了解。

     

    三、教学内容组织方式与目的

    在教学内容的组织上有以下几个特点。

    1、以编译的各逻辑阶段为主线,按照它们的逻辑次序逐个介绍,这和其他学校没有什么区别。但是,我们把相关理论都穿插在这些逻辑阶段的适当位置介绍,使学生及时体会到学习这些理论的必要性。

    2、把学生的注意力集中到对编译原理和技术的宏观理解和全局把握上。对于一些枝节的算法,如计算开始符号集合和后继符号集合的算法、多态类型检查的合一算法、控制流翻译的回填技术等,仅介绍其思想而不讲具体算法,避免学生过于关注这些枝节算法。

    3、及时把编译理论和技术的发展,特别是计算机体系结构的发展对编译技术的推动等新内容补充进入教学和教材,如安全语言和类型可靠性、数据流分析的理论基础等。并及时删除过时的内容,如实际编译器已经不再使用的算符优先分析方法。目的是让学生及时了解编译理论和技术方面的最新热点。

    4、几乎每章都有理论联系实际的例题和习题,使学生体会到编译知识和日常编写、编译和运行程序是息息相关的。用编译原理的知识把这些问题分析清楚,对激发学习编译原理的热情有出人意料的效果。

    5、介绍其它范型语言的编译时,用已学技术和方法能解决的词法和语法分析、静态语义分析等都不介绍,只讲语言特征的不同给编译器设计带来的问题和解决办法。这样,花的课时不多,但对理解编程语言和学习编译技术都很有帮助。
     
    温馨提示
    • 请勿私下交易
      请勿在平台外交易。与机构和老师私下交易造成的任何损失及纠纷,腾讯课堂不承担任何责任
    • 听课说明

      1、电脑:访问腾讯课堂官网 ke.qq.com 查看我的课表或下载win/mac客户端听课

      2、手机/平板:下载腾讯课堂APP, 进入学习页面听课