本课程主要介绍程序设计语言编译程序构造的基本原理和基本实现方法。讲授形式语言、有限自动机、自上而下和自下而上的语法分析、LR分析方法、属性文法和语法制导翻译、语义分析的代码产生、存储器的动态分配与管理、符号表的组织与管理、优化问题、代码生成等内容。通过本课程学习,使学生对编译的基本概念、原理和方法有完整的和清楚的理解,并能正确地、熟练地运用。
[编译原理]
本科课程教学大纲(理工医类/电气学院)
课程信息 | |||
开课单位 | 电气与计算机工程学院 | 开课学年学期 | 2020-2021学年第1学期 |
授课年级 | 18级 | 授课对象专业 | 计算机专业 |
课程学分 | 3 | 课程学时 | 54 |
课程性质 | ¨专业必修 þ专业选修 ¨公共必修 ¨公共选修 ¨成长必修 ¨专业限选 ¨公共限选 | ||
先修课程要求 | |||
教师信息 | |||
授课教师 | 张鉴新 | 联系电话 | 13926195522 |
答疑地点 | 2教104 | 答疑时间 | 周三14:30-15:30 |
电子邮件 | 13273606@qq.com |
课程负责人:张鉴新 主 审:
一、课程描述及课程目标
(一)课程描述
本课程主要讲述高级语言翻译为计算机能执行的代码的原理、过程、方法和技术,核心是介绍高级语言到汇编语言的翻译。让学生理解编译和高级语言程序之间的关系,掌握词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等各个阶段的原理、方法和实现技术,真正认识计算机信息处理的实质、训练抽象思维能力、体验系统软件的开发过程,进一步提升计算机科学与技术的专业素养。
(二)课程目标
1. 掌握形式语言和自动机的基本概念,理解高级语言编译的基本原理,并能够将这些原理应用于高级语言的设计之中;核心能力1
2. 理解编译程序的结构及各个模块的功能,利用软件工程方法分析和设计某语言的编译程序的各个模块,并能够选择合适的方法实现。核心能力2
3. 能够理解现有某高级语言的编译系统中各模块的功能和实现方法,能够对不同方法的优劣进行对比和分析;核心能力3
4.能够主动做好课前预习和课后实践,养成自主学习的意识和提高不断学习的能力,核心能力6。
主要知识点:
1.1 什么叫编译原理
1.2 编译原理概述
1.3 符号表管理
1.4 编译各阶段的分组
1.5 编译技术的应用
2.1 文法预备知识
2.2 文法非形式的讨论
教学要求:通过本次课程的学习,使学生了解编译原理的基本概念,掌握编译原理的全过程,清楚各阶段的工作内容及编译技术的应用。
重点:编译原理概述。
难点:编译原理概述。
采用的教学方法:案例法--列举英文翻译中文的过程来描述编译原理各阶段.
讲授学时:3学时
(二)第2讲 第二章 文法和语言
主要知识点:
2.3 文法和语言的形式定义
2.4 语法树和二义性文法
2.5 句子的分析
2.6 有关文法的实用限制
教学要求:通过本次课程的学习,使学生了解文法的基础知识,掌握文法的定义,最左推导和最右推导,语法树的画法以及文法是否具有二义性的判断方法。
重点:文法和语言的形式定义、语法树和二义性文法。
难点:文法和语言的形式定义。
采用的教学方法:案例法--列举了中文和英文句子的推导过程,从而让学生明白文法和语言的定义.
讲授学时:3学时
(三)第3讲 第三章 词法分析
主要知识点:
3.1 词法分析程序的功能及实现方案
3.2 单词的种类及词法分析程序的输出形式
3.3 正则文法和状态图
3.4 词法分析程序的设计与实现
教学要求:通过本次课程的学习,使学生了解词法分析的主要任务,掌握词法分析程序的设计思路,正则文法和状态图相互转换的方法。
重点:正则文法和状态图。
难点:正则文法和状态图。
采用的教学方法:案例法。
讲授学时:3学时
(四)第4讲 第三章 词法分析
主要知识点:
3.5 正则表达式与有穷自动机
教学要求:通过本次课程的学习,使学生掌握正则表达式与有穷自动的转换方法。
重点:正则表达式与有穷自动机。
难点:正则表达式与有穷自动机。
采用的教学方法:案例法。
讲授学时:3学时
(五)第5讲 第三章 词法分析
主要知识点:
3.6 正则文法、正则表达式与有穷自动机相互转换
教学要求:通过本次课程的学习,使学生掌握正则表达式与有穷自动的转换方法。
重点:正则表达式与有穷自动机。
难点:正则表达式与有穷自动机。
采用的教学方法:案例法。
讲授学时:3学时
(六)第6讲 第四章 自顶向下语法分析
主要知识点:
4.1 自顶向下语法分析的思想
4.2 左递归和回溯问题
4.3 递归子程序法
教学要求:通过本次课程的学习,使学生了解自顶向下的语法分析方法,对左递归和回溯的问题应该如何解决,掌握递归子程序法。
重点:左递归和回溯问题、递归子程序法。
难点:左递归和回溯问题。
采用的教学方法:案例法。
讲授学时:3学时
(七)第7讲 第四章 自顶向下语法分析
主要知识点:
4.4 LL(1)分析法
教学要求:通过本次课程的学习,使学生掌握LL(1)分析法的总控算法的基本思想,会计算FIRST、FOLLOW集合。
重点:计算FIRST、FOLLOW集合。
难点:计算FIRST、FOLLOW集合。
采用的教学方法:案例法。
讲授学时:3学时
(八)第8讲 第四章 自顶向下语法分析
主要知识点:
4.4 LL(1)分析法
教学要求:通过本次课程的学习,使学生掌握LL(1)分析法的总控算法的基本思想,会计算SELECT集合及构造分析表。
重点:计算SELECT集合及构造分析表。
难点:计算SELECT集合及构造分析表。
采用的教学方法:案例法。
讲授学时:3学时
(九)第9讲 第五章 自底向上语法分析
主要知识点:
5.1 移进-归约分析
5.2 简单优先分析法
5.3 算符优先分析法
教学要求:通过本次课程的学习,使学生了解自底向上的语法分析思想,掌握简单优先和算符优先分析法。
重点:简单优先分析法、算符优先分析法。
难点:算符优先分析法。
采用的教学方法:案例法。
讲授学时:3学时
(十)第10讲 第五章 自底向上语法分析
主要知识点:
5.4 优先函数
5.5 LR分析法
教学要求:通过本次课程的学习,使学生掌握优先函数和算符优先分析法。
重点:LR分析法。
难点:LR分析法。
采用的教学方法:案例法。
讲授学时:3学时
(十一)第11讲 第五章 自底向上语法分析
主要知识点:
5.6 SLR(1)分析法
5.5 LR(1)、LALR分析法
教学要求:通过本次课程的学习,使学生掌握SLR(1)分析法、LR(1)和LALR分析法。
重点:SLR(1)分析法、LR(1)分析法。
难点:SLR(1)分析法。
采用的教学方法:案例法。
讲授学时:3学时
(十二)第12讲 第六章 语法制导翻译及中间代码生成
主要知识点:
6.1 属性文法
6.2 语法制导翻译概述
6.3 中间代码生成
6.4 简单赋值语句翻译
教学要求:通过本次课程的学习,使学生了解属性文法和语法制导翻译概述,中间代码生成的形式,理解简单赋值语句翻译的过程。
重点:中间代码生成、简单赋值语句翻译。
难点:简单赋值语句翻译。
采用的教学方法:案例法。
讲授学时:3学时
(十三)第13讲 第六章 语法制导翻译及中间代码生成
主要知识点:
6.5 布尔表达式翻译
6.6 条件语句翻译
6.7 说明语句翻译
6.8 数组和结构翻译
教学要求:通过本次课程的学习,使学生理解布尔表达式、条件语句、说明语句和数组及结构翻译的过程。
重点:布尔表达式翻译。
难点:布尔表达式翻译。
采用的教学方法:案例法。
讲授学时:3学时
(十四)第14讲 第七章 符号表管理技术&第八章 错误处理
主要知识点:
7.1 符号表概述
7.2 符号表组织与内容
7.3 非分程序结构语言的符号表组织
7.4 分程序结构语言的符号表组织
8.1 错误分类
8.2 错误诊察和报告
8.3 错误处理技术
教学要求:通过本次课程的学习,使学生了解符号表管理和错误处理技术,能够区分非分程序结构语言的符号表组织和分程序结构语言的符号表组织。
重点:分程序结构语言的符号表组织、非分程序结构语言的符号表组织。
难点:分程序结构语言的符号表组织、非分程序结构语言的符号表组织。
采用的教学方法:案例法。
讲授学时:3学时
(十五)第15讲 第九章 目标程序运行时的存储组织
主要知识点:
9.1 数据空间三种不同使用方法和管理方法
9.2 栈式存储分配
9.3 参数传递
教学要求:通过本次课程的学习,使学生了解目标程序运行时的存储组织,掌握数据空间三种不同使用方法和管理方法和栈式存储分配。
重点:数据空间三种不同使用方法和管理方法、栈式存储分配。
难点:数据空间三种不同使用方法和管理方法、栈式存储分配。
采用的教学方法:案例法。
讲授学时:3学时
(十六)第16讲 第十章 代码优化
主要知识点:
10.1 优化的例子
10.2 基本块优化
10.3 循环优化
教学要求:通过本次课程的学习,使学生了解代码优化的过程,掌握简单优化的方法。
重点:基本块优化、循环优化。
难点:基本块优化、循环优化。
采用的教学方法:案例法。
讲授学时:3学时
(十七)第17讲 第十一章 编译程序生成方法和工具
主要知识点:
11.1 编译程序的书写语言
11.2 自编译性
11.3 自展
11.4 编译程序的移植
11.5 编译程序的自动生成
教学要求:通过本次课程的学习,使学生了解编译程序的书写语言、自编译性,对编译程序如何移植及自动生成有一定了解。
重点:自编译性、编译程序的移植、编译程序的自动生成。
难点:编译程序的移植。
采用的教学方法:案例法。
讲授学时:3学时
三、课程的预期学习成果
在本门课程结束时,学生应该能够:
1、正确理解什么是编译程序;了解编译程序工作的基本过程及其各阶段的基本任务。
2、正确理解上下文无关文法基本概念,包括:文法的定义、编写、句型、句子、语言、语法树、二义性等;理解三种参数传递方式:传值、传地址、传名的含义。
3、理解词法分析器功能及形式;熟练掌握词法分析器设计的原理,掌握运用状态转换图进行词法分析器设计。
4、正确理解自上而下分析的基本思想;熟练掌握递归下降分析基本方法:消除左递归,消除回溯,构造递归下降子程序;掌握预测分析程序的基本原理和预测分析表构造;理解LL(1)方法的定义。正确理解自下而上语法分析的基本思想,以及归约、短语、句柄、分析树等概念;掌握算符优先分析基本方法:算符优先表和和算符优先函数构造技术。
5、正确理解语法制导翻译基本原理;掌握基于属性文法的处理方法,了解自上而下分析制导翻译基本思想和实现方法。熟悉常见的几种中间语言:四元式、三元式、逆波兰表示;掌握各种语句到四元式的翻译方法,包括:简单算术表达式,布尔表达式,控制语句,数组引用,过程调用等。
6、理解符号表的作用及符号表组织和使用方法,了解名字的作用范围,了解符号表中一般应包含的内容。
7、正确理解目标程序运行进存储空间的使用和组织管理方式;理解静态分配和动态存储分配基本思想;掌握存储分配的处理方式;掌握栈式动态分配中活动记录的作用、组织、内容及使用;了解嵌套过程语言程序运行时整个运行栈的内容的组织。
8、正确理解代码优化的定义和各种可能的优化概念;掌握用DAG表示进行局部优化的方法。
9、正确理解代码生成过程的基本问题,理解待用信息、寄存器描述和地址描述等概念;掌握简单代码生成算法、寄存器分配策略。
四、 课程要求
(一)出勤
学生应积极参与课堂教学并完成相关的作业、实验内容。
(二)阅读资料
学生应认真进行课前预习,阅读教材和指定参考书及重要的参考文献。
(三)课堂展示
根据时间及课堂班人数,在可能的情况下安排小组实验课程讨论与效果演示。
(四)课外实践
本课程是理论性质的课程,不安排项目实践作为课程内容。
(五)小考与期末考
课程中随机问答,期末考试。
(六)课程论文
以平时作业为主。
(七)学术诚信
按中山大学南方学院相关规定执行。
(八)剽窃的定义以及相应的惩罚
剽窃是严重违反学校规章制度的行为。一经发现,将上报相关部门,并受到包 括开除学籍在内的严厉处罚。
五、课程资料
(一)教科书-必读
黄贤英编著.《编译原理及实践教程》(第二版).清华大学出版社.2019年
(二)教科书-强烈推荐
张素琴,吕映芝,蒋维杜,戴桂兰. 编译原理[M]. 清华大学出版社, 2015.6.
劳顿. 编译原理及实践[M]. 机械工业出版社, 2000.
Alfred V. Aho ,Monica S.Lam. 编译原理. 机械工业出版社, 2009.
陈意云,张昱.编译原理(第2版)高等教育出版社,2008
(三)文章-必读
周静 , 张敏 , 崔艳利,一种基于c语言词法分析器的设计,《中国水运:学术版》 , 2007 , 7 (5) :124-125
(四)文章-强烈推荐
胡荣贵、陈意云、郭帆、张昱,基于类型注解的认证编译器的设计与实现,计算机研 究与发展,41(1),pp.28-33,2004.1.
(五)其他参考资料
http://staff.ustc.edu.cn/~yiyun/#《编译原理》教学资源
六、教学活动以及对于预期学习成果的评估
1、个人预习
2、课堂讲授
3、课堂问答
4、课后作业
5、课后答疑
6、期末考试
预期学习成果 | 教学活动 | 学习成果考察内容:作业/课程实验 |
第一章 引论 第二章 文法和语言 | 1、2、3、5、6 | 作业:文法左右推导和语法树 |
第三章 词法分析 | 1、2、3、4、5、6 | 作业:有机自动机、正则表达式与正状方法相互转换 设计:词法分析器 |
第四章 自顶向下语法分析 | 1、2、3、4、5、6 | 作业:LL(1)文法 |
第五章 自底向上语法分析 | 1、2、3、4、5、6 | 作业:优先函数 |
第六章语法制导翻译和中间代码生成 | 1、2、3、4、5、6 | 作业:LR(0)、SLR(1)、LR(1) |
第七章 符号表管理技术 | 1、2、3、4、5、6 | 作业:语义计算 |
第八章 错误处理 | 1、2、3、4、5、6 | 设计:词法分析器 |
第九章 运行时的存储组织及管理 | 1、2、3、4、5、6 | 设计:词法分析器 |
第十章 代码优化 | 1、2、3、4、5、6 | 设计:词法分析器 |
第十一章 编译程序生成方法和工具 | 1、2、3、4、5、6 | 设计:词法分析器 |
七、评估的程序和方法
1、出勤率: 10 %
2、课后作业: 40 %
3、期末考试: 50 %
(二)考试内容及要求
考试包含以下内容:
理论部分
1. 掌握形式语言和自动机的基本概念,理解高级语言编译的基本原理,并能够将这些原理应用于高级语言的设计之中(核心能力1)。
2. 理解编译程序的结构及各个模块的功能,利用软件工程方法分析和设计某语言的编译程序的各个模块,并能够选择合适的方法实现(核心能力2)。
3. 能够理解现有某高级语言的编译系统中各模块的功能和实现方法,能够对不同方法的优劣进行对比和分析(核心能力3)。
综合实践部分
1.根据实际问题的需求,按照任务要求,设计并完成综合实验(核心能力2、3)。
2.能够按照综合实验要求,按时完成综合实验,了解业界在新方法与新技术,并培养良好的职业习惯(核心能力6)。
八、教学进度计划表
周次 | 课程要点 | 理论学时 | 实验学时 | 习题学时 |
1 | 第一章 引论 第二章 文法和语言 | 3 | ||
2 | 第二章 文法和语言
| 3 | ||
3 | 第三章 词法分析 | 3 | ||
4 | 第三章 词法分析 | 3 | ||
5 | 第三章 词法分析 | 3 | ||
6 | 第四章 自顶向下语法分析 | 3 | ||
7 | 第四章 自顶向下语法分析 | 3 | ||
8 | 第四章 自顶向下语法分析 | 3 | ||
9 | 第五章 自底向上语法分析 | 3 | ||
10 | 第五章 自底向上语法分析 | 3 | ||
11 | 第五章 自底向上语法分析 | 3 | ||
12 | 第六章语法制导翻译和中间代码生成 | 3 | ||
13 | 第六章语法制导翻译和中间代码生成 | 3 | ||
14 | 第七章 符号表管理技术 第八章 错误处理 | 3 | ||
15 | 第九章 运行时的存储组织及管理 | 3 | ||
16 | 第十章 代码优化 | 3 | ||
17 |
第十一章 编译程序生成方法和工具 | 3 | ||
18 | 总结、答疑 | 3 | ||
19 | ||||
20 | ||||
总学时 | 54 |
注:此表一式三份,于开学两周内填好,一份送教务与科研部,一份开课单位留存,一份自留。