编译原理是计算机科学中历史最悠久,也是最高度发展的学科之一。编译器的设计与实现集中体现了计算机科学中的最核心的思想和技术,并且和计算机科学的其他研究领域,如形式语言与自动机、算法、数据结构、程序设计语言、计算机体系结构、软件工程等都有非常重要的联系。
本课程主要讲授编译器设计与实现中的理论和技术。主要内容包括词法分析、语法分析、语法树构造、语义分析、中间代码生成、代码优化、目标代码生成等主要内容。编译原理最大的特点是强调理论和实践的结合,这也是本课程最强调的部分。在理论方面,我们将和你一起讨论丰富有趣的理论知识,包括正则表达式、有限状态自动机、形式文法、类型系统、数据流方程、不动点算法、格、闭包等;而且实践部分,我们将讨论如果选择合理的数据结构和高效的算法来实现这些理论,以及如何运用软件工程中的思想来处理编译器设计中所出现的种种复杂性。
该课程主要面向计算机专业相关学生、对计算机感兴趣的学生、及相关技术的从业人员等。对于相关专业的学生来说,学习好编译原理这门课,不但可以理解和掌握编译编译课程本身,而且对于其他相关课程的学习也会有很好的帮助。而对于计算机相关技术的从业人员,学习编译原理相关知识,不但可以深刻理解程序设计语言的设计和实现原理,而且在工作中往往要设计新的领域专用语言及其编译器,因此,这部分知识也是必须的。
课程的成绩评定将主要参考课程作业和课程考试两个部分综合给出。
其中单元作业占50%,考试占50%。
60分至80分获得合格证书,大于80分获得优秀证书
必需的基础课程:《C语言》《数据结构》
以下课程不是必须的,但有相应基础更好:《算法》《离散数学》
章 | 小节 |
第一章:编译概述 | 1.1 编译器历史 1.2 编译器主要结构 1.3 前后端划分及功能 |
第二章:词法分析 | 2.1 单词与记号 2.2 正则表达式 2.3 有限自动机 2.4 从正则表达式到有限自动机的转换 2.5 词法分析器的实现 |
第三章:语法分析 | 3.1 上下文无关文法 3.2 递归下降分析 3.3 LR分析 3.4 错误处理 3.5 语法分析器自动生成 |
第四章:类型检查 | 4.1 类型系统 4.2 属性文法 4.3 语法制导翻译 4.4 符号表管理 |
第五章:中间表示 | 5.1 抽象语法树 5.2 线性中间表示 5.3 图中间表示 |
第六章:中间代码生成 | 6.1 变量地址分配 6.2 算术表达式翻译 6.3 布尔表达式翻译 6.4 数组、结构体和字符串的翻译 6.5 控制流的翻译 6.6 函数调用的翻译 |
第七章:目标代码生成 | 7.1 目标体系结构 7.2 树匹配代码生成 7.3 基于动态规划的代码生成 7.4 寄存器分配 7.5 指令调度 |
第八章:代码优化 | 8.1 控制流分析 8.2 数据流分析 8.3 死代码删除 8.4 常量传播 8.5 拷贝传播 8.6 静态单赋值形式 |
课程教师今年在中科大开设的编译器课程主页:
http://staff.ustc.edu.cn/~bjhua/courses/compiler/2014
课程的主要参考书:《编译器工程》(第二版)
课程的其它参考书:《现代编译器实现---C语言描述》
《编译原理:技术与工具》
《高级编译器设计与实现》
Q:课程是否有证书?如何获得证书?
A:学习本课程通过后,将获得由任课教师签名的证书。证书的获得规则和方式将在课程开始前统一发布。
Q:该课程今年是否包括实验?
A:今年开设的课程中,将包括讲义(ppt、视频)、作业和考试;但实验是选作的部分。如果你能独立完成部分或者全部实验的话,我们在成绩评定的过程中将有加分。
Q:编译原理难学吗?
A:相对其他计算机的专业基础课,编译原理向来有“难入门”的名声,一方面的原因是这门课涉及的理论比较多且繁杂;另一方面,这门课需要坚实的实践动手为依托。在这门课中,我们将努力在这两个方向上给你提供帮助。只要认真投入一些时间和精力,编译原理课程是能够学好的。