个人介绍
编译原理
提供学校: 西安电子科技大学
院系: 网络与信息安全学院
专业大类: 计算机类
专业: 网络空间安全,信息安全,网络工程
课程编号: CE6005L
学分: 2
课时: 32
课程介绍
     “编译原理”是国内外高校计算机科学与技术专业的主干专业课程之一,系统介绍程序设计语言翻译的原理与技术,是一门理论与实践并重的课程,在引导学生进行科学思维和提高学生解决实际问题能力两方面均有重要作用。

       通过学习这门课程,希望学生得到以下的收获:
       1. 能够对对计算机的整体知识体系有一个更加完整的了解,为以后更深入的研究与工作打下坚实的专业基础。
       2.了解编译器的工作方式,掌握编译原理的主要流程以及各个流程中解决关键问题的主要思想与算法。
       3. 通过对编译器这样一个复杂的软件的研究与分析,掌握解决复杂问题的一些思路,提高以后解决实际问题的能力。
       4. 通过学习编译原理,提高自己学习新的编程语言的能力。

       本门课程包括24学时理论授课以及16学时的实验教学,最后学生需要完成一个简单的绘图程序语言的编译器,并通过期末考试。
教学大纲

《编译原理》教学大纲

 

 

课程编号:CE5007

课程名称:   编译原理                    英文名称:    Compiler Principle       

学分/学时:  2/32                       课程性质:     选修课                         

适用专业:   网络工程                    建议开设学期: 5                 

先修课程:   C程序设计语言、数据结构、离散数学、汇编语言     

开课单位:   网络与信息安全学院         

一、课程的教学目标与任务

编译原理是计算机及信息安全领域中的重点课程,目的是让学生掌握程序设计语言编译程序的一般原理,主要实现技术和一些自动构造工具,了解将高级程序源代码翻译成计算机语言的整个过程。自从20世纪50年代中期第一个编译程序研制成功后,经过40多年的努力,现已形成了一套比较成熟的、系统化的理论与方法。

本课程重点讲授编译程序(编译器)的设计原理和常用实现技术,通过本课程的学习和实验,学生应当:

  1. 清楚地理解一个编译程序是如何工作的;

  2. 如果在以后遇到了任何一个程序设计语言,应该知道如何实现这个语言的多数机制;

  3. 应具有一定的使用编译构造工具开发编译程序的经验;

  4. 会将所学的常用技术和算法应用于类似的软件设计和实现中。

本课程中涉及的主要内容包括:编译程序概述;高级语言的认识——文法和语言的概念;词法分析程序的自动构造;语法分析程序的构造;语法制导翻译与中间代码生成。

二、课程具体内容及基本要求

(一)编译器概述( 2学时讲授)

讲授编译原理所讨论的问题,介绍有关程度设计语言和编译器的几个重要概念。

1.基本要求

(1)了解编译原理这门课程所讨论的问题,以及编译器的功能。

(2)熟悉编译程序、解释程序、源程序、目标程序等概念及它们的相互关系。

(3) 掌握编译程序的工作过程和编译程序的总体框架,以及编译程序的集中构造方法。

2.重点、难点

重点:编译过程和编译器的结构

难点:编译程序的结构

3.作业及课外学习要求:无

(二)词法分析(6学时讲授+4学时上机)

首先介绍与词法分析有关的基本概念和相关问题,然后对单词形成的规则和根据这些规则构造词法分析器的方法进行理论上和方法上的详细讨论。

1.基本要求

(1)了解符号和符号串、模式、记号、单等词法分析相关术语的概念,了解文法和语言的概念。了解词法分析器与语法分析程序的接口与输出。

(2)熟悉词法的描述方式——正规式与正规集,熟悉有穷自动机(DFA)及其与状态转换图的关系,熟悉表驱动型的词法分析器构造方法。

(3)掌握采用Thompson算法从正规式到NFA的转化方法,NFA到DFA的转换方法,用子集法构造DFA以及最小化DFA的方法,掌握直接编码的词法分析器的构造方法。

2.重点、难点

重点:正规表达式转化为NFA的算法;NFA到DFA的转换方法;用子集法构造DFA以及最小化DFA的方法;直接编码的词法分析器的构造方法。

难点:NFA到DFA的转换方法;最小化DFA的方法;直接编码的词法分析器的构造方法。

3.作业及课外学习要求:完成教材中词法分析所在章节的习题。

(三)语法分析(10学时讲授+6学时上机)

本章重点讨论上下文无关文法、常用的自上而下分析和自下而上分析的原理与分析器的构造。最后介绍词法分析器和语法分析器的生成器。

1.基本要求

(1)了解文法、文法分析、最左推导、最有推导、语法树与分析树的概念,了解SLR(1)、LR(1)、LALR(1)分析方法。

(2)熟悉自上而下语法分析与自下而上语法分析的总体方法,各种语法分析方法对文法的要求,LR分析方法以及LR分析器的生成器。

(3)掌握FIRST集、FOLLOW集的构造方法,掌握消除左递归,合并公共左因子的方法,掌握短语、直接短语、句柄、规范句型、活前缀等概念,掌握递归下降分析方法、掌握LL(1)文法的判断方法以及预测分析表的构造,掌握LR(0)分析表的构造及分析方法。

2.重点、难点

重点:递归下降子程序的构造,LL(1)分析表的构造,LR(0)分析表的构造。

难点:各种分析方法中分析表的构造。

3.作业及课外学习要求:教材中本章内容的课后习题。

(四)语法制导翻译与中间代码生成(6学时讲授+6学时上机)

本章主要讨论一下两个方面的内容:

(1)静态语义分析的基础,包括语法制导翻译的基本概念,属性的概念,中间代码的各种表示形式等。

(2)对语义正确的语句的处理方法,主要介绍对声明性语句的翻译。

1.基本要求

(1)了解语法制导翻译的作用,了解属性、语义规则的概念,了解语义信息的内部表示,了解符号表的作用、组织和管理方法,了解语法制导翻译的基本步骤。

(2)熟悉语义规则以及中间代码的表示形式,熟悉类型转换及类型判定树。

(3)掌握声明语句的翻译方法,掌握参数传递、简单算术表达式与赋值句的语法指导翻译,掌握复写-恢复与换名调用技术。

2.重点、难点

重点:用后缀式、三地址码以及图形表示中间代码的方法,声明语句的翻译方法,掌握参数传递、简单算术表达式与赋值句的语法指导翻译。

难点:声明语句的翻译方法。

3.作业及课外学习要求:教材中本章内容的课后习题。

三、教学安排及方式

总学时24+16学时,其中:讲授24学时,实验(或上机或综合练习或多种形式)16学时。

序号

课程内容

学时

教学方式

1

编译原理概述

2

讲授

2

词法分析

6+4

多种形式

3

语法分析

10+6

多种形式

4

语法制导翻译与中间代码生成

6+6

讲授

注:教学方式填写“讲授、实验或实践、上机、综合练习、多种形式”。

四、本课程对培养学生能力和素质的贡献点

要求围绕人才培养目标,从课程体系的角度说明本课程对培养学生能力素质的贡献点,与人才培养方案中的知识、能力、素质矩阵相对应。

本课程主要介绍编译程序的工作原理与构造方法,详细介绍如何将一个高级语言编写的源程序翻译成中间代码的过程。通过对本科成的学习,使学生了解编译程序的实现原理与技术,利用从本课程学习到的知识,增强编写和调试程序的能力。本课程涉及内容复杂,难度较大,具有很强的理论性与实践性,需要学生做到理论与实践紧密结合,多参阅相关书籍,多做练习,多上机实验。对理论的学习可以提高学生对编程语言底层原理的理解程度,提高实际开发项目时的问题分析能力,通过上机实践使学生学会使用编译器开发工具。总而言之,编译原理是一门真正与代码做斗争的课程,它可以让学生掌握程序设计语言的本质,编译原理中涉及到的算法设计思路与重要思想将会使学生在后续的学习与研究过程中持续收益。

五、考核及成绩评定方式

最终成绩由平时作业成绩、期末成绩和上机实验成绩等组合而成。各部分所占比例如下:

平时作业成绩:10%。主要考核对每堂课知识点的复习、理解和掌握程度。

期末考试成绩:70%。主要考核编译原理基础知识的掌握程度。书面考试形式。题型为:选择题、填空题、问答题和计算题等。

上机实验成绩:20%主要考核学生对课堂上所讲授的理论知识的理解与掌握程度以及灵活运用的能力。通过编写一个简单函数绘图语言的解释器,使学生会用正规式和产生式设计简单语言的语法,会用递归下降子程序编写编译器或解释器,同时提高学生撰写上机实验报告的能力。

六、教材及参考书目

教材: 《编译原理基础》(第二版),刘坚主编,西安电子科技大学出版社

参考书目:

1.《Modern Compiler Implementation in C》 AndrewW. Appel, Jens Palsberg.

2.《Compilers: Principles,Techniques,and Tools》(SecondEdition),Alfred V. Aho, Monica S. Lam, Ravi Sethi,Jeffrey D. Ullman.

3.《Advanced Compiler Design and Implementation》,StevenS. Muchnick.

七、说明

(一)与相关课程的分工衔接

   本课程需要以其中一种编程语言以及数据结构作为支撑开展,源程序作为编译器的输入,相关的编程语言学生必须要在学习本课程时已经掌握,数据结构主要讨论了计算机存储、组织数据的方式,对数据结构的学习,使得学生在学习编译原理时对计算机内部对数据的处理方式有所了解,降低学生在学习编译原理时的难度。在学完编译原理后,学生已经掌握了程序设计语言的本质,以及一个源程序在计算机底层的运行方式与处理方法,在后续学习软件工程、软件安全以及漏洞检测等课程时,可以直接讲授课程核心内容。

(二)其他说明

      无。

(执笔人:            审核人:             )

2016年  12  月  12  日

课程评价

提示框
提示框
确定要报名此课程吗?
确定取消