《编译原理》理论教学大纲(2001年制订,2004年修订)课程编号:英文名:Compiling Principle课程类别:专业主干课前置课:程序设计基础、数据结构、汇编语言、离散数学后置课:无学分:4学分课时:72课时(其中理论教学54课时,实验教学18课时)主讲教师:苏杭丽等选定教材:吕映之,张素琴,蒋维杜.编译原理.北京:清华大学出版社, 2001年.课程概述:本课程是计算机科学与技术专业的专业主干课程,介绍了程序设计语言编译程序构造的一般原理、基本设计方法、主要实现技术方法和一些自动构造工具,如:语言基础知识、词法分析、语法分析、有限自动机理论、形式语言的识别、语义检查、运行时的存储管理、代码优化和代码生成以及整个编译程序的构造过程。
教学目的:掌握编译程序构造的一般原理、基本设计方法、主要实现技术和一些自动构造工具,巩固《程序设计语言》、《数据结构》、《汇编语言》、《离散数学》等基础知识,能将编译程序中的概念和技术应用于一般的软件设计之中,能够独立完成小型编译程序。
教学方法:理论讲课与上机实验结合。
首先从剖析一个简单的编译程序(PL/0)入手,对编译程序设计的基本理论,如有穷自动机、上下文无关文法等给予必要的介绍;对于广泛使用的语法分析和语义分析技术,如递归子程序法、算符优先分析、LR分析及语法指导翻译等进行了详细讲解;对编译程序的结构及其各部分功能、实现方法以及整体的设计考虑等给予描述。
此外,还介绍了编译原理的构造工具。
“编译原理”是一门对实践性要求较高的课程,教学中设置了实验课,强化对理论的理解。
各章教学要求及教学要点第一章编译程序概论课时分配:2课时教学要求:了解什么是编译程序;了解编译过程。
教学内容:第一节什么是编译程序一、编译程序的基本知识第二节编译过程概述一、词法分析阶段二、语法分析三、语义分析阶段四、中间代码生成五、代码优化六、目标代码生成第三节编译程序的结构一、编译程序的6个基本过程二、编译程序的两个管理功能第四节编译阶段的组合一、编译的前端二、编译的后端第五节编译技术和软件工具一、语言的结构化编辑器二、语言的调试工具三、语言的测试工具四、高级语言之间的转换工具五、并行编译技术思考题:1.编译程序的工作过程包括哪几个基本阶段?2.介绍词法分析的概念。
3.介绍语法分析的概念。
4.介绍语义分析的概念。
第二章 PL/0编译程序的实现课时分配:4课时教学目的:了解PL/0语言的描述;掌握PL/0语言的语法描述图和EBNF表示;了解PL/0编译程序的结构、词法分析、语法分析、目标代码结构以及语法错误处理;了解PL/0编译程序的目标代码解释执行时的存储分配。
教学内容:第一节PL/0语言描述一、PL/0语言的语法描述图二、PL/0语言文法的EBNF表示第二节 PL/0编译程序的结构一、PL/0语言编译程序的过程二、PL/0语言编译程序的函数结构第三节 PL/0编译程序的词法分析一、PL/0编译程序的词法分析过程二、PL/0编译程序的取字符过程第四节 P/0编译程序的语法分析一、语法分析程序的两大部分的功能:说明部分的处理和程序体部分的处理二、程序block过程第五节 PL/0编译程序的目标代码结构一、PL/0编译程序的目标指令二、举例说明目标指令第六节 PL/0编译程序的语法错误处理一、PL/0编译程序对语法错误、语义错误、运行错误的处理方法二、给出PL/0文法非终结符的开始符号与后继符号集合表三、介绍PL/0编译程序的test测试过程工作原理第七节PL/0编译程序的目标代码解释执行时的存储分配一、PL/0编译程序的4个寄存器二、PL/0编译程序的3个联系单元的作用思考题:1.给出对PL/0语言作如下功能扩充时的语法图和BNF的语法描述。
(1)扩充一维整型数组。
(2)扩充条件语句的功能使其为:if<条件>then<语句>[else<语句>](3)扩充repeat语句为:repeat<语句>{;<语句>}until<条件>2.对上题的(1)扩充给出:(1)符号表数据结构改动后的格式。
(2)数组上下界的越界处理。
(3)数组元素地址计算方法。
(4)增加的目标指令形式及功能。
3.给出1中的(2)、(3)扩充时:(1)所生成的目标代码结构示意图。
(2)编译时此段目标代码生成的实现方法。
第三章文法和语言课时分配:6课时教学目的:了解文法的直观概念;了解符号和符号串;掌握文法和语言的形式定义;掌握文法的类型;掌握上下文无关文法及其语法树;掌握句型的分析。
教学内容:第一节文法的直观概念一、文法的基本概念第二节符号和符号串一、字母表的概念二、符号串的概念三、符号串连接的概念四、符号串方幂的概念第三节文法和语言的形式定义一、文法的定义二、推导的概念三、直接推导的概念四、句型的概念五、句子的概念第四节文法的类型一、文法的4种类型第五节上下文无关文法及其语法树一、语法树二、最左推导三、最右推导四、规范推导五、规范句型六、句型的二义性第六节句型的分析一、自上而下的分析方法、自下而上的分析方法、句型分析的有关问题二、短语、直接短语、句柄的概念第七节有关文法实用中的一些说明一、有关文法的实用限制二、上下文无关文法中的ε规则思考题:1.解释下列术语和概念:(1)字母表。
(2)串、字和句子。
(3)语言、语法和语义。
2.已知文法G:<表达式>::=<项>|<表达式>+<项>|<表达式>-<项><项>::=<因子>|<项>*<因子>|<项>/<因子><因子>::= (<表达式>)|i试给出下列表达式的推导及语法树。
(1)i (2)(i) (3)i*i (4)i*i+i (5)i+(i+i) (6)i+i*i3.设有文法G[T]:T->T*F|F F->F↑P|P P->(T)|a ,写出该文法句型T*P↑(T*F)的直接短语。
4.已知文法G(E):E→T|E+TT→F|T * FF→(E)|i(1) 给出句型(T * F+i)的最右推导及画出语法树。
(2) 给出句型(T * F+i)的短语、素短语。
第四章词法分析课时分配:6课时教学目的:了解词法分析程序的设计;了解单词的描述工具;掌握有穷自动机及其化简;掌握正规式和有穷自动机间的转换;掌握正规文法和有穷自动机间的转换。
教学内容:第一节词法分析程序的设计一、词法分析程序与语法分析程序的接口方式二、词法分析程序的输出三、将词法分析工作分离的考虑第二节正规文法一、正规文法、正规式的概念二、正规文法与正规式之间的相互转换方法第三节有穷自动机一、确定的有穷自动机(DFA)、不确定的有穷自动机(NFA)的定义及表示方法二、NFA-DFA的转换方法三、确定有穷自动机的化简方法第四节正规式和有穷自动机的等价性一、NFA转化为正规式的方法二、正规式转化为NFA的方法第五节正规文法和有穷自动机间的转换一、正规文法转化为NFA的方法二、NFA转化为正规文法的方法第六节词法分析程序的自动构造工具一、LEX语言思考题:1.构造一个DFA,它接收Σ={0,1}上所有满足如下条件的字符串:每个1都有0直接跟在右边。
然后再构造该语言的正则文法。
2.请给出正则表达式(0|1)*000 所识别的语言,并构造其等价的正则文法。
3. 将下图所示NFA转换成等价的DFA并最小化第五章自顶向下语法分析方法课时分配:6课时教学目的:了解确定的自顶向下分析思想;掌握LL(l)文法的判别;掌握某些非LL(1)文法到LL(1)文法的等价变换;了解不确定的自顶向下分析思想;掌握确定的自顶向下分析方法。
教学内容:第一节确定的自顶向下分析思想一、FIRST、FOLLOW、SELECT的定义二、上下文无关文法的概念第二节LL(l)文法的判别一、FIRST集的计算方法二、FOLLOW集的计算方法三、SELECT集的计算方法第三节某些非LL(1)文法到LL(1)文法的等价变换一、提取左公共因子二、消除左递归的方法第四节不确定的自顶向下分析思想一、由于相同左部的产生式的右部FIRST集不为空而引起的回溯的情况二、由于相同左部非终结符的右部能够推导出ε且该非终结符FOLLOW集中含有其右部FIRST集的元素的情况三、由于文法含有左递归而引起回溯的情况第五节确定的自顶向下分析方法一、递归子程序法二、预测分析方法思考题:1.对文法G[S]:S→a|∧|(T)T→T,S|S(1)给出(a,(a,a))和(((a,a), ∧,(a)),a)的最左推导。
(2)对文法G,进行改写,然后对每个非终结符写出不带回溯的递归子程序。
(3)经改写后的文法是否是LL(1)的?给出它的预测分析表。
(4)给出输入串(a,a)#的分析过程,并说明该串是否为G的句子。
2.对下面的文法G:E → TE'E'→+E|εT →FT'T'→T|εF→PF'F'→*F'|εP→(E)|a|b|∧(1)计算这个文法的每个非终结符的FIRST集和FOLLOW集。
(2)证明这个文法是LL(1)的。
3.设有文法G[S]:S->aBc|bABA->aAb|bB->b|ε构造其LL(1)分析表,并分析符号串baabbb是否是该文法的句子。
第六章自底向上优先分析法课时分配:6课时教学目的:了解自底向上优先分析法;了解简单优先分析法;掌握算符优先分析法。
教学内容:第一节自底向上优先分析法概述一、自底向上分析方法的分析过程第二节简单优先分析法一、优先关系二、简单优先关系的定义三、简单优先分析方法第三节算符优先分析法一、算符优先文法的定义二、算符优先关系表的构造方法三、算符优先分析算法四、算符优先分析法的局限性思考题:1.对文法G[S]:S→a|∧|(T)T→T,S|S(1)计算G[S]的FIRSTVT和LASTVT。
(2)构造G[S]的算符优先关系表并说明G[S]是否为算符优先文法。
(3)计算G[S]的优先函数。
(4)给出输入串(a,(a,a))#和(a,a)#的算符优先分析过程。
2.对题1的G[S]:(1)给出(a,(a,a))和(a,a)的最右推导和规范规约过程。
(2)将(1)和题1中的(4)进行比较给出算符优先规约和规范规约的区别。
3.给出文法:E→T|E+TT→F|T * FF→(E)|i的终结符优先关系矩阵,判断符号串i*(i+i)#是否本文法的句子,并对算符(不包括i和#)给出优先函数。
第七章 LR分析法课时分配:6课时教学目的:了解LR分析方法;掌握LR(0)分析;掌握SLR(l)分析;掌握LR(1)分析;掌握LALR(1)分析。