《编译原理及实践教程(第3版)》教学大纲
编译原理第三版教学设计
编译原理第三版教学设计前言编译原理是计算机科学重要的基础课程之一,是计算机工程师必须掌握的一门课程。
本文将结合教学实践经验,介绍编译原理第三版的教学设计。
教材本教材选用了《编译原理(第三版)》(龙书)作为教材。
龙书详细地介绍了编译原理的相关知识,且内容涉及面广,是一本非常好的教材。
同时,我们也结合了其他教材和资料,为学生提供更多补充资料。
教学目标本课程的教学目标是让学生:•了解编译原理的基本概念和理论基础;•掌握编译过程中的词法分析、语法分析、语义分析、中间代码生成、目标代码生成等重要内容;•熟练掌握使用 C/C++ 语言的编译器开发工具链;•能够独立地设计并实现一个简单的编译器。
教学内容本课程的教学内容主要包括以下几个方面:1. 基础知识•概念和原理:编译器的作用及编译原理的基本概念;•自动机:DFA、NFA、NFA to DFA 的转换;•正则表达式和有限状态自动机;•上下文无关文法(CFG)和上下文无关语言;•语法分析:自上而下的递归下降语法分析器和自下而上的 LR 分析器;•语义分析和中间代码生成。
2. 工具链•Flex 和 Bison 的使用:生成 C 语言的词法分析器和语法分析器;•LLVM 工具链的使用:生成目标代码和执行程序;•GDB 调试工具的使用:程序调试。
3. 编译器实现•实现一个简单的编译器,包括词法分析器、语法分析器、语义分析器、中间代码生成、目标代码生成等模块。
教学方法我们采用了以下教学方法:1. 讲解法通过讲解法,向学生介绍编译原理的相关知识。
讲解后,我们会提供一些例子和实验来帮助学生理解。
2. 阅读法编译原理是一门深度理论课程,阅读法能够帮助学生更加深入地理解编译原理的相关知识。
我们会引导学生阅读相关教材和论文,同时也会向学生推荐一些相关资料。
3. 实践法实践法是本课程的核心方法之一。
我们会为学生提供一些练习、实验和编程作业,以确保学生能够具备实际的编译器开发能力。
第3章 语法分析-编译原理及实践教程(第3版)-黄贤英-清华大学出版社
3.2.1 文法的定义
例1:有如下规则
<句子><主语><谓语> <主语><代词>|<名词> <代词>我 <名词>大学生 <谓语><动词><直接宾语> <动词>是 <直接宾语><代词>|<名词>
(表示由…组成)
• 归约:推导的逆过程。
• 直接归约:直接推导的逆过程
几个概念的形式定义
• 直接推导: 如果αβ是文法 G=(Vn,Vt,P,S)
的产生式,γ和δ是V*中的任意符号,若有符号 串v,w满足: v=γαδ,w=γβδ,则说v直接产生w,(w是v的 直接推导)记作:v=>w 例:S01, 0S0=>0010(直接推导γ=0,δ=0) • 如果存在v=>w0=>w1=>w2...=>Wn=w(n>0),则 称v推导出w(长度为n),记作v+=>w(至少一步) • 若有v=>w或v=w,则记作v*=>w(0步或若干步)
一个非终结符号,β∈V*)
–上例中: G=(Vn,Vt,P,<句子>)
Vn=(<句子>,<主语>,<谓语>,<代词>,<动词>,
<名词>,<直接宾语>)
Vt= (我,是,大学生)
P=
<句子><主语><谓语>
<主语> <代词>|<名词>
第1章 概述-编译原理及实践教程(第3版)-黄贤英-清华大学出版社
《编译原理实践及应用》
1.1 程序设计语言及翻译程序
为什么要使用编译程序?
• 机器语言 (machine language)
C7 06 0000 0002
• 汇编语言 (assembler language)
MOV X , 2
为该语言编译程序能够识别的形式加入到标准源程序中。 在VC++6.0中,通过预处理后,将.c的源程序变为了.i的文 本文件。
《编译原理实践及应用》
编译
标准的C语言程序由编译程序翻译为对应于某个计算机 上的汇编语言程序。汇编语言是和机器语言一一对应的易于 阅读的文本形式的语言。编译的结果是某种机器上汇编语言 书写的程序。如在VC++6.0中,编译这一步将.i的文本文件 生成了.cod的文本文件,这就是汇编代码。有的编译器生成 .s或.asm后缀的文件。
• 解释程序:将高级程序设计语言写的源程序作为输入,
边解释边执行源程序本身,而不产生目标程序的翻译程序。
• 其他概念:
– 诊断编译程序 – 优化编译程序 – 交叉编译程序 – 可变目标编译程序
宿主机 目标机
《编译原理实践及应用》
对编译程序的一些说明
• 编译程序实质上是一个翻译程序,要注意等价变 换
• 高级语言 (high-level language)
X=2
《编译原理实践及应用》
语言层次和翻译程序大家族
翻译程序:能够将某种语言写的程序转换成另一
种语言的程序,而且后者与前者在逻辑上是等价的。
转换
高级语言层 高级语言1
程序
高级语言2
高级语言3 高级语言4
《编译原理及实践教程(第3版)》教学大纲
《编译原理》教学大纲一课程简介本课程是计算机科学与技术专业的专业核心课程。
本课程主要讲述高级语言翻译为计算机能执行的代码的原理、过程、方法和技术,核心是介绍高级语言到汇编语言的翻译。
让学生理解编译和高级语言程序之间的关系,掌握词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等各个阶段的原理、方法和实现技术,真正认识计算机信息处理的实质、训练抽象思维能力、体验系统软件的开发过程,进一步提升计算机科学与技术的专业素养。
二课程目标(一)课程具体目标1. 掌握形式语言和自动机的基本概念,理解高级语言编译的基本原理,并能够将这些原理应用于高级语言的设计之中;(毕业要求1.3 掌握计算机基础理论,能够用于对计算机应用系统的设计方案和模型进行推理和验证。
)2. 能够理解现有某高级语言的编译系统中各模块的功能和实现方法,能够对不同方法的优劣进行对比和分析;(毕业要求4.1 能够运用科学方法,对计算机领域的复杂工程问题进行需求和功能分析。
)3. 理解编译程序的结构及各个模块的功能,利用软件工程方法分析和设计某语言的编译程序的各个模块,并能够选择合适的方法实现。
(毕业要求1.4 能够运用专业知识,对计算机领域复杂工程问题的解决方案进行分析、改进。
)(二)课程目标与毕业要求的关系本课程目标主要支撑的毕业要求指标点如表1所示。
除表1所列举指标点外,根据学生特点、本课程教学特色,教学目标还涉及对毕业要求5(选择和使用现代工具)等能力培养,为弱支撑,不在表1中列举。
表1 本课程对专业毕业要求指标点的支撑(三)教学内容安排总体思路本课程的教学内容,以课程具体目标为总体指导进行制定。
通过形式语言与自动机的相关基础知识、高级语言到汇编语言的翻译原理、方法和实现技术等教学内容,传授基于某种高级语言编译程序构造的一般原理和基本方法,如词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等各个阶段的原理等知识,从而有针对性地培养学生模型构建能力(课程目标1)、系统分析能力(课程目标2)和方案选择与实现能力(课程目标3)。
3.5节 语法分析的自动生成-编译原理及实践教程(第3版)-黄贤英-清华大学出版社
%%
• 第二节是文法记号的声明,一般以%start S 的形式说明文法的开始符号,用%token
辅助过程
IF、DO、…、ID、… 的形式说明记号。记 号被YACC赋予了不会与任何字符值冲突的
数字值
• 数据类型、全局变量
等遵循C语言的定义, %{
可包含预处理语句等, 需要用%{和%}括起来
#include<stdio.h> %}
的最受欢迎的语法分析生成器
• Jflex——是一个Java的词法/语法分析生成器
• Jison ——JavaScript解析器。Jison 将一个上下文无关语
法作为输入,输出对应的JavaScript代码,类似Yacc
• Grammatica——C#和Java的语法剖析器生成器。相对于
其它一些类似的工具如yacc和ANTLR有了更好的改进:创 建了更好的注释和易读的源代码/拥有错误自动恢复并能 够详述错误信息/支持语法、词法测试与调试.
– YACC在对源文件进行编译时,将对所有的单词和非终 结符进行编码,并用该编码建立分析表和语法分析器 。单词的编码原则是:字符单词使用其对应的ASCII码 ,有名单词则由分析器进行编码。用户在对有名单词 进行命名时,一定要注意不要和使用该单词名的C源程 序中已有的宏名相同,否则在编译该C模块时是会产生 宏定义冲突的。
由Johnson等人在美国Bell实验室研制开发
• yacc生成的编译器主要是用C语言写成的语法解析
器(Parser),需要与词法分析器Lex一起使用, 再把两部份产生出来的C程序一并编译。
• yacc本来只在Unix系统上才有,GNU 版叫做 Bison。
现在已普遍移植到Windows及其他平台。
编译原理 教学大纲
编译原理一、课程说明课程编号:390114X10课程名称(中/英文):编译原理/Compiler Principles课程类别:学科基础课学时/学分:48/3先修课程:C语言程序设计、数据结构、离散数学适用专业:软件工程教材、教学参考书:[1] 程序设计语言编译原理,陈火旺,北京:国防工业出版社,2003[2] Compilers: Principles Techniques, and Tools,Alfred V A, Ravi S, Ulman J D, Addison-Wesley Publishing Company,2003[3] 编译原理(第3版)/“十二五”普通高等教育本科国家级规划教材,陈意云,张昱编,北京:高等教育出版社,2013二、课程设置的目的意义本课程是软件工程专业一门重要的专业基础课程,它与操作系统构成了程序员与计算机之间的接口,是一个优秀的程序员所必须了解的背景知识。
编译系统是计算机系统软件的重要组成部分,其基本原理和实现技术在软件工程、软件自动化、程序分析等领域都有广泛的应用。
本课程的教学目的在于系统地向学生讲述编译程序的结构及其各组成部分的设计原理与实现技术,使学生掌握编译程序的基本原理、方法和实现技术,更好的理解程序语言的内部机制、理解计算机软硬件系统的基本架构与工作原理,培养学生设计、实现和分析简单编译软件的能力,并能在思维素质方面得到拓展提高,进一步理解计算机学科中解决问题的思路方法。
课程主要讲授:自动机与形式语言基础;词法分析;语法分析;语法制翻译与中间代码生成;中间代码优化等。
在课程教学实践中,注重“理论与实践相结合及创新能力”的培养,使学生既获得专业能力的训练又能了解软件系统的基本结构,掌握软件开发基本方法和技术。
通过实验课程使学生掌握编译领域的基本方法并运用所学方法完成编译器的开发。
三、课程的基本要求通过本课程的学习,学生应掌握高级程序设计语言的编译原理和基本技术、具体设计实现编译程序的基本技能,特别对形式语言和自动机、程序自动生成、语法制导翻译、数据流分析、控制结构分析及优化技术等基本原理和技术等基本原理和技术有较深入的了解。
编译原理教学大纲(3).docx
编译原理教学大纲Principles And Techniques Of Compilers课程性质:专业课必修开课学期:5学分数:4修订年月:2007年7月张巍修订一、课程的性质和目的《编译原理》是计算机类专业的主干课程Z-O 本课程讲述高级程序设计语言的编 译程序构造的基本原理和实现技术,是计算机软件的核心技术之一。
通过本课程的学习, 学生应掌握文法和形式语言基础知识,具有分析和实现编译程序的初步能力,加深对程 序设计语言原理的理解,并且提高中、人型程序的分析和开发能力。
二、课程教学内容及学时分配总学时:64,英中授课:56,实验:8O第1章绪论(2学时)主要内容:编译程序;解释程序;编译程序的组成;编译程序的构造。
重点:掌握编译程序的基木概念;了解通用程序设计语言的主要特征;了解编译 器在计算机系统中的地位和作用;了解编译器的某本工作原理;了解编译器各个阶段的 工作与任务;理解对编译程序性能的基本耍求;了解编译器的编写工具。
第2章 文法和形式语言基础 (8学时)课程代码:242013 适用专业:计算机类 总学时数:64 编写年月:2004.7 执笔者:昊伟民编写主耍内容:符号串;文法和语言的形式定义;文法的分类;语法树和二义性;文法的限制和变换。
垂点:文法和形式语言的皋本概念,尤其是上下文无关文法与上下文无关语言。
第3章词法分析(6学时)主耍内容:词法分析程序的任务;词法分析程序的设计;止则文法、止则表达式和有限自动机;词法分析程序;PL/O词法分析的设计与实现。
重点:了解词法分析器的作用和基本丁作方式,理解构词规则与词法分析的关系, 掌握利用状态转换图构造词法分析器的基本方法。
第4章自顶向F语法分析(6学时)主要内容:递归了程序分析法;LL(1)分析法。
重点:LL(1)文法的相关技术方法,递归下降分析器构造方法和LL(1)分析表构造方法。
第5章自底向上语法分析(3养时)主要内容:白底向上方法概述,简单优先分析法,算符优先文法的定义,算符优先关系表的构造,算符优先分析算法,算符优先分析法的局限性重点:算符文法的形式;构造单优先分析表和算符优先关系分析表;句型的句柄和最左索短语。
第2章 词法分析-编译原理及实践教程(第3版)-黄贤英-清华大学出版社
=> 0 >
1=
2
>
3=
4
其他
Hale Waihona Puke 其他6*5*
识别>、>=、>>、>>=四个单词的状态转换图
数值型常量的识别
0~9
1~9
=> 0
1
其他
* 2
0
十进制整型数
=> 0
0~7 0 3 其他 4 *
八进制整型数
=> 0 0
0~9
0~9 |a~f
|a~f |A~F
3 x/X 5 |A~F 6 其他 7 *
十六进制整型数
字母或数字
* 0 字母 1 其它 2
识别标识符的转换图
一个状态图可用于识别一定的字符串,大多数程序 设计语言的单词符号都可以用转换图来识别。
字母或数字
* 0 字母 1 其它 2
识别过程是:从初始状态0开始,若读入一个字母, 转入1状态,若再读入字母或数字,仍处于1状态, 否则转向2状态,结束一个标识符的识别过程。状 态上的*表示多读入一个符号。
错误处理程序
源 程 序
词
语
语
法
法
义
分
分
分
析单 析 语
器
词 记
器
法 单
析 器
语 法 单
中 间 代 码 生 成 器
中 间 代
代 码 优 化
器
中 间 代
目 标 代 码 生 成
器
目 标 代 码
号
位
位
码
码
表格管理程序
2.1 词法分析器概述
• 功能:
源程序
词法分析程序 Token串 语法分析程序
《编译原理》教学大纲
《编译原理》教学大纲大纲说明课程代码: 3225003总学时: 64 学时(讲课 48 学时,实验16 学时)总学分: 4课程类别:学科基础课适用专业 : 计算机科学与技术(专业)预修要求: C 语言程序设计、 C++ 程序设计、数据结构课程的性质、任务及地位:《编译原理》是计算机科学与技术专业的一门重要基础课。
通过对该课程的学习,使学生掌握编译过程中的相关原理和编译技术,让学生能初步进行编译程序的开发和维护,同时促进提高学生开发软件的能力。
教学目的与基本要求:本课程的目的,通过向学生讲述编译系统的结构、工作流程及编译程序各部分的设计原理和实现技术,使学生既掌握编译技术理论的基础与基本知识,也具有设计、实现、分析和维护编译程序等方面的初步能力。
本课程理论性较强。
因授课对象为工科学生,所以在强调编译系统的构造原理和实现方法的同时,为培养学生的实际工作能力,通过上机实践进一步加深学生对课堂教学内容的理解。
目的是要使学生牢固掌握相关的基本理论和基本方法,并能初步利用上述理论和方法解决简单实际问题。
教学方法和教学手段的建议:在教学方法上,贯彻理论联系实际、“精讲、多练”的原则,进行案例式、启发式的教学,对于一些实际性较强的问题要多采用课堂讨论等方式,以提高学生的思辨能力和学习的主动性;引导学生读书、理解、体悟、运用相结合;提高学生的学习兴趣与热情,培养与发挥学生的提出、分析及解决问题的能力。
教学手段:运用多媒体教学手段 +黑板 +上机实验的手段。
采取课堂讲授、课堂讨论、课后练习与自学等形式。
大纲的使用说明:大纲对课程性质、目的等作简单说明,同时列出各章节要学习的知识点、重点、难点,便于教学时教授重点的安排和学生自学安排。
大纲正文第一章引论学时: 4 学时(讲课 4 学时,实验 0 学时)了解编译的概念;理解编译程序的各组成部分及功能。
本章讲授要点:介绍程序设计语言与编译程序间的关系,主要内容包括:各级程序设计语言的定义、源程序的执行、编译程序的构造、编译程序的分类、形式语言理论与编译实现技术的联系。
第4章 语义分析-编译原理及实践教程(第3版)-黄贤英-清华大学出版社
B0
B1 B2
char g_c1; char *g_ch2; int func1(int a, int b) {
int g_i1 = 5; for(;;){
char g_i1 = ‘b’; int *var1; printf(“Input numbers”); …… printf(“the result is %d”,*var1); } }
4.1语义分析概述
语义分析:在进行翻译之前,必须对这些语法上正确的语法 单位的内部逻辑含义是否正确进行检查。
语义分析的地位和作用
语法树 语法分析
语义分析
建立 符号表
静态语 义检查
语法树
语义错误
编译的后续阶段
符号表
语义分析的任务 对结构上正确的源程序进行上下文有关性质的审查,审查源 程序有无语义错误,为代码生成阶段收集类型信息。
B3 B4
变量表保存源程序中的所有变量定义。 如果语言没有作用域的限制,就可以将所有的变量记录在变量 表中,这种情况下,不允许定义同名变量。
入口 1 2 3 4
……
变量名 g_i1 var1 g_c1 g_ch2 ……
变量长度 变量类型 值 地址
4
int
4
int
4
char
5
char *
……
有作用域的限制的,将从最外层开始到当前作用域的编号组合 起来,其内部元素是每个作用域的编号,即:作用域路径
声明与定义语义检查
(1)变量未声明就使用、变量重定义; (2)函数未声明就定义和调用、函数重定义、函数声明与定
义不匹配、函数调用与声明不匹配、函数和变量重名等; (3)数组长度必须是正整数、数组名不能和变量名、函数名
第3讲 语法树和文法的二义性-讲义-编译原理及实践教程(第3版)-黄贤英-清华大学出版社
第3讲语法树和文法的二义性0.本节教学内容:1)回顾第2讲的内容,为本讲打下基础2)教材第2章2.33)教材第2章2.44)教材第2章2.5一.本节教学要求:用语法树来观察句子的构成,表示句子的层次关系。
然而一个句子不一定只对应于一棵语法树,也就是说文法可能存在二义性。
以及文法的分类和Sample 语言的简介。
二.教学方式及学时分配:采用教师讲授+学生提问+学生练习的方式总共2学时,主要分配在第2.3节上,提问及总结以前的内容大约20分钟三.教学重点:●语法树●文法的二义性四.教学难点:●文法的二义性五.教学过程中的注意事项:1.本节内容概念相对较多,采取先提出问题,再解决问题的授课方式,让学生抓住知识要点。
3.以讲解+课堂练习的方式,巩固学生对具体实现方法和步骤的练习。
六.学习方法:1.一定要抓住老师上课时提出的问题,从而掌握知识要点;然后反复练习掌握基本概念和基本方法。
3.从本节开始难度增大,多练习,在完成作业的过程中加深对抽象理论的理解。
七.教学内容1.复习2.语法分析树语法分析树就是用一张图来表示一个句型的推导,简称语法树,有助于理解一个句子语法结构的层次。
在语法树生长过程中的任意时刻,所有那些没有后代的端末结点从左到右排列起来构成一个句型。
例如,对文法(2.1),E→E+E | E*E | (E) | -E | i表达式(i+i)*i的最左推导的语法树(包括推导过程)如下错误!未找到引用源。
所示。
虽然是最左推导的语法树,但在第4层,到底是左边的E先推导出i,还是右边的E先推导出i,从语法树上反映不出来。
因此一棵语法树表示了一个句型很多可能的不同推导过程,包括最左推导和最右推导。
一棵语法树是这些不同推导过程的共性抽象,它不能表示非终结符替代顺序的选择。
如果只考虑最左推导(或最右推导),则可以消除推导过程中产生式应用顺序的不一致性。
每棵分析树都有一个与之对应的唯一的最左推导和唯一的最右推导。
实验内容-编译原理及实践教程(第3版)-黄贤英-清华大学出版社
• 查找识别出的单词的种别码,将输出形式改为二元形式 • 画出该高级语言中其他单词类别的状态转换图,并编写
识别函数,并给出测试用例进行测试 • 利用可视化界面展示自己的实验结果
– (3)完成实验报告
实验二:词法分析自动生成器 (2学时+课外)
• 实验内容:利用flex词法分析自动生成工具(或者其他的 词法分析工具),生成Sample语言的词法分析程序。要求:
(含关系表达式)的文法 • 利用递归下降的方法编写判断给定的单词串能否构成一
个正确的布尔表达式的函数
– (3)完成实验报告
实验四:语句的分析(2学时+课外)
• 实验内容:根据Sample语言的语法规则判定输入的一串单 词能否构成一个正确的语句。要求: – (1)基本内容:
• 写出Sample语言(或你所选定的语言)的赋值语句的文 法
– (5)完成实验报告
实验七:运行时存储空间分配 (2学时+课外)
• 实验内容:利用VC++或者其他语言的反汇编程序查看C语 言程序生成的汇编代码,观察程序在内存中的存储情况。 – (1)基本内容:
• 分析程序运行时代码和数据是如何在内存中分配空间的 • 分析一个函数在内存中占用的空间是如何分配的 • 分析函数调用时实在参数和形式参数如何存储和传递 • 分析全局变量是如何在内存中存储的
• 编写Lex源程序,去掉给定Sample语言程序中的注释, 并将所有关键字变为小写
• 编写Lex源程序,能识别Sample语言(或者自选语言) 的所有单词,生成词法分析程序
– (3)完成实验报告
实验三:表达式的分析 (4学时+课外)
• 实验内容:根据Sample语言的语法规则判定输入的一串单 词能否构成一个正确的表达式。要求: – (1)基本内容1:
第4讲 词法分析概述-讲义-编译原理及实践教程(第3版)-黄贤英-清华大学出版社
第4讲词法分析概述0.本节教学内容:1)回顾上一章的内容,为本章打下基础2)教材第3章3.13)教材第3章3.2一.本节教学要求:掌握词法分析器的任务和功能,理解词法分析器的设计,为实验部分词法分析器的手工生成打下基础。
二.教学方式及学时分配:采用教师讲授+学生提问的方式总共2学时,主要分配在第3.2节上,提问及总结以前的内容大约20分钟三.教学重点:●词法分析器的任务和功能●词法分析器的设计●状态转换图四.教学难点:●词法分析器的设计●状态转换图五.教学过程中的注意事项:1.首先介绍词法分析的功能、输入、输出接口,让学生对语法分析的地位和如何编写有一个整体的把握,这样学生做实验才容易上手。
2.以讲解+课堂练习的方式,巩固学生对具体实现方法和步骤的练习。
六.学习方法:1.从整体上把握词法分析器与周围各部分的关系,为理解和实验作准备。
2.从本节起实验开始,具有一定的难度,要调整学习方法,课上认真理解,课下多动手实践。
七.教学内容1.复习2.词法分析器的功能词法分析的主要任务是从左至右逐个字符地对源程序进行扫描,将字符拼接成单词,每当识别出一个单词,就产生其种别码,把作为字符串的源程序改造成单词符号串的中间形式,提交给语法分析程序使用。
它是编译器中唯一与源程序打交道的部分,主要工作有:(1)按规则识别单词,输出单词本身及其种别码。
这是词法分析的主要任务;(2)滤掉源程序中的无用成分,如注释、空格、回车换行等。
这些部分只是有助于源程序的阅读,对生成代码无用;(3)调用出错处理器,识别并定位错误。
词法错误是源程序中的常见错误,如出现非法字符、违反构词规则的单词等;(4)调用符号管理器,将识别出来的单词及其属性进行管理。
有些源语言支持宏预处理功能,也可以在词法分析程序中完成。
3.单词的类型程序设计语言可以根据单词在语言中的作用将单词大致分为5类:(1)关键字:这类单词在特定语言中有固定的意义,如begin、end、while 等,它们是字母的固定串。
第6章 运行时存储组织-编译原理及实践教程(第3版)-黄贤英-清华大学出版社
q(1,9)
q的 活动记录 栈
int m,n
区
BP
main的活动记录
int a[11]
全局数据区
p(7,9) q(7,7) q(9,9)
SP int i,j,x,v p(1,9) int m,n
BP int i q(1,9)
int m,n main的活动记录
(20array();
(22) a[0] = -999;
(23) a[10] = 999;
(24) quicksort(1,9);
(25) }
函数执行时的活动
• 一个函数的一次执行指的是从函数体的起点开始,
最后退出该函数,将控制返回到该函数被调用之 后的位置。
(a) 源程序
T1:(临时单元) T2:(临时单元) T3:(临时单元) C: 3(常数) a:(局部变量) x:(形参) y:(形参) z:(形参) P:(返回地址)
(b)四元式形式的中间代码
mov AX,x mul y mov T1,AX mov AX,a mul C mov T2,AX mov AX,T1 add AX,T2 mov T3,AX mov AX, Z mov Z, AX ret
第六章
运行时存储空间的组织
本章要求
• 主要内容: – 程序运行时存储器的划分 – 活动记录和局部数据布局 – 函数调用 – 存储分配方式:静态存储分配、栈式存储分配和 堆式存储分配,垃圾回收机制 – 垃圾回收机制
• 重点掌握: – 源程序运行时的活动 – 函数执行时的活动 – 名字的作用域 – 参数传递方式
返回值 寄存器保护区
形式参数 局部数据 临时数据 一般的活动记录
局部数据布局
局部数据区是在编译函数的定义时分配的,长度可变的数据 保存在这个域之外。只要我们记住了为前面声明的变量分配 的内存单元地址值,通过这个地址值就能够确定一个局部变 量的相对地址,如相对于活动记录的开始点的相对地址。 相对地址(或偏移)是数据对象地址和某个位置的地址差。
第20讲 语义分析和中间代码生成概述-讲义-编译原理及实践教程(第3版)-黄贤英-清华大学出版社
第20讲语义分析和中间代码生成0.本节教学内容:1)回顾编译程序的组成部分,了解本节内容所处的位置2)属性文法和语法制导的翻译的基本概念3)语义分析与处理的方法4)中间代码的表示形式一.本节教学要求:1属性文法和语法制导的翻译的基本概念2语义分析与处理的方法3中间代码的表示形式二.教学方式及学时分配:采用教师讲授+提问+学生练习的方式总共2学时,提问及总结以前的内容大约20分钟三.教学重点:1.语义分析和中间代码生成在编译器中的位置及其功能2.属性的定义及属性的计算3.中间代码的表示形式4.自底向上语法语法制导翻译的特点四.教学难点:1.自底向上语法语法制导翻译的特点五.教学过程中的注意事项:1.注重学生知识的前后联系,复习编译程序的结构很又必要2.语法制导的翻译是在语法分析的基础上,当分析出一个语法单位后进行翻译,根据语法分析的方法,有自底向上和自顶向下两种方法。
3.理解中间代码的形式是本节学习的一个重点,必须掌握。
六.学习方法:1.理解翻译的文本转化特性是学习编译程序的一个关键,本节转换的目标文本是中间代码。
七.教学内容2.本次教学内容小节:1.语义分析和中间代码生成在编译器中的位置及其功能2.属性文法和语法制导的翻译的基本概念3.中间代码的表示形式4.自底向上语法语法制导翻译的特点八.本章参考资料:1.《编译原理》第6章,吕映芝编,清华大学出版社2. 编译原理实验指导书, 例题中间代码部分3. 编译原理——习题与解析第6章伍春香编,清华大学出版社4. 编译原理课程辅导与习题解析第4章,胡元义编,人民邮电出版社九.本节作业:复习教材第六章第1,2节,第七章的第一节。
第16讲 算符优先分析表的构造-讲义-编译原理及实践教程(第3版)-黄贤英-清华大学出版社
第16讲自下而上语法分析方法0.本节教学内容:1)回顾上一节的内容,为本节打下基础2)算符优先关系表的生成算法3)算符优先分析方法一.本节教学要求:1. 掌握算符优先分析方法2.掌握算符优先关系表的构造算法二.教学方式及学时分配:采用教师讲授+提问+学生练习的方式总共2学时,提问及总结以前的内容大约20分钟三.教学重点:1.算符优先分析方法及其基本概念四.教学难点:1.算符优先分析中最左素短语的概念五.教学过程中的注意事项:1.算符优先关系表的构造要使用FirstVT,LastVT集合,因此必须在课前重新复习FirstVT,LastVT集的定义和计算方法,目的是为了讲解算符优先分析表的构造算法。
2.本节内容中总控程序的工作过程的理解是关键,一定要讲清楚总控程序的工作过程,以及何时进行归约,如何进行归约。
3.在讲解算符优先分析时要和规范归约过程进行比较,最左素短语与句柄之间的差别,也就是何时进行归约构成了算法之间的主要差别。
六.学习方法:1.从整体上把握算符优先分析总控程序的工作过程以及何时进行归约,为理解和计算作准备。
七.教学内容FirstVT,LastVT集的概念和计算方法2.构造优先关系表如果每个非终结符的FIRSTVT和LASTVT集均已知,则可根据定义构造优先关系表。
–构造思路:•(1) 若产生式是形如:P→…ab…或 P→…aQb…的形式,则有a == b•(2)若产生式右部是...aR...的形式,则对于每个b∈FirstVT(R)都有a 《 b• (3)若产生式右部有...Rb的形式,则对于每个a∈LastVT(R)集,都有a 》 b优先关系表构造算法for 每个形如P X1X2…X n的产生式 dofor i =1 to n-1 dobeginif Xi和Xi+1都是终结符 thenXi = Xi+1if i<= n-2, Xi和Xi+2是终结符, 但Xi+1为非终结符 thenXi = Xi+2 if Xi为终结符, Xi+1为非终结符 thenfor FirstVT中的每个元素a doXi < a ;if Xi为非终结符, Xi+1为终结符 then for LastVT中的每个元素a doa > Xi+1 ;end;练习给定文法G[S]:S -> a | (T)T -> T,S | S 的FirstVT和LastVT集,构造优先关系表。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《编译原理》教学大纲一课程简介本课程是计算机科学与技术专业的专业核心课程。
本课程主要讲述高级语言翻译为计算机能执行的代码的原理、过程、方法和技术,核心是介绍高级语言到汇编语言的翻译。
让学生理解编译和高级语言程序之间的关系,掌握词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等各个阶段的原理、方法和实现技术,真正认识计算机信息处理的实质、训练抽象思维能力、体验系统软件的开发过程,进一步提升计算机科学与技术的专业素养。
二课程目标(一)课程具体目标1. 掌握形式语言和自动机的基本概念,理解高级语言编译的基本原理,并能够将这些原理应用于高级语言的设计之中;(毕业要求1.3 掌握计算机基础理论,能够用于对计算机应用系统的设计方案和模型进行推理和验证。
)2. 能够理解现有某高级语言的编译系统中各模块的功能和实现方法,能够对不同方法的优劣进行对比和分析;(毕业要求4.1 能够运用科学方法,对计算机领域的复杂工程问题进行需求和功能分析。
)3. 理解编译程序的结构及各个模块的功能,利用软件工程方法分析和设计某语言的编译程序的各个模块,并能够选择合适的方法实现。
(毕业要求1.4 能够运用专业知识,对计算机领域复杂工程问题的解决方案进行分析、改进。
)(二)课程目标与毕业要求的关系本课程目标主要支撑的毕业要求指标点如表1所示。
除表1所列举指标点外,根据学生特点、本课程教学特色,教学目标还涉及对毕业要求5(选择和使用现代工具)等能力培养,为弱支撑,不在表1中列举。
表1 本课程对专业毕业要求指标点的支撑(三)教学内容安排总体思路本课程的教学内容,以课程具体目标为总体指导进行制定。
通过形式语言与自动机的相关基础知识、高级语言到汇编语言的翻译原理、方法和实现技术等教学内容,传授基于某种高级语言编译程序构造的一般原理和基本方法,如词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等各个阶段的原理等知识,从而有针对性地培养学生模型构建能力(课程目标1)、系统分析能力(课程目标2)和方案选择与实现能力(课程目标3)。
为达成课程具体目标,教学内容中除安排课内讲授知识外,还包括课程作业和课内实验,旨在巩固课堂传授知识点,使学生在面对计算机复杂工程问题时,能将编译技术合理运用于该类工程的设计实现之中,进行解决方案的分析和改进,并进行合理的需求分析、功能分析和验证。
本课程的教学内容不仅完全覆盖课程拟达成的具体目标,同时,根据计算机科学与技术专业人才培养总体目标,以及课程所面向学生特点,课程内容还涉及计算机体系结构、汇编语言、项目管理等内容,旨在培养知识交叉应用、沟通交流等综合工程能力。
三教学内容及基本要求(一)编译程序的基本概念(4学时)主要内容:(重点覆盖课程目标1)⑴程序设计语言及翻译程序。
⑵编译系统。
⑶编译过程和编译程序的结构。
⑷编译程序的构造方法。
⑸认识高级语言:结构、构成成分和语言规范。
⑹编译程序的发展。
1. 基本要求⑴了解编译技术的发展,编译程序的构造方法。
⑵掌握高级语言程序编译系统,编译过程,程序设计语言的结构和规范。
⑶掌握编译过程和编译程序的结构。
2. 重点、难点重点:高级语言的编译过程。
难点:编译程序的结构,高级语言的编译过程。
3. 作业及课外学习要求作业:了解有关高级语言的编译系统,认识给定高级语言代码的编译过程及结果。
(二)词法分析(8学时)(重点覆盖课程目标1,3)主要内容:⑴词法分析概述。
⑵高级语言中的单词。
⑶单词的识别。
⑷词法分析器的设计。
⑸正则表达式与有穷自动机。
⑹词法分析器的自动生成工具。
1. 基本要求⑴了解词法分析器自动生成工具。
⑵了解高级语言中单词的种类。
⑶掌握利用状态转换图识别单词的方法。
⑷掌握利用正则表达式进行单词识别的原理和方法。
2. 重点、难点重点:状态转换图,有穷自动机。
难点:正则式转NFA,NFA转DFA,DFA最小化。
3. 作业及课外学习要求作业:画状态转换图,将自然语言转换为正则表达式,正则式到确定的最小化DFA的转换。
课外学习要求:上网查阅资料,多种不同的词法分析自动生成器的使用方法。
(三)语法分析(10学时)(重点覆盖课程目标1,3)主要内容:⑴语法分析概述。
⑵上下文无关文法。
⑶自上而下语法分析方法:递归下降分析法和预测分析方法,LL(1)文法。
⑷自下而上的语法分析,移进-归约的规范方法,算符优先、LR方法。
⑸语法分析的自动生成器。
⑹语法分析器的设计。
1. 基本要求⑴了解语法分析自动生成器。
⑵掌握上下文无关文法相关概念,熟悉用上下文无关文法定义某种高级语言的语法结构。
⑶掌握自上而下语法分析的特点,对文法的要求,能用两种不同的自上而下分析方法对给定的文法进行判断和分析。
⑷掌握自下而上语法分析的基本概念和特点,掌握用两种不同的自下而上分析方法,能对给定的文法进行判断和分析。
2. 重点、难点重点:上下文无关文法的基本概念,LL(1)文法,OPG文法,LR文法,各种文法的分析的基本算法。
难点:对文法进行判断和分析。
3. 作业及课外学习要求作业:给定某高级语言的特定语法成分对应的文法,能对文法进行各种判断和分析。
课外学习要求:通过完成作业和实验,进一步掌握不同语法分析适合于不同种类的文法的要求。
通过网络搜索,了解各种不同的语法分析自动生成器。
(四)语义分析(3学时)(重点覆盖课程目标1,3)主要内容:⑴语义分析概述。
⑵某高级语言各种语法成分的语义描述。
⑶符号表管理技术。
⑷静态语义检查技术。
⑸语义分析器的设计。
1. 基本要求⑴掌握语义分析的相关概念。
⑵掌握符号表管理技术。
⑶掌握静态语义检查的相关方法和技术。
⑷熟悉某种具体的高级语言对语义的要求。
2. 重点、难点重点:高级语言的语义描述方法,符号表管理技术。
难点:符号表管理技术、静态语义检查技术。
3. 作业及课外学习要求作业:对某特定高级语言的语法成分进行静态语义检查。
课外学习要求:熟悉不同的高级语言的语义描述。
(五)中间代码生成(8学时)(重点覆盖课程目标1,4)主要内容:⑴中间代码生成概述。
⑵属性文法的基本概念,高级语言语法成分的语义表示。
⑶中间代码及其各种形式。
⑷声明语句、算术表达式和布尔表达式、控制语句、函数的目标结构和翻译方法。
1. 基本要求⑴掌握中间代码的形式,语法制导的翻译方法。
⑵掌握属性文法的概念,能用属性文法表示某高级语言特定语法成分的语义信息。
⑶掌握高级语言各种语法成分的翻译技术。
⑷中间代码生成器的设计。
2. 重点、难点重点:用属性文法描述各种语法成分的语义信息,各种语法成分语法制导的翻译方法。
难点:用属性文法描述各种语法成分的语义信息。
3. 作业及课外学习要求作业:将高级语言的特定语法成分翻译为特定的中间代码形式。
课外学习要求:熟悉中间代码形式,调试程序,将特定高级语言的特定语法成分翻译为中间代码。
(六)运行时存储组织(2学时)(重点覆盖课程目标1,4)主要内容:⑴存储器组织。
⑵函数调用相关概念。
⑶存储分配策略。
⑷垃圾回收机制。
1. 基本要求⑴了解垃圾回收机制。
⑵掌握程序运行时存储器的划分,活动记录。
⑶掌握函数调用方式及相关概念。
⑷理解各种存储分配方式,掌握栈式存储分配策略。
2. 重点、难点重点:程序运行时存储器的划分,函数调用机制,栈式存储分配策略。
难点:函数的相关概念,函数运行时的存储分配。
3. 作业及课外学习要求作业:函数运行时存储器变化。
课外学习要求:上网查阅存储分配的相关信息。
(七)代码优化(2学时)(重点覆盖课程目标1,4)主要内容:⑴基本块的划分,程序流图。
⑵局部优化技术。
⑶循环优化技术。
1. 基本要求⑴掌握基本块的划分方法,画程序流图。
⑵掌握局部优化技术。
⑶掌握全局优化技术。
2. 重点、难点重点:基本块划分,流图,优化技术。
难点:基本块划分。
3. 作业及课外学习要求作业:对给定的程序划分基本块,画出流图。
课外学习要求:上网查阅更多的代码优化技术。
(八)目标代码生成(3学时)(重点覆盖课程目标1,4)主要内容:⑴目标代码生成器概述。
⑵目标机器结构及指令系统。
⑶简单的代码生成技术。
⑷基本块的代码生成方法。
⑸从DAG生成目标代码的方法。
⑹目标代码生成器的设计。
1. 基本要求⑴了解目标代码生成器所涉及到的相关信息。
⑵熟悉某种目标机器结构及指令系统。
⑶掌握简单的代码生成技术。
⑷掌握引用信息、活跃信息,寄存器描述器和地址描述器,基本块的代码生成技术。
⑸了解从DAG生成目标代码的方法。
⑹熟悉目标代码生成器的设计方法。
2. 重点、难点重点:简单代码生成技术、基本块的代码生成技术。
难点:引用信息、活跃信息,寄存器描述器和地址描述器。
3. 作业及课外学习要求作业:能够对给定的中间代码生成目标代码。
课外学习要求:上网查阅目标代码生成的方法。
(九)课程实验实验一:词法分析实验(6学时)实验内容:(重点覆盖课程目标2,3)设计并实现sample语言或者其他高级语言的词法分析器,读入源程序,根据对应高级语言的构词规则拆分出单词。
其中用状态转换图的方法实现词法分析实验2学时,用自动生成器实现词法分析程序4学时。
实验二:语法分析实验(6学时)实验内容:(重点覆盖课程目标2,3)利用自上而下的方法,或者自下而上的语法分析方法,设计并实现sample语言或者其他语言的语法分析器。
其中需要分别实现算术表达式、布尔表达式、控制语句的语法分析。
实验三:语义分析实验(2学时)实验内容:(重点覆盖课程目标2,3)根据给定语言的静态语义要求,设计并实现sample语言或者其他语言的静态语义检查程序。
实验四:中间代码生成实验(6学时)实验内容:(重点覆盖课程目标2,3)利用属性文法和语法制导翻译方法,设计并实现sample语言或者其他语言的中间代码生成器。
其中需要分别实现算术表达式、布尔表达式、控制语句的中间代码生成。
实验五:运行时存储组织实验(2学时)实验内容:利用VC++或者其他语言的反汇编程序查看C语言程序生成的汇编代码,观察程序在内存中的存储情况。
实验六:代码优化(2学时)实验内容:(重点覆盖课程目标2,3)设计基本块的DAG代码优化器。
实验七:目标代码生成实验(2学时)实验内容:(重点覆盖课程目标2,3,4)根据简单代码生成器的生成算法,设计并实现目标代码生成器,将中间代码转换为汇编代码。
四教学安排及教学方式总学时64学时,其中,讲授40学时,实验(上机)24学时。
讲授环节主要采用教师讲解、演示、互动的教学形式。
教师讲解知识点、演示程序代码,使学生对知识点形成直观印象,并通过课堂教学双方互相提问,与学生互动,鼓励学生在课堂上发表自己的见解,加深对知识点的理解,达到课程目标。
上机环节主要采用教师安排任务、学生自主上机练习,教师现场指导、答疑的形式。
上机练习可利用实验室电脑或学生个人电脑编程,通过安装在本地的编译环境进行上机练习。