基于层次递进模式的“编译原理”课程教学研究与实践
- 格式:pdf
- 大小:1.12 MB
- 文档页数:5
512019年3月刊
专业与课程建设Major Construction & Course Construction
0 引言
“编译原理”课程是计算机科学与技术专
业的专业课程,主要讲授计算机系统重要的系统
软件—程序设计语言编译程序的设计原理和实
现技术,其特点是理论抽象、系统性强、实践性
强,理论与实践结合紧密。同时,“编译原理”
课程中的经典算法蕴含着计算机科学中抽象问题、解决问题的思路和方法及形式化的描述等,
可提高学生的专业素养,培养其发现问题、分析
问题和解决问题的能力。“编译器设计的原理和
技术还可用于编译器之外的众多领域。因此,这
些原理和技术通常会在一位计算机科学家的职业
生涯中被多次用到。研究编译器的编写涉及程序
设计语言、计算机体系结构、形式语言理论、算
法和软件工程”[1]。鉴于此,对“编译原理”课
程教学的研究十分重要。
国内外高校一直致力于对“编译原理”课程
的教学内容和教学方式进行研究,根据学校专业
定位和培养目标,设计课程教学内容。斯坦福大
学“编译原理”课程选用“龙书”—《编译原
理技术和工具》作为参考教材,卡耐基梅隆大学
“编译器设计”课程选择“虎书”—《现代编
译原理》作为参考教材[1-4]。虽然选用的参考教材
不同,但课程内容包括形式语言、有限自动机、
词法分析、语法分析、语义分析、代码生成、代
码优化、类型检查等。课程的特点是重理论,更基于层次递进模式的
“编译原理”课程教学研究与实践
于双元,徐金安,丁 丁,陈钰枫
(北京交通大学计算机与信息技术学院,北京 100044)
【摘要】 “编译原理”课程是计算机科学与技术专业的重要专业课程之一,本文针对“编译原理”课程理论性强、抽象性强、实践性强、系统性强的特点,探讨了课程的目标定位,基于层次递进模式从课程教学内容设计、教学方法设计、教学实施等几个方面结合教学实际进行了研究和实践,阐述了相应的教学理解和教学体会。【关键词】层次递进;编译原理;教学设计;教学方法;教学过程【中图分类号】G642 【文献标识码】A 【文章编号】2095-5065(2019)03-0051-05
收稿日期:2018-12-30作者简介:于双元(1965—),女,黑龙江佳木斯人,硕士,副教授,硕士生导师,研究方向为分布式计算、机器学习和自然语言处理;徐金安(1970—),男,湖北荆州人,博士,教授,博士生导师,研究方向为自然语言处理和机器翻译;丁丁(1980—),女,内蒙古赤峰人,博士,副教授,博士生导师,研究方向为云计算、大数据;陈钰枫(1981—),女,福建南平人,博士,副教授,博士生导师,研究方向为自然语言处理、机器翻译和信息抽取。基金项目:2017年北京交通大学校级教改项目“‘编译原理’课程教材建设”(项目编号:暂无)。2019年3月刊
52 Industry and Information Technology Education工业和信息化教育
重实践,在考核体系中,斯坦福大学的实验成绩
占总成绩的50%,卡耐基梅隆大学的实验内容甚
至占到总成绩的70%,而且理论教学和实践教学
无论在内容上还是进程上都结合得十分紧密。
“编译原理”课程的理论教学内容、实践教学内
容、教学方式、教学过程等的设计对课程教学目
标的达成十分重要。国内高校结合学校的专业定
位和培养目标,在“编译原理”课程的教学内容
选取和教学方式设计上进行了多方位的研究和实
践[5-7]。
1 理论教学内容设计
“编译原理”课程的特点是抽象理论内容较
多,大多概念和方法基于形式化的描述;同时又
具有较强的实践性,实践内容与理论内容结合十
分紧密;编译过程包括词法分析、语法分析、语
义分析及中间代码生成、代码优化、目标代码生
成5个阶段,具有较强的系统性。因此,根据学
时安排设计精准的教学内容,对学生在课程学时
内理解、掌握课程的核心内容,并在以后的职业
生涯中延展学习十分关键。本文基于层次递进模
式研究并设计了教学内容,更有利于学生循序渐
进、逐步深入地学习。
1.1 理论教学内容设计原则
(1)选取能够体现编译程序设计原理实质
的基本理论和基本方法的内容。如形式语言与自
动机理论,使学生深刻理解和掌握课程的理论基
础,建立形式化方法的基本概念,深化抽象思维
的能力,这也是“编译原理”课程教学的本质
所在。
(2)选取能够体现编译过程实现核心和实现
技术的方法和内容。如LR分析法、语义分析和中
间代码生成等,使学生能够充分体会编译程序设
计核心方法的由来,理解设计思想及技术实现。(3)选取能够体现编译中理论与实践紧密结
合的内容,同步贯穿理论和实践的相关内容。如
实验项目中从词法分析、语法分析、语义分析到
目标代码生成的实验型语言编译程序的实现,使
学生深刻领会理论对实践的指导作用。
1.2 理论教学内容设计
根据设计原则,本文设计了层次递进模式的
教学内容总体结构,如图1所示。
教学内容可归纳为理论基础、原理方法、技
术实现3个递进层次,理论基础是编译原理依托的
原理;原理方法是编译程序设计的原理和方法,
涵盖“编译原理”课程的经典问题;技术实现是
编译程序依托原理方法在实现时采用的技术和
手段。
经典问题
理论基础原理方法编译程序实现
编译程序设计技术实现
图1 层次递进模式的教学内容总体结构
(1)在理论基础方面,主要包括:①符号串
的概念、文法的形式定义;②语言的形式定义;
③推导与归约的形式定义;④语法树和二义性;
⑤句型和句子、短语的基本概念和意义;⑥简单
短语、句柄的基本概念和意义;⑦有限自动机的
形式定义等。其中,符号串、句子、句型的概念
是理解编译程序的输入—源程序的关键;句型
与句子的关系、符号串与源程序的关系、句子与
源程序的关系;文法和语言的形式化描述是形式
化方法理解的关键;推导与归约、语法树与二义
性是词法分析方法、语法分析方法设计的最直接
的理论基础;句子、句型及句型中的概念是词法
分析、语法分析中理解分析方法的关键。
首先,以符号串、句子和源程序为例,编
译程序是对符号串进行分析,句子是符号串的子532019年3月刊
专业与课程建设Major Construction & Course Construction
集,而正确的源程序是句子,错误的源程序不是
句子。所以,编译程序的根本任务是判定用户书
写的源程序是不是文法中合法的句子。这样,就
把基础理论与编译程序的设计联系起来,而不是
单纯地介绍基础理论。
其次,以最左推导和规范归约为例,最左推
导是词法分析中左线性正则文法状态转换图、语
法分析中递归下降分析方法和LL(1)分析方法
的理论基础;规范归约是词法分析中右线性正则
文法状态转换图、简单优先分析、算符优先分析
(所谓的规范归约)、LR分析的理论基础。
(2)在原理方法方面,主要内容包括:①正
则文法到状态图的转换;②正则表达式到有限自
动机的转换;③递归下降分析方法;④LL(1)
分析方法;⑤算符优先分析法;⑥LR分析法;
⑦语义分析、目标代码结构分析;⑧目标代码生
成寄存器分配算法等。这些原理与方法是词法分
析、语法分析、语义分析及中间代码生成、目标
代码生成设计思想的核心。尽管很多教材不再介
绍算符优先分析法,但是其中“最左素短语”概
念的由来,对于培养学生解决问题的能力是有
益的。
首先,以正则文法到状态图转换为例,词法
分析所识别的单词符号由正则文法描述,而由正
则文法构造状态转换图、状态转换图识别符号串
的过程是词法分析程序的设计依据。同时,这一
过程的理论基础是最左推导和规范归约,也是句
型分析中的自上而下分析和自下而上分析的设计
依据。有限自动机也是词法分析自动生成工具的
理论依据。
其次,以LR分析法为例,LR分析法是自下向
上的语法分析方法,可解决大部分无二义性的上
下文无关文法,其核心思想是规范归约过程,所
以寻找当前句型的句柄是LR分析的关键所在。LR
分析方法也是语法分析自动生成工具设计的理论
依据。
(3)在技术实现方面,侧重理论与实践的
紧密结合,主要包括:①词法分析程序的实现; ②递归下分析程序的编写和First、Follow集合的
构造;③LL(1)分析中分析表的构造和总控程
序的设计;④算符优先分析最左素短语的确定与
算符优先矩阵构造;⑤LR分析中分析表的构造及
LR分析器的构造;⑥语义分析中目标代码结构的
分析与语义动作的添加;⑦目标代码生成中四元
式引用信息和活跃信息的建立及寄存器分配方法
等。作为编译程序实现的技术方法,这些技术方
法使学生在理论课程学习的同时,同步完成实验
型语言编译程序的设计与实现。
首先,以LL(1)分析为例,LL(1)分析
的理论基础是最左推导,为了实现无回溯无左递
归的最左推导过程,在技术上需要构造LL(1)
分析表,建立分析栈,设计总控程序,进而实现
LL(1)分析。
其次,以LR(0)分析为例,LR(0)分析的
理论基础是规范推导,为了实现这种规范推导过
程,在技术上需要构造LR(0)分析表,建立分析
栈,设计总控程序,进而实现LR(0)分析。
2 实践教学内容设计
2.1 实践教学设计原则
编译程序是计算机重要的系统软件,“编
译原理”课程主要讲授编译程序的构造原理和实
现,因此其实践环节(从抽象理论到设计方法再
到技术实现的研究过程)是必不可少的,否则学
生无法真正领会编译原理的实质,也无法体会计
算机解决问题的基本方法。实践教学的设计原则
是与理论教学紧密结合,同步实现编译过程的每
个阶段。
2.2 实践教学内容设计
为完成实验型语言的编译程序设计的主要阶
段,课程安排了6个实验项目:①词法分析程序设