同学们可能都有过使用高级程序设计语言编写程序的经历。当我们给计算机输入一段程序以后,计算机就可以按照我们的意图去工作。我们都知道,由0和1构成的机器代码才是可以被计算机直接理解的语言。因此,用高级语言编写的程序,最终都要“翻译”成由0和1构成的机器代码才可以在计算机上执行,这一翻译过程,就称为编译。那么,计算机是如何将高级程序设计语言编写的程序自动翻译成机器代码的呢?通过这么课程的学习,我们就可以找到答案。
世界著名的计算机科学家Alfred V.Aho在他的经典著作《编译器》的第1章第1句话写道:“编写编译器的原理和技术具有十分普遍的意义,以至于在每个计算机科学家的研究生涯中,本课程中的原理和技术都会反复用到。”这句话点明了编译原理这门课程在计算机专业中的重要地位。
本课程共计20讲。
第1讲 绪论
第2讲 程序设计语言及其文法
第3讲 词法分析
第4讲 语法分析_1
第5讲 语法分析_2
第6讲 语法分析_3
第7讲 语法分析_4
第8讲 语法制导翻译_1
第9讲 语法制导翻译_2
第10讲 语法制导翻译_3
第11讲 中间代码生成_1
第12讲 中间代码生成_2
第13讲 中间代码生成_3
第14讲 中间代码生成_4
第15讲 运行存储分配
第16讲 代码优化_1
第17讲 代码优化_2
第18讲 代码优化_3
第19讲 代码优化_4
第20讲 代码生成
高级程序设计语言
数据结构
集合与图论
设置“合格”(达到60分)、"优秀"(达到80分)两档课程标准,由任课教师签发课程结业证书,其中成绩“优秀”者将颁发优秀证书。
Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman. Compilers: Principles, Techniques and Tools (Second Edition). Pearson Education, Inc. 2006
Alfred Aho ect. 《编译原理》本科教学版,赵建华等译,机械工业出版社,2010.3
Q:我将来不打算从事编译器的开发工作,为什么还要学习编译原理这门课程?
A:(1)首先,这门课程可以让我们更加深刻地理解高级语言程序的内部运行机制。例如,对于程序中声明的数据对象,在内存中是如何为它们分配空间的?在程序运行的某一时刻,既可以访问本过程声明的局部数据对象,还可以访问过程外声明的非局部数据,如何找到这些非局部数据?通过这门课程的学习,我们还可以了解到编译器是如何自动诊断出源程序中的错误并给出诊断信息的。同学们可能接触过很多种编程语言。但是,我们学习一门技术,不仅要知其然,还要知其所以然。同学们有没有思考过每一种语言为什么要这样定义语法?事实上,每一种语言的语法都不是随便定义的,其背后有着深刻的道理。编译原理就是这样一门课程,它教给我们隐藏在编程技术后面的基本原理。掌握了这些基本原理,无论语言如何更新换代,我们都能应对自如,不被技术的发展所淘汰。
(2)这门课教给我们的不只是编译器构造的基本原理和流程,同时,还教给我们如何严谨地去思考、编写程序。通过本课程的学习,我们对编程也会有更深入的了解。对于代码应该怎么写,为什么要那么写,怎么写更好,错误是如何出现的,如果出错的后果是什么等等都能有理论到实践的全面认识。
(3)本课程非常有助于锻炼我们的逻辑思维能力。编译原理蕴含了计算机科学解决问题的基本思路和方法,即 “形式化→自动化”。
(4)本课程涉及的理论和方法在自然语言处理、模式识别、人工智能等领域都会或多或少地被用到。
(5)真正写编译器几乎不会用到,但有可能写简单的脚本解释器或使用、修改别人的解释器。
Q:学习本课程之前是否需要先学习《形式语言与自动机理论》?
A:本课程内容只涉及到少许形式语言与自动机理论方面的知识,并且已将对相关知识的讲解渗透到了课程相关部分,因此,在学习本课程之前可以不必先学习《形式语言与自动机理论》。