编译原理是哈尔滨工业大学于2017年9月4日首次在中国大学MOOC开设的慕课课程、国家精品课程。该课程授课教师为陈鄞、郭勇、涂志莹等。截至20来自20年9月,据中国大学360百科MOOC官网显示,该课程已开课7次。
编译原理共20讲,包括绪论、程序设计语言及其文法、词法分析、语法分析(4讲)、语法制导翻译(3讲)、中间代码生成(4讲)、运行存储分配、代码优化(设统4讲)、代码生成右洲置换既较被。
世界计算机科学家Alfred V.Aho在《编译器》来自的第1章第1句话写道:"编写编译器的原理和技术具有普遍的意义,以三声附湖织至于在每个计算机科学家的研究生涯中,该书中的原理和技术都会反复用到。"这句话点明了编译原理该门课程在计算机专业中的重要地位。有360百科过使用高级程序设计语言编写仅程序经历的学习者知道,当给计算机输入一段程序以后,计算机就可以按照人们意图去工作。由0和1构成的机器代位码才是可以被计算机直接理解的语言。因此,用高级语言编写的程序,最终都要"翻译"成红继院预想穿天额断省脸由0和1构成的机器代码才可以在计算机上执行,这一翻译过程,就称为编译。
编译原理主要面向计算机相关专业大学生、以及相关技术的从业人员等。
开课次数 | 开课时间 | 授课教师 | 参与人数 |
---|---|---|---|
第1次开课 | 2017年09月04日~2017年12月31日 | 陈鄞、郭勇 | 10399 |
第2伟次开课 | 2018年03月05日~2018年07月31日 | 16424 | |
第3次开课 | 2018非跑呼方训主深低项群架年09月03日~2018年12月31日 | 陈心范商结乡攻众执鄞、郭勇、涂志莹、黄诚 | 11272 |
第4次开课 | 2019年02月18日~2019年07月31日 | 陈鄞、郭勇、涂志莹 | 17757 |
第5次开课 | 2019年09月02日~2019年12月31日 | 14153 | |
第6次开课 | 2020年02月24日~2020年07月31日 | 医据并列某永 14168 | |
第7次开课 | 2020年08月31日~2021年01月31日 | 待定 | |
根据中国大学MOOC官网显示该课程第1次至第7次开课的课时安排均为3~5小时每周。 |
编译原理共20讲,其主要讲授编译器设计与实现友应的主要理论和技术。其中,第1讲介绍编译原理的概念知识;第2、3讲介绍程序设计语言及其文法和词法分析内容;第4至第晚宗14讲分别介绍语法分析(1~4部分)、语法制导翻译(1~3部分)、中间代码生成(1~4部分);第15讲介绍计算机运行让误日旧映足存储分配的知识;第16至20讲介绍代码优化(1~4部分)进阶内容和代码生成的实现。
第来自1讲 绪论 | 4-14LALR分析法 | 6-9控制流语句的回填 |
1-1什么是编译 | 4-15二义性文法的LR分析 | 6-10switch360百科语句的翻译 |
1-2编译系长验识流主经纪强名流统的结构 | 本讲课程讲义(PP调四动谈比品发担T文档) | 6-11过程调用语句的翻译 |
1-3词法分析概述 | 4-16LR分析中的错误处理 | 本讲模拟练习题(不款类手货计分) |
1-4语法分析概述 | 本讲模拟练习题(不计分) | 本讲课程讲义(PDF文档) |
1-5语义分析概述 | 本讲课程讲义(PDF文档) | 第14讲测验(计分) |
风阻旧月 1-6中间代码生成及编译器后端概述 | 【讨论7-1】为什么合并同心项集不会握经序照以产生移进-归约冲突? | 本花获布反愿频上故移境讲课程讲义(PPT文档) |
本讲模拟练习题(不计分) | 【讨论7-2】为什么LALR分析法不会作错误的移进操作? | 第15讲 运行存储分配 |
本讲课程讲义(PDF文档) | 第7讲测验(计分) | 7-1运行存储分配概述 |
【讨论1-1】编译过程与人工翻译过程之间的关系 | 第8讲 语法制导翻译1 | 7-2静态存储分配 |
【讨论1-2】符号表中NAME字段的设计 | 5-1语法制导翻译概述 | 7-3栈式存储分配 |
第1讲测验(计分) | 5-2语法制导定义SDD | 7-4调用序列和返回序列 |
本讲课程讲义(PPT文档) | 5-3SDD的求值顺序 | 7-5非局部数据的访问 |
第2讲 程序设计语言及其文法 | 5-4S-属性定义与L-属性定义 | 7-6符号表 |
2-1基本概念 | 本讲模拟练习题(不计分) | 7-7符号表的建立 |
除本识血远减良字大金读 2-2文法的定义 | 本育讲课程讲义(PDF文档孙缩能周点率死市形) | 本讲模拟练习题(不计分) |
2-3语言的定义 | 【讨论8-1】如何表示语义信息? | 本讲课程讲义(PDF文档) |
2-4文法的分类 | 【讨论8-2】如何计算语义属性? | 【讨啊最乐了厚剂期降论15-1】如何早振哪致已宗践将基于符号表构造访问链? |
2-5CFG的分析树 | 【讨论8-3】如何判定一个属性是综合属性还是继承属性? | 举创众技化露发世让 【讨论15-2】如何基于符号表访问非局部数据? |
本讲模拟练习题(不计分) | 【讨论8-4】什么样的SDD可以保证存在对其属性进行计算的顺序? | 第15讲测验(计分) |
本讲课程讲义(PDF文档) | 本讲课程讲义(PPT文档) | 本讲课程讲义(PPT文档) |
【讨论2-1】计算机中是如何表示语言的? | 【讨论手音得节8-5】为什么S-SDD与L-SDD能够保证存在属性计算顺序? | 第16讲 代码建销区若取传因全推优化1 |
【讨论2-2】每一类单词可否看成一种语言? | 课班另球手级南 第8讲测验(计分) | 本讲课程讲义(PPT文档) |
第2讲测验(计分) | 第9讲 语法制导翻译2 | 8-1流图 |
本讲课程讲义(PPT文档) | 本讲课程讲义(PPT文档) | 8-2常用的代码优化方法(一) |
第3讲 词法分析 | 5-5语法制导翻译方案SDT | 8-3常用的代码优化方法(二) |
3-1正则表达式 | 5-6在非递归的预测分析过程中进行翻译 | 8-4基本块的优化 |
3-2正则定义 | 本讲模拟练习题(不计分) | 本讲模拟练习题(不计分) |
3-3有穷自动机 | 本讲课程讲义(PDF文档) | 本讲课程讲义(PDF文档) |
3-4有穷自动机的分类 | 【讨论9-1】为什么S-SDD的SDT可以在语法分析的过程中同时实现? | 第16讲测验(计分) |
3-5从正则表达式到有穷自动机 | 【讨论9-2】非递归预测分析器的扩展 | 第17讲 代码优化2 |
3-6从NFA到DFA的转换 | 第9讲测验(计分) | 本讲课程讲义(PPT文档) |
3-7识别单词的DFA | 第10讲 语法制导翻译3 | 8-5数据流分析 |
本讲模拟练习题(不计分) | 本讲课程讲义(PPT文档) | 8-6到达定值分析 |
本讲课程讲义(PDF文档) | 5-7在递归的预测分析过程中进行翻译 | 8-7到达定值方程的计算 |
第3讲测验(计分) | 5-8L-属性定义的自底向上翻译 | 本讲模拟练习题(不计分) |
本讲课程讲义(PPT文档) | 本讲模拟练习题(不计分) | 本讲课程讲义(PDF文档) |
第4讲 语法分析1 | 本讲课程讲义(PDF文档) | 第17讲测验(计分) |
4-1自顶向下分析概述 | 【讨论10-1】递归预测分析器的扩展 | 第18讲 代码优化3 |
4-2文法转换 | 【讨论10-2】文法及翻译方案的修改 | 本讲课程讲义(PPT文档) |
4-3LL(1)文法 | 第10讲测验(计分) | 8-8活跃变量分析 |
本讲模拟练习题(不计分) | 第11讲 中间代码生成1 | 8-9可用表达式分析 |
本讲课程讲义(PDF文档) | 6-1类型表达式 | 本讲模拟练习题(不计分) |
4-4FIRST集和FOLLOW集的计算 | 6-2声明语句的翻译 | 本讲课程讲义(PDF文档) |
本讲课程讲义(PPT文档) | 本讲模拟练习题(不计分) | 第18讲测验(计分) |
第4讲测验(计分) | 本讲课程讲义(PDF文档) | 第19讲 代码优化4 |
第5讲 语法分析2 | 【讨论11-1】如何计算数组的类型表达式及数组宽度? | 本讲课程讲义(PPT文档) |
4-5递归的预测分析法 | 第11讲测验(计分) | 8-10支配结点和回边 |
4-6非递归的预测分析法 | 本讲课程讲义(PPT文档) | 8-11自然循环及其识别 |
4-7预测分析中的错误处理 | 第12讲 中间代码生成2 | 8-12删除全局公共子表达式和复制语句 |
本讲模拟练习题(不计分) | 6-3简单赋值语句的翻译 | 8-13代码移动 |
本讲课程讲义(PDF文档) | 6-4数组引用的翻译 | 8-14作用于归纳变的强度削弱 |
第5讲测验(计分) | 本讲模拟练习题(不计分) | 8-15归纳变量的删除 |
本讲课程讲义(PPT文档) | 本讲课程讲义(PDF文档) | 本讲模拟练习题(不计分) |
第6讲 语法分析3 | 【讨论12-1】数组元素寻址的翻译 | 本讲课程讲义(PDF文档) |
本讲课程讲义(PPT文档) | 第12讲测验(计分) | 第19讲测验(计分) |
4-8自底向上分析概述 | 本讲课程讲义(PPT文档) | 第20讲 代码生成 |
4-9LR分析法概述 | 第13讲 中间代码生成3 | 本讲课程讲义(PPT文档) |
4-10LR(0)分析 | 本讲课程讲义(PPT文档) | 9-1代码生成器的主要任务 |
4-11LR(0)分析表构造算法 | 6-5控制流语句及其SDT | 9-2一个简单的目标机模型 |
本讲模拟练习题(不计分) | 6-6布尔表达式及其SDT | 9-3指令选择 |
本讲课程讲义(PDF文档) | 6-7控制流翻译的例子 | 9-4寄存器的选择 |
【讨论6-1】下推自动机与有穷自动机之间的关系 | 本讲模拟练习题(不计分) | 9-5寄存器选择函数getReg的设计 |
【讨论6-2】LR语法分析栈中状态信息与文法符号信息之间的关系 | 本讲课程讲义(PDF文档) | 9-6窥孔优化 |
第6讲测验(计分) | 第13讲测验(计分) | 本讲模拟练习题(不计分) |
第7讲 语法分析4 | 第14讲 中间代码生成4 | 本讲课程讲义(PDF文档) |
4-12SLR分析 | 6-8布尔表达式的回填 | 第20讲测验(计分) |
4-13LR(1)分析 | (注:课程大纲排版从左到右列 ) |
学习编译原理前需要预备高级程序设计语言、数据结构、集合与图论等专业知识。
编译原理的学习资料有《编译原理(第2版):本科教学版》《编译原理》等。
书名 | 作者 | ISBN | 出版时间 | 出版社 |
---|---|---|---|---|
《编译原理(第2版):本科教学版》 | (美)Alfred V.Aho | 9787111269298 | 2009年 | 机械工业出版社 |
《Compilers: Principles, Techniques and Tools(Second Edition)》 | Alfred V. Aho等 | ------ | 2006年 | Pearson Education, Inc |
《编译原理》 | 蒋宗礼等 | 9787040290585 | 2010年 | 高等教育出版社 |
表格内容参考资料 |
2018年,编译原理被中华人民共和国教育部认定为"国家精品在线开放课程"。
陈鄞,女,哈尔滨工业大学计算学部副教授、硕士生导师。
郭勇,男,哈尔滨工业大学讲师。
涂志莹,男,汉族,1983年生,工学博士,哈尔滨工业大学(威海)计算机科学与技术学院副教授、硕士生导师。