编译原理教学方法论文

2024-09-01

编译原理教学方法论文(精选9篇)

编译原理教学方法论文 篇1

一、教学基本现状

由于编译程序的庞大和复杂性, 编译原理课程内容包含了很多特殊的算法和思想, 如自上而下语法分析的LL (1) 分析算法、自下而上的LR (1) 语法分析算法、词法分析的NFA向DFA转化的子集法, 化简DFA的分割算法、FIRST和FOLLOW集合计算法等。该课程还高度依赖于学生在低年级所学的专业基础课程, 如程序设计语言、数据结构等, 对学生而言, 在一开始进入课程学习时就必须掌握一定程度的相关专业知识, 也要求对学习的难度有一定的思想准备及具备化解困难能力。而学生看到这样的困难往往就由于基础知识薄弱而产生畏难心理, 加上对编译知识技术学习必要性缺乏认知, 也会逐步失去学习兴趣, 走上厌学的道路。

理论教学和实践脱轨, 也是编译教学的普遍现象。因为编译理论的复杂抽象, 学生在花了很大力气理解和吸收理论知识之后, 往往感觉到用于实践更为困难。编译算法的跟踪执行过程, 无法像数据结构的算法学习一样简单, 因为很多中间结果根本无法输出。而教学课时所限, 对完整编译器的设计各个环节之间接口的介绍, 一些算法的具体编程设计, 老师无法在课内一一讲述, 学生也模模糊糊。实践内容的难度, 也让学生对无法在短期课内学习中真正融会贯通掌握编译技术。

二、教学方法改革思路

1、科学引导, 明确教学目标, 提升学习兴趣

教师通过精心备课, 针对编译程序的各个功能环节, 引导学生积极发现内在的联系和规律, 帮助学生建立起对编译程序的宏观认识, 抓住知识体系的主线, 教师再逐一将个环节的重点难点问题指出。学生在已掌握知识的基础上思考如何解决问题, 教师再提示如何改进, 从而启发学生积极思维。学生有了思考的着力点, 自然就产生了学习的兴趣。对于持有学习编译技术无用观念的学生, 教师需明确学习的目标。编译原理与技术, 涉及的操作系统、计算机指令系统等内容, 对于编程技术的提高大有裨益, 它的一些算法和实现技术同时也被某些应用软件设计采用。如:应用与文本编辑器的正规式和有限自动机, 字符串查找中使用有限自动机, 网络应用中使用必经节点算法、网络协议使用文法来定义等等。

2、教学内容优化, 提升课堂教学质量

对于知识点复杂抽象, 内容繁多的编译课程, 教师在备课过程势必要熟悉吃透教材, 对教材内容进行组合优化。

(1) 选择合适的教材与教学手段

被计算机专业人士誉为“龙书”的《Compilers Principles, Techniques and Tools》 (中文译名为《编译原理》, 机械工业出版社出版) , 虽然被很多学者推崇, 但并不适合作为本科学生学习的教材, 因其学科大全式的介绍, 涵盖过多的内容且理解难度更大。国内比较好的编译原理经典教材也有很多, 可根据教师自身教学设计的精选教材。

(2) 优化教学过程

1) 由于C语言是我们学生的基础入门编程语言, 所以授课的程序设计语言均为C语言背景。一般的编译原理教材中, 很少以某类具体程序语言为例, 而以某些字符如:A、B、C代替, 形式化语言。学生在接受知识的时候就出现了偏差, 因为编程和现在所学的符号无法统一。所以选择一门学生有较好基础的语言配合讲解很必要。

而教师也可以将C编程过程中遇到的易错、难学的问题从编译的角度加以分析, 对学生分析和解决问题也会有所启发。而对编译原理的输入了解也能让学生在编程时更注意错误的避免以及优化编程, 强化了编程能力。

2) 抽象内容形象化。对那些学生难理解的抽象概念, 讲解时可举学生最熟悉的一些实例类比, 避免学生的死记硬背。例如, 编译过程包括的词法分析、语法分析、语义分析和中间代码生成、代码优化、目标代码生成五个阶段。记忆这个知识不难, 但是如何理解划分阶段的依据, 我们就可以举翻译英文句子的过程来类比。比如, 翻译“I am a student”成中文, 首先做词法分析, 按英语构词规则, 共四个英语单词, 同时检查单词拼写是否错误。然后根据英语的语法规则做语法分析, 对上一阶段形成的单词进行分析、识别, 检查语法正确性, 判断能否组成一个符合英语语法的句子。接着是语义分析, 分析句子含义, 并用汉语表示出来。最后修饰译文, 综合考虑汉语语法的相关规则和上下文的关系, 修饰初步翻译后的句子, 形成译文“我是一名学生”。

3) 融合原理与技术, 于各个章节均穿插“PL/0语言编译程序”模型的对应实现过程讲解, 学习技术之后学习实例, 学生更容易掌握知识, 也能初步建立属于自己的知识体系模型。

4) 将大问题缩小, 分解模拟编译技术的实现如词法分析、算符优先分析程序、制导翻译等过程。通过编写一些小的例程, 对程序算法进行详解和细节演示, 学生通过庖丁解牛式的吃透程序, 就能够好的掌握编译程序的设计, 从而自己写出编译程序。

5) 实施多媒体辅助教学形式, 使用课件、SNL、PCMCAI等编译实例等编译原理教学辅助软件, 将抽象问题形象化, 便于学生理解和运用知识点, 在课下也能利用这些课件自动生成各个分析程序, 加深基本原理和实现算法的理解。

建立本课程新的课程教学理念、课程价值、教学技术等尚需时日, 其过程需要不但需要教师付出大量劳动, 与时俱进的跟进新技术的发展, 不断探索和创新, 还需要好的教材、好的课程实验设计。

摘要:编译原理的理论难度和抽象性, 导致教师与学生的教学两难, 但编译原理作为计算机专业非常重要的一门专业基础课程, 掌握和学好编译程序的基本架构、设计原理和技术, 对计算机专业学生学习和掌握软件设计技术和实现技术, 又有着非常重要的意义。如何让学生产生对该门课程的学习兴趣, 消除学生的畏难情绪, 采用何种教学手段合理组织教学过程可以提高学生对知识的吸收度和应用能力, 是本文主要的探讨内容。

关键词:编译原理,教学

参考文献

[1]何炎祥、伍春香:《现代教学理论指导下的“编译原理”教学综合改革》, 《计算机教育》, 2005, (3) :10-13。

[2]陈意云、张昱、郑启龙:《“编译原理”的教学与实际相结合的探讨》, 《教育与现代化》, 2005, (12) :32-36。

[3]陈火旺:《程序设计语言编译原理》 (第2版) , 国防工业出版社。

编译原理教学方法论文 篇2

一、课程的性质、地位

本课程是计算机专业的重要专业课之一,是一门理论性和实践性较强的课程。主要介绍程序设计语言编译程序构造的基本原理和基本实现方法。本课程主要讲授形式语言、有限自动机、自上而下和自下而上的语法分析、LR分析方法、属性文法和语法制导翻译、语义分析的代码产生、存储器的动态分配与管理、符号表的组织与管理、优化问题、代码生成等内容。通过本课程学习,使学生对编译的基本概念、原理和方法有完整的和清楚的理解,并能正确地、熟练地运用。

二、课程的目的、任务和要求

该课程的目的是让学生掌握程序设计语言编译程序构造的一般原理、基本设计方法、主要实现技术和一些自动构造工具。通过本课程的学习,使学生较好地掌握编译原理的基本原理和基本技术、编译原理中涉及的基本算法、基本结构和主要实现技术,从而让学生了解将高级程序设计语言源程序翻译成计算机能处理的目标代码语言的整个过程,基本掌握计算机系统软件之一 编译程序的构造原理及相关技术,同时,还可提高学生计算机专业素质,培养学生的抽象思维能力。通过学习,学生可基本掌握计算机系统软件之一 编译程序的构造原理及相关技术,同时,还可提高学生计算机专业素质,培养学生的抽象思维能力。

三、与其它课程的关系

要求学生具有较好的计算机基础知识,对计算机的工作原理有一定了解,前导课程包括:高等数学、线性代数、计算机原理、离散数学、高级程序设计语言、数据结构等课程。

四、课程内容(建议理论课时:62 上机课时:18)第一章 编译程序概论

1、教学目的及要求:

本章介绍编译程序在计算机科学中的地位和作用,介绍编译技术的发展历史,讲解编译程序、解释程序的基本概念,概述编译过程,介绍编译程序的逻辑结构和编译程序的组织形式。要求理解编译程序、解释程序和遍的基本概念;掌握编译过程各阶段的任务和编译程序逻辑结构及其各部分的基本功能。

2、教学内容:

编译程序,编译过程概述,编译程序的结构,编译程序与程序设计环境,编译程序生成,学习构造编译程序。

3、教学重点:

重点:编译程序工作的基本过程及其各阶段的基本任务,编译程序总框。

4、教学难点:

编译的遍。

5、教学时间分配及进度安排:

建议本章教学时数2学时。

6、章节内容

1、什么是编译程序

2、编译过程概述

3、编译程序的结构

4、编译技术和软件工具 第二章 文法和语言

1、教学目的及要求:

本章是编译原理课程的理论基础,要求理解文法、语言、规范推导、规范归约和短语、简单短语、句炳的基本概念;掌握语言的求解方法、文法的二义性与递归性的判断方法及句型的分析方法。

2、教学内容:

形式语言的基本概念,包括符号串的基本概念和术语、文法和语言的形式定义、句型分析、文法和语言的Chomsky分类,二义性。

3、教学重点:

上下文无关文法,语言定义。

4、教学难点:

推导,文法与语言的相互转换。

5、教学时间分配及进度安排:

建议本章教学时数5学时。

6、章节内容

1、文法的直观概念

2、符号和符号串

3、文法和语言的形式定义

4、文法的类型

5、语法树和二义性

6、句型的分析

7、文法中的实用限制 第三章 词法分析

1、教学目的及要求:

本章介绍编译程序的第一个阶段词法分析的设计原理和设计方法,要求掌握正则文法、状态转换图、DFA、NFA、正规式和正规集的基本概念和词法分析设计与编写。

2、教学内容:

词法分析的设计原理和设计方法,源程序输入与词法分析程序输出、正则文法及其状态转换图、确定的有限自动机(DFA)不确定的有限自动机(NFA)正则表达式与正规集。

3、教学重点:

重点:词法分析器的任务与设计,状态转换图。

4、教学难点:

正则文法、正规集、DFA、NFA的相互转化。

5、教学时间分配及进度安排:

建议本章教学时数8学时。

6、章节内容

1、词法分析程序的设计

2、单词的描述工具

3、有穷自动机

4、正规式和有穷自动机的等价性

5、正规文法和有穷自动机间的转换 第四章 语法分析—自上而下分析

1、教学目的及要求:

本章介绍编译程序的第二个阶段语法分析的设计方法和实现原理,包括自上而下分析的无回朔的递归下降分析、LL(1)分析法。要求理解递归下降分析、LL(1)文法的基本概念;掌握无回朔的递归下降分析的设计和实现、LL(1)分析表的构造与分析方法。

2、教学内容:

语法分析器的功能,自上而下语法分析(递归下降分析法,预测分析程序),LL(1)分析法,递归下降分析程序构造,预测分析程序。

3、教学重点:

递归下降子程序,预测分析表构造,LL(1)文法。

4、教学难点:

LL(1)文法预测分析表构造。

5、教学时间分配及进度安排:

建议本章教学时数5学时。

6、章节内容

1、确定的自顶向下分析思想

2、LL(1)文法的判别

3、某些非LL(1)文法到LL(1)文法的等价变换

4、不确定的自顶向下分析思想

5、确定的自顶向下分析方法 第五章 语法分析—自下而上分析

1、教学目的及要求:

要求理解算符优先文法、最左素短语、有效项目的基本概念;掌握算符优先分析方法、LR(0)文法的判断及LR(0)分析表的构造与分析方法、SLR(1)文法的判断与SLR(1)分析方法和LR(1)文法的判断与LR(1)分析方法。

2、教学内容:

自下而上语法分析(算符优先分析法),算符优先分析,LR分析器,LR(0)项目集族和LR(0)分析表的构造,SLR分析表的构造,规范LR分析表的构造。

3、教学重点:

归约,算符优先表构造,LR分析法。

4、教学难点:

归约,LR分析法。

5、教学时间分配及进度安排:

建议本章教学时数12学时。

6、章节内容

1、自底向上分析思想

2、算符优先分析法

3、LR分析法 第六章 属性文法和语法制导翻译

1、教学目的及要求:

本章介绍编译程序的第三个阶段语义分析及中间代码生成的设计原理和实现方法,要求理解语法制导翻译、语义动作的基本概念;掌握算数表达式和赋值语句到中间代码的翻译、布尔表达式和几种控制语句的目标代码结构分析和到四元式的语法制导翻译;说明语句的语法制导翻译。

2、教学内容:

语法制导翻译的基本概念、中间代码的形式,可执行语句和说明语句的语法制导翻译方法。

3、教学重点:

语法制导翻译基本思想,语法制导翻译概述,基于属性文法的处理方法,自下而上分析制导翻译概述。

4、教学难点:

属性文法的处理方法

5、教学时间分配及进度安排:

建议本章教学时数9学时。

6、章节内容

1、属性文法

2、语法制导翻译概论

3、中间代码的形式

4、简单赋值语句的翻译

5、布尔表达式的翻译

6、控制语句的翻译 第七章 符号表

1、教学目的及要求:

本章介绍编译程序的组成部分之一符号表的管理,要求掌握符号表管理的基本方法。

2、教学内容:

符号表的作用、建立、符号表栏目的组织、符号表上的操作。

3、教学重点:

符号表的作用与内容。

4、教学难点:

符号表的内容。

5、教学时间分配及进度安排:

建议本章教学时数3学时。

6、章节内容

1、符号表的作用和地位

2、符号表的主要属性及作用

3、符号表的组织

4、符号表的管理 第八章 运行时存储空间组织

1、教学目的及要求:

本章介绍目标程序运行时的存储组织方式,包括静态存储分配和动态存储分配。要求掌握各种存储组织形式的基本方法。

2、教学内容:

目标程序运行时的活动,运行时存储器的划分,静态存储管理,简单的栈式存储分配的实现,嵌套过程语言的栈式实现,堆式动态存储分配。

3、教学重点:

静态分配策略和动态分配策略基本思想,嵌套过程语言栈式分配,活动记录、运行时栈的组织。

4、教学难点:

嵌套过程语言栈式分配,活动记录、运行时栈的组织。

5、教学时间分配及进度安排:

建议本章教学时数9学时。

6、章节内容

1、数据空间的三种不同使用方法

2、栈式存储分配的实现

3、参数传递

第九章 代码优化

1、教学目的及要求:

本章介绍优化的相关知识,要求掌握局部优化,基本块的DAG表示及其应用,控制流分析和循环查找算法,到达定值与引用定值链,循环优化。

2、教学内容:

主要内容:优化概述,局部优化,基本块的DAG表示及其应用,控制流分析和循环查找算法,到达定值与引用定值链,循环优化。

3、教学重点:

局部优化;DAG的构造与应用。

4、教学难点:

循环查找。

5、教学时间分配及进度安排:

建议本章教学时数6学时。

6、章节内容

1、优化技术简介

2、局部优化

3、控制流分析和循环优化 第十章 代码生成

1、教学目的及要求: 本章介绍编译程序的第五阶段目标代码的生成的设计原理和实现方法,要求掌握四元式到汇编语言的目标代码生成方法。

2、教学内容:

目标机器模型,一个简单代码生成器,寄存器分配,DAG目标代码,窥孔优化。

3、教学重点:

简单代码生成器,寄存器分配策略。

4、教学难点:

寄存器分配策略。

5、教学时间分配及进度安排:

建议本章教学时数3学时。

6、章节内容

1、代码生成概述

2、一个计算机模型

3、一个简单的代码生成器

4、代码生成研究现状

注:使用教材-编译原理(第二版).张素琴,吕映芝,蒋维杜,戴桂兰编著,清华大学出版社,2005.2。参考书:

编译原理课程教学探讨 篇3

编译原理是高等院校计算机专业继“数据结构”、“计算机原理”等专业基础课之后的又一门重要的专业基础课, 以形式语言与自动机理论为基础, 讨论编译程序构造的基本原理[1]、基本设计方法和主要实现技术。通过本课程的学习, 能深化学生对计算机信息处理本质与计算机工作过程的认识, 加深对程序设计语言的理解, 为后继专业课程的学习奠定坚实的理论基础, 并将编译程序构造的基本原理和技术应用于一般软件的设计。因此, 努力提高这门课的教学效果, 使学生真正掌握这门课的精髓, 并应用到实践中去, 具有非常重要的现实意义。

1 编译原理课程现状与问题

编译原理课程由于理论性强, 具有严密的逻辑性, 应用其他课程的知识较多, 学生在学习过程中感到内容抽象、算法复杂、难于理解, 学习起来有一定的难度, 因此, 编译原理被普遍看做是计算机专业本科教学中最难讲解、最难学习的课程之一, 在教学上不同程度的存在以下几个问题。

1.1 理论知识抽象难懂, 学生有畏惧心理

这门课程主要讨论编译的基本理论和编译器构造的基本方法, 涉及的理论知识抽象、难懂, 如形式语言与自动机理论、语法制导翻译以及各种算法, 又综合运用到前面所学的相关课程的知识, 确实具有相当的难度, 使得学生产生了畏惧心理。此外, 不少学生认为学习这门课将来只能用于编译器的设计上, 而大多同学将来都不太可能去从事编译器的设计工作, 因此普遍认为这门课没有用, 学习热情不高。

1.2 理论课教学方式陈旧单一

目前, 编译原理的理论课大多以老师讲解为主, 很少辅之以其他形象生动的教学手段, 教学内容又大多是抽象的概念和复杂的算法, 老师和学生之间的互动很难形成, 学生觉得枯燥乏味, 慢慢就失去了学习的兴趣, 难以达到良好的教学效果[2]。

1.3 实验内容脱离实际, 不够合理

这门课程的实践环节大多要求实现一个小型语言的编译程序, 而实现一个编译程序不仅要有相关的理论知识, 更需要丰富的实践经验, 熟悉硬件系统和操作系统的功能, 对于大多数同学来说, 编程能力都相对欠缺, 实现编译程序基本是不可能完成的任务。因此, 大多同学在实验时碰到的困难太多, 无从下手, 干脆放弃努力, 也就失去了实验的意义。

2 教学探讨

2.1 帮助学生克服畏惧心理, 培养学习兴趣

根据这门课程抽象难懂的特点, 首先要帮助学生克服畏惧心理, 才能发挥他们的学习主动性。这门课的先行课程如“数据结构”、“离散数学”、“高级程序设计语言”等都是学生已经学习过的课程, 学生实际已经具有相应的能力, 老师需要的是帮助学生分析他们已经掌握的知识, 让学生对自己有足够的了解, 明白以他们已掌握的知识为基础, 有足够的能力学习掌握编译原理这门课程, 在学习之前首先消除畏惧心理。

编译程序涉及的算法、思想和实现技术除了设计编译器以外也可广泛应用于一般软件的设计实现[3], 如文本编辑器、信息检索系统、模式识别器等, 对提高学生程序设计能力和开发大型软件的能力是十分有益的。教师可以鼓励学生尝试将编译程序中的各种算法和技术应用到各个领域, 以培养学习兴趣, 激发学生的创造性思维, 培养学生的创新能力。

2.2 采用案例式教学, 把抽象问题具体化

编译原理中涉及的大量概念和算法都过于抽象, 学生理解起来非常困难, 要想获得良好的教学效果, 必须借助实例, 使抽象问题具体化。例如, 词法分析部分主要阐述词法分析器的工作原理和构造方法, 相关概念和算法较多, 可以通过一个具体的程序范例进行教学。通过编写一个读单词过程, 从输入的源程序中, 识别出各个具有独立意义的单词, 即基本保留字、标识符、常数、运算符、分隔符五大类, 并依次输出各个单词的内部编码及单词符号自身值。在课堂上通过程序的运行来展示词法分析器的工作过程。通过实例教学, 学生既加深了对理论知识的理解, 也提高了学习的积极性。

2.3 注重启发式教学, 培养学生独立思维能力

传统的教学注重教师的讲解, 学生被动的接受知识, 不利于学生思维能力的培养[4]。我们在教学中, 特别注重启发式教学, 引导学生去思考探讨。启发式教学需要教师有目的的设计问题, 有意义的提出问题, 通过问题把知识点引导出来, 学生通过思考回答问题, 寻找解决问题的途径和方法, 加深对知识点的理解。例如, LR分析法是语法分析中较难的部分, 其中包含了四种不同的分析表构造方法, 学生不好理解。在讲解时先给出LR (0) 分析表的构造方法, 引导学生发现其中的不足并进行改进, 从而引出SLR分析法, 再进一步引导学生发现SLR方法的不足, 引出LR (1) 分析法, 同样的方法引出LALR分析法。通过这样的启发式教学, 不仅破解了教学难点, 也引发了学生探究的兴趣。

通过启发式教学, 培养了学生独立思考问题、发现问题、解决问题的习惯和自主能力。学生也在这个过程中通过自己的学习活动获取知识, 发展能力。

2.4 现代化教学手段和板书相结合, 提高学习效果

编译原理课程内容抽象, 知识点多, 要想取得良好的教学效果, 必须借助形象化的教学手段, 构建多媒体环境下的教学环境。利用多媒体设施、电子教案、教学网站等多种途径把知识化静为动, 寓教于乐。为此, 我们精心编制了多媒体课件, 用Flash技术制作了动画, 可以生动形象的演示抽象概念和复杂算法。这样不仅激发了学生的学习兴趣, 也加深了学生对理论知识的理解。但是采用多媒体教学也不能完全抛弃板书, 因为板书灵活, 可以随时补充。所以在教学中应做到多媒体教学和传统的板书教学相结合。

2.5 精心设计课程实验, 加强学生实际应用能力

编译原理是一个理论和实践并重的课程, 但是如何组织实验内容始终是教学中的一个难题[5]。目前普遍的做法是实现一个小型语言的编译程序, 而这并非一件容易的事情, 对于编程能力都还欠缺的学生来说, 实现完整的编译程序基本是不可能完成的任务。因此, 大多同学在实验时碰到的困难太多, 无从下手。对此, 我们的做法是提供给学生程序源代码但是空出关键模块, 学生只需完成关键模块的编写, 大大降低了实验的难度, 也使学生可以集中精力解决关键问题。在实践环节中, 根据学生的能力、性别, 采用互补的搭配方式把学生分为若干小组, 每组设小组长负责实验的学习讨论并对各成员进行分工。每一次实验结束后, 各个小组以小组长为代表汇报自己的作业, 由其他小组自由提问, 实现各个小组之间的交流, 分享各组的实践成果, 互相借鉴, 很好的激发了大家的学习兴趣。

3 结语

编译原理课程作为计算机专业的一门重要专业基础课, 对于提高学生的计算机专业素养具有重要的作用。本文分析了目前教学中存在的问题, 并从教学实践出发, 对如何调动学生积极性从而真正提高教学效果总结出了一些有效的教学方法, 在实际教学中也取得了良好的效果。由于课程的复杂性和抽象性, 还需要不断地探索更合理的教学方法, 提高教学质量。

参考文献

[1]朱文华, 王荣波.基于建构主义的编译原理实践教学研究[J].杭州电子科技大学学报:社科版, 2008 (4) :67—70.

[2]舒忠梅, 李文军, 周晓聪.编译原理教学改革实践初探[J].中山大学学报:自然科学版, 2007 (S2) :101-104.

[3]莫雷.教育心理学[M].广州:广东高等教育出版社, 2003.

[4]何炎祥.现代教学理论指导下的“编译原理”教学综合改革[J].计算机教育, 2005 (03) .

编译原理教学方法论文 篇4

开课单位:计算机科学与工程学院开课学期:第3学年春季学期

学分:1学分学时:16学时(1周)

适用专业:计算机科学与技术(0307)

一、课程设计的目的与意义

本课程设计是配合《编译原理》课程而开设的一门实践课程。针对编译过程的重点和难点内容进行编程,独立完成有一定工作量的程序设计任务,进一步培养学生编译器设计的思想,加深对编译原理和应用程序的理解,同时强调好的程序设计风格。

二、课程设计的内容

1、课程设计题目分成3类,设计题目如下

自动编译器设计题目:(1)中间代码生成器;(2)自动生成工具FLEX 和YACC。

面向对象的编译器模拟设计题目:(1)面向对象的词法编译器设计;(2)面向对象的中间代码编译器设计;(3)面向对象的目标代码编译器设计。

编译原理算法模拟设计题目:(1)限自动机的生成及化简过程模拟;(2)First集和Follow集生成算法模拟;(3)LL(1)分析过程模拟;(4)FirstVT集和LastVT集生成算法模拟;(5)算符优先分析表生成模拟;(6)算符优先分析过程模拟;(7)LR分析过程模拟。

2、学生从这3类题目中选择完成部分题目。

三、课程设计的方式

1、学生在实验室、计算机房、教室相对集中进行课程设计,教师指导,学生独立完成。

2、第一天由老师讲解,后面三天学生在教师的指导下独立工作,最后一天答辩,提交资料。

四、课程设计的基本要求

1、实训教学课堂化,严格考勤制度,在课程设计期间累计旷课达到一定学时,取消考核资格。

2、学生因特殊原因请假须履行手续,凡未请假或未获批准擅自离岗者,均按旷课处理。

3、课程设计需要提交如下资料:

(1)文档;(2)软件:需提供加注释的源程序,并能正常运行;(3)设计心得:记录程序设计的思路、实现程序的步骤、遇到的问题及其解决方法等内容。对于分析设计中未能实现的部分需要加以说明。对于软件中所参考的部分模块或代码需要加以声明,并说明出处。

五、课程设计成绩的评定

1、按优、良、中、及格、不及格五个等级评定成绩。

2、成绩评定依据

(1)编译器思想的正确性,包括是否采用了合适的数据存储结构等20%。

(2)程序实现的正确性,包括程序整体结构是否合理、编程风格是否规范等20%。

(3)程序功能的完善程度,包括功能的基本实现、基本完善、完全实现20%。

(4)学生的工作态度、独立工作能力20%。

《编译原理》教学改革初探 篇5

《编译原理》课程是计算机专业人员必修的一门主干课程, 虽然只有少数人从事编译方面的工作,但这门课程在理论、技术、方法上都对学生提供了系统而有效的训练,通过本课程的学习可以培养并提高学生的抽象思维、逻辑思维和编程能力。

《编译原理》一直是高年级专业课程中最难学习的课程之一。原因有四,第一:在学习本课程前,学生对它知之甚少,先入为主的认为该课程就是了解编译程序的构造,没有什么实际应用价值,学习没有积极性;第二:本课程具有一定的理论深度和难度,较一般课程学习过程的难度要大;第三:《编译原理》课程各章节间内容有密切的连贯性,学生在学习过程中,需要有较强的概括能力和逻辑能力,几个知识点掌握欠缺,可能会导致整章理解模糊,产生畏难心理;第四:实验题目较难,需要足够的理论基础和较强的编程能力为前提。因此,如何提升学习积极性、如何深入浅出讲授理论内容、如何合理安排实验过程显得尤为重要。本文就《编译原理》课程的授课方法和实验过程组织等问题进行探讨,以期改观本课程的教学效果,达到提高教学质量的目的。

1、课堂教学改革

1.1 兴趣教学

兴趣是人们力求认识某种事物或爱好某种活动的心理倾向,是推动学生学习活动的内在动力。要想让学生学得好,需不断的激发他们学习的兴趣,从而变被动学习为主动学习[1]。

1.1.1 兴趣入门,引发学习动力

兴趣的激发,应从入门开始。上课伊始,首先介绍《编译原理》课程的教学目标,并由此点出,整门课程讲解的就是一个编译程序的构造,可见该程序的庞大、复杂,提出在构造编译程序过程中用到了许多经典的技术和算法,利用学生猎新喜奇的心理,诱导学生学习的好奇心。其次,简单列举并演示编译技术在文本编辑器、网络协议、搜索引擎等方面的应用,激发兴趣的同时,消除学生对本课程无实际应用价值的理解误区。最后,指出包括《编译原理》课程在内,《软件工程》、《网络》等都是计算机专业独有的课程,在许多人把计算机只当作简单的应用工具,在许多非计算机专业也学习计算机课程的今天,进一步引导学生笃定学习目标为成为计算机专业人才。

1.1.2 兴趣教学贯穿整个教学过程

《编译原理》传统教学方式是以课堂教授为主的"灌输式"教学,而长时间以一种方法单调的进行教学,难免导致学生学习疲劳,因此需要根据具体教学内容,适当使用类比式、启发式、实例式等形式多样的的教学方法,来提升学习兴趣。

例如,从实现思想上来说,编译过程类似于英译汉,因此,可用类比式教育法由英译汉过程引入编译过程。大概如下,在对句子英译汉时,首先要识别出一个个单词(类似词法分析阶段),然后分析句子的语法结构是否合理(类似语法分析阶段),之后对英语句子进行初步的翻译(类似语义分析及中间代码生成阶段),接着对翻译进行润色(类似优化阶段),最后得到译文(目标代码生成阶段)。用这样的方法概述编译各阶段任务,学生更易理解。

又如,《编译原理》中算法非常多,对于一些雷同的算法,可采用启发式教育,教师提出问题,组织学生进行讨论并回答问题,教师做适当补充。例如在讲授算法优先分析方法的优先分析表构造时,需要求出所有非终结符的FIRSTVT集和LASTVT集,FIRSTVT集和LASTVT集的定义、求法是类似的,因此,教师可首先讲解FIRSTVT集的定义、求法及用其构造优先表的方法,然后使用启发式方法,让学生通过讨论,来写出LASTVT集的定义、求法及构造优先表的方法,教师做适当的纠正和补充。这样,学生对算符优先表的构造一定理解深刻。

又例,《编译原理》中多个理论可通过实例引入,采用实例法,激发学生的好奇心和求知欲。比如,对于算法优先分析法,可先通过如下文法G[E]及句子i1+i2*i3的归约,引入该法。

对句子i+i*i使用G[E]文法进行归约有两种方法,一种是:

i1+i2*i3归约为E+i2*i3归约为E+E*i3归约为E*i3归约为E*E归约为E。

另一种是:

i1+i2*i3归约为E+i2*i3归约为E+E*i3归约为E+E*E归约为E+E归约为E。

但显然第二种方法更符合我们的数学思维,因为从小学开始,我们就认为乘的优先级是高于加的。这就给出一种思路,能否设定运算符*的优先级高于+号,让i1+i2*i3归约的过程唯一,由此引入了算法优先分析法。

1.2 加深理论内涵的讲解

《编译原理》课程中包括有许多迷人的理论、精妙的算法,只有真正深刻理解到理论和算法的精髓,在日后才能将这些理论和算法应用于实际的问题解决中。对于课程中的非确定有限自动机的确定化、最小化、预测分析法、算符优先分析法、LR分析法等多个内容,笔者奉行理论-实例应用-理论-算法的讲解思路。即先了解理论的字面意思,然后通过实例非严格的对这些理论进行"证明",了解这些理论的使用,之后回到理论,通过基础知识点的逻辑推理,加深对这些理论的理解,最后由理论编写算法,解决问题。比如,讲授预测分析法的总控程序时,可首先描述三种可能动作的字面含义。然后,举例用这三种动作识别句子,熟悉三种动作的使用,了解总控过程。之后,从LL (1) 分析法思想及预测分析表的构造过程推导并深刻理解总控程序三个动作的内在含义,进一步了解预测分析法是LL (1) 分析法的一种具体。最后,依据三个动作及举例分析句子的过程,描述总控程序算法。

1.3 反复分析并强调知识点间逻辑关系

根据作者的经验和所作的调查显示,许多学生学习完《编译原理》后,并没有从宏观上掌握了编译程序构造的原理和基本设计方法,只是记住了各种算法的步骤,学会了做题,能基本应付考试。这就要求在授课过程中,要特别注意引导学生重视对编译的原理和技术的全面把握。具体在实施的时候,建议根据授课内容,由浅入深,从整体到局部,反复强调章和章之间、节和节之间逻辑关系,让学生在学习过程中,对每个知识点的意义和构造编译程序时其所处的位置有精准的把握。

比如,在讲授词法分析这章内容初始,可先行描述本章内容的组织。章节结构用图的形式来描述更加清楚,例词法分析这章内容可如图1.1所示。即本章第一个内容是了解词法分析的二元式输出形式。要通过词法分析程序获取二元式,需提前对源程序过滤无用的符号,因此,第二个内容是如何对源程序进行预处理。第三个内容为词法分析器的设计,从源程序获取二元式。讲授到词法分析器的设计时,又可通过图1.2来描述所用知识点及他们之间的关系。即首先通过正规式或正规文法描述出单词的词法规则,然后将正规式或正规文法等价转化为有穷自动机,对有穷自动机进行确定化和最小化,最后根据最小化的确定自动机编写词法分析器。学生了解了设计的总体思路后,在讲授到具体某个知识点还需要重复它在本图中的位置,及意义,如对确定有穷自动机的最小化,其目的为使有穷自动机的状态转换图达到最简形式,以便简化词法分析器的构造。经过验证,这样的叙述方式将词法分析器的实现思路,各知识点的逻辑关系阐述的更加清楚,加强了学生的整体把握。

2、实验教学改革

要很好地理解和掌握《编译原理》这门课,除了重视课堂教学的方法之外,还应该重视课程实验。设计一组与理论内容相适宜的课程实验,是整体上提高《编译原理》课程教学质量的重要保证。在实验内容组织上,我们在教学上采取如下策略:

2.1 针对知识点,增加小实验

传统实验课要求每个学生在规定学时内编写出词法分析器、语法分析器、语义分析及中间代码生成器。由于实验时间短,加之课堂教学刚刚结束,理论知识还没有完全消化,并且该课程实验的编程思路和以往一些编程实验的设计思想有很多的不同之处,所以,对于大多数学生来说,完成本实验困难较大,导致部分学生甚至不亲自编程,而是抄袭其他同学的实验报告应付了事,影响了实验教学的效果。因此,建议在各章授课结束后,先布置一些简单实验题目,加深学生对理论内容的理解,同时为最终完成各主要实验题目做好准备。可从两方面来考虑这些题目的选取。一方面,这些题目要与编译器的构造过程相关;另一方面,它们能够体现编译技术的应用。比如,词法分析章节结束后,可布置"一个人带着狼、羊、白菜过河"的题目。又如,在算符优先分析法章节后,可布置"简单计算器的设计与实现"题目。

2.2 简化基础语言文法,以理解编译理论和算法为目标。

实验的目的是加强对编译理论的理解和算法的应用,提高编程能力。若把构造编译器的源语言文法设计的非常复杂,学生则不得不将大量时间花费在用同样方法重复处理文法上,导致学生产生厌烦和畏难情绪,且对理解编译理论和算法没有大的益处。因此,可将源语言文法进行简化,这种做法看似降低了编译器构造的复杂性,为学生编程降低了难度,实则促进了学生对整个编译理论和技术的宏观掌握。

2.3 加强实验过程的组织与管理。

《编译原理》的语法分析、语义分析等实验比较庞大,务必要做完善的准备工作。教师最好提前一周布置实验,让学生有足够的时间准备。其次,在课堂上简要概括所需的理论知识、明确实验目的、实验内容、重点和难点,提醒学生使用软件工程的思想,来完成实验。并且,为防局限学生思路及抄袭现象,可改变传统的实验报告模式,教师不再硬性规定报告的格式和内容,而是要求学生将实验报告以科研论文的形式提交,让学生可完整叙述自己独到的思路和见解[2]。

2.4 根据实验实际情况,因材施教。

针对不同层次的学生,教师可在适当时候提供部分参考程序,让学生来完善。

3、总结

根据多年的教学经验,本文提出了几种课堂教学和实验教学的改进方法,事实证明切实可行。随着面向对象语言应用的日益广泛,学生素质的逐年提高,提升教师本身素质,根据需要增删教学内容,都是我们刻不容缓必须马上面对的问题。在解决这些问题的同时,我们应在该课程现有教学方法的基础上,合理运用各种教学辅助工具,对新的更合理的教学方法进行长期的不断的探索。

摘要:《编译原理》是计算机专业的一门主要的专业课程, 在计算机科学中有着重要的地位和作用。本文针对该课程的特点, 提出了几种改进课堂和实验教学的有效建议, 事实证明切实可行。

关键词:编译原理,教学改革

参考文献

[1]刘艳.计算机兴趣教学定位.黑龙江科技信息, 2008, 10:128

《编译原理》课程教学方法的探讨 篇6

编译原理包含着计算机学科的一些基本知识和典型技术与方法, 是计算机科学与技术专业的一门主干课程。计算机语言由单一的机器语言发展到今天的数千种高级语言, 是因为有了编译技术, 编译原理技术是计算机科学中发展的最迅速、最成熟的一个分支。《编译原理》不仅介绍程序设计语言实现的技术, 而且介绍程序构建的一些相关理论知识, 如形式语言、自动机理论、语法制导及代码优化等理论, 理论性比较强难理解, 学生在学习的过程中困难重重, 如何让学生学好这门课是课程教学中面临的一个主要任务。

在教学过程中, 出现学生理解困难和学习效果不好主要有以下几点原因:

1.1 编译程序规模大

编译原理是一个极其复杂的软件系统, 程序规模比较大, 因此导致了在一节课的时间内, 课程内容讲不完, 只好将编译原理课程的内容分解开来一部分一部分地讲解, 这样容易造成知识体系不连贯。结果学生不可能在短时间内对编译系统整个内容融会贯通, 理清章节之间的逻辑顺序。学生在学习过程中应该注重前后联系, 切忌用静止的、孤立的观点看问题。

1.2 理论知识抽象

构造一个完整的编译系统不是一件简单的事情, 它不仅需要完备的软件知识, 并且要求会使用现有的软件工具, 此外, 更主要的是要有丰富的实践经验, 了解硬件系统和操作系统的功能。这对于刚学完基础课程的学生来说, 难度系数特别大。

1.3 算法的理解和实现

编译原理这门课包含许多理论知识和算法, 学生对这些理论知识的学习和理解都存在着一定的难度。其中理论知识包括:词法分析器的构造, 语法中各种分析器 (LR, LL, SLR, LALR等) 实现与完成。

2 研究型教学和实践教学相结合培养应用型人才

2.1 研究型教学

推行研究型教学, 强调知识是载体, 通过知识的传授向学生传授基本方法, 培养学生的学科能力, 为此, 课堂讲授要深挖知识背后的内容, 引导学生思考问题, 体验思维和问题求解的乐趣。通过深层问题、扩展问题的提出和辅助材料的提示, 鼓励和引导学生开阔视野, 主动探索, 培养他们的学习兴趣、创新意识和创新能力。

2.2 实践教学

配合课程讲授的进展, 循序渐进地引导学生在实践中开展研究, 提高其学习兴趣, 这种做法特别是对学生系统能力的提高效果显著。让学生实现一个受限语言的生成中间代码的基本编译器。一方面, 采用功能递增的方式, 对实验进行引导性划分, 使得学生在学了词法分析的内容时, 就可以着手进行相关的设计, 随着教学的开展和教学内容的深化, 组织系列化的上机实验, 使学生逐步完成各个子系统的设计与实现。一般在语义分析将要讲完时开始实验学时, 此时学生基本上完成了相应的设计, 经过统一考虑, 进行编程实现。也可以提前实现, 因为每个子实验的完成必须利用前一个实验的结果, 而在第一章就讲授了编译系统总体结构, 所以各个子实验的设计并不是孤立的, 这样, 就实现了引导学生在编译系统总体结构的指导下逐渐地完成整个系统的构建。无论采用哪种方式, 在最后一个实验完成后, 学生已经开发出一个功能基本完备的简易编译程序, 从而在有限的上机时间内完成了实践。值得注意的是, 由于课内的实验学时有限, 要分词法分析、语法分析、中间代码生成三阶段给学生布置实验的内容, 引导他们在课外做好设计, 可以组成一些兴趣小组, 起到示范带头作用。

3 研究型教学和实践教学相结合与传统教学的比较

通过培养应用型人才教学的实践可知, 研究型和实践教学相结合模式是在理论教学的基础上, 培养学生分析问题和解决问题的能力, 加强训练学生专业实践能力而进行的教学编译原理的两种模式主要存在以下几方面的差别:

3.1 被动性学习与主动性学习的差别

编译原理是一门理论性极强的学科, 但是传统的教学过程中往往忽略了实践的重要性, 实践性教学要解决的正是实践中实际解决问题的能力。由于这种实践使学生当主角、由学生通过实际动手操作、解决实际碰到的问题, 可以使学生获得在课堂学习难以学到的能力。

3.2 理论教学和实践教学的分析

编译原理的理论教学主要是在课堂上通过老师的讲授完成的, 学生对一些难以理解的伦理知识根本弄不明白, 以致学习效果不好。而编译原理的实践教学过程不仅调动了学生对本课程的兴趣, 而且巩固了理论知识、积累了应用经验, 为以后在计算机领域发展打下了坚实的基础。

结束语

编译原理是计算机专业的必备基础知识, 对培养计算机专业的应用型人才有着重要的作用, 探讨该课程的教学方法, 提高教学质量是从事计算机教育工作者必须重视的问题。

摘要:编译原理是计算机科学与技术专业中非常有用的核心课程之一, 但是其难度比较大。通过开展研究型教学和实践教学的探讨, 向学生们介绍典型的问题求解思想和方法, 可以提高学生对这门课的兴趣, 同时能为应用型复合型人才的培养打下了坚实的基础。

关键词:编译原理,研究型教学,实践教学,应用型人才

参考文献

[1]Alfred V.Aho.Ravi Sethi.Jeffrey D.Ullman.compilers:Principles, Techniques, andTools[M].PearsonEducation出版集团, 2002, 2.[1]Alfred V.Aho.Ravi Sethi.Jeffrey D.Ullman.compilers:Principles, Techniques, andTools[M].PearsonEducation出版集团, 2002, 2.

[2]程虎.一个自动编译系统ACS[J].软件学报, 1991, 2.[2]程虎.一个自动编译系统ACS[J].软件学报, 1991, 2.

[3]王一宾.基于面向对象的编译原理实验的研究[J].安庆师范学院学报 (自然科学版) , 2002, 4.[3]王一宾.基于面向对象的编译原理实验的研究[J].安庆师范学院学报 (自然科学版) , 2002, 4.

[4]陈意云, 张昱, 郑启龙《.编译原理》的教学与实际相结合的探讨[J].教育与现代化, 2005, No.4:pp.32-36.[4]陈意云, 张昱, 郑启龙《.编译原理》的教学与实际相结合的探讨[J].教育与现代化, 2005, No.4:pp.32-36.

[5]Ras Bodik.Projects of CS164 Programming Languages andCompilers, University of California, Berkeley.Fall 2003.[5]Ras Bodik.Projects of CS164 Programming Languages andCompilers, University of California, Berkeley.Fall 2003.

《编译原理》课程教学改革探讨 篇7

编译原理课程主要介绍编译程序构造的一般原理、基本设计方法、主要实现技术和一些自动构造工具。虽然大多数的程序设计和开发人员不需要写自己的编译器, 也不一定非读懂任何编译器的代码, 但是编译程序构造的基本原理和技术广泛应用于一般软件的设计和实现。因此掌握好编译原理这门课程, 可以深层次地理解程序语言和内部机制, 对以后从事计算机项目开发, 很多思想可以借鉴, 受益匪浅。

2、编译原理课程的教学现状

我们是新建的本科院校, 学校坐落在民族地区, 学生在平时学习中与外界的实践接触较少。对计算机这类技术学科, 这些条件限制使得很多课程的教学偏重理论, 显得枯燥, 增加了难度。接触过编译原理课程的老师和学生大概都有相同的感受:这是一门“难教难学”的课程, 甚至认为这是计算机课程体系中难度系数最高的, 内容抽象、理论性强、对实践要求高。

2.1 学习兴趣和热情的严重缺乏

学生大多理解这门课程只是介绍编译程序的构造, 而自己以后很少会涉及从事编译器设计工作, 因而认为没有实际应用价值, 没有真正领会这门课程在整个计算机知识系统以及软件理论和开发方法上的潜在意义。实际上不管是国内还是国际知名高校, 从本科、硕士到博士都有关于编译原理课程的整体规划设置, 这足以说明该课程在计算机专业中的位置是不可忽略的。

没有清楚认识课程的学习意义, 不实用的思想导致了学习兴趣的大幅下降, 被动的学习加上课程本身的难度和深度使得学生的学习积极性降到了低点。较多的学生反映课堂上能听懂老师的例题讲解, 但是由于没有真正把知识点落实, 课后独立完成习题觉得很困难, 慢慢地产生畏难情绪, 如此的恶性循环滋生了对课程学习的强大障碍。

2.2 纯理论式的传统教学

在前些年编译原理课程的教学中, 理论教学比例过大甚至忽略了实践教学, 没有真正将实践和理论结合起来。在课堂上老师扮演着主要角色, 采用传统的教学模式, 以教师为中心、老师讲、学生听, 没有更好地调动学生的积极性, 因此教学效果也不是那么好。

2.3 课程实践的匮乏

编译原理的实践教学所占比例小, 教师和学生都忽视了实践教学在整个课程中的重要性, 脱离了实践的理论学习会显得更加枯燥和抽象。目前课程设置中增加了实践教学, 但是由于编译原理的实验题目偏难, 并且需要实践者有足够的理论基础和较强的编程能力做支撑, 所以大多数学生仍然觉得编译原理的实践是件棘手的事情。导致了学生对编译原理的理解往往停留在书本的理论概念上, 不明白怎样才能把理论应用到实际的编译程序设计中。

3、推进编译原理课程的教学改革

由于编译原理课程涉及的理论知识多, 可研究性强, 应根据学生的实际情况选择合适的教材、运用适当的教学模式来组织教学内容、理论实践相结合, 以更好地提高教学效果, 满足不同层次学生的需求。

3.1 教材的改进与选择

现在程序设计语言已经从过程式转向对象式, C++、C#、Java等就是目前在软件设计中流行的面向对象编程语言, 程序设计模型的变迁带来了算法描述工具的变化。在计算机应用领域几乎都使用面向对象语言, 各种电子产品的嵌入式软件广泛用到面向对象技术。在这样的背景下程序设计的一些后继课程诸如数据结构等也进行了同步的改进, 已出现了用Java或者C++描述的数据结构教材, 但是大多高校使用的编译原理教材还是没有大的变化, 教材中的编译算法和模型仍然用C语言甚至Pascal语言来描述。

这种主要关注面向过程的编译技术的教材, 会让学生觉得编译原理课程和当前的程序设计应用较为脱节。因此分析面向对象技术后台的编译系统非常有必要, 这样更贴近应用, 更利于培养学生的学习兴趣。可以选用对象式语言描述编译算法和教学模型的编译原理教材, 将面向对象的编译技术有机结合到教学中。例如目前国外以及国内某些高校选用Java语言描述的编译原理新教材, 其中像《现代编译程序实现———Java语言》 (影印版) 教材可视为典型。改进后的教材在词法分析和语法分析上变动较小, 主要增加了针对面向对象语言的语法结构及其语义特征, 着重从类及类的继承结构上讨论编译实现技术及构造面向对象编译器的思路;在语义分析、代码生成等内容上调整幅度较大, 面向对象的作用域特性、类的封装、继承以及多态的典型特征都将体现在教材中。

3.2 教学模式的转变

打破传统的以教师为中心、一味灌输式的教学方法, 采用更能激发学生兴趣和潜能的“以学生为主, 师生互动, 实例教学”的教学模式。在教学中, 教师扮演好传授、指导、组织和帮助的角色, 利用问题及情境充分发挥学生的主动性、积极性和创造性。

对某些章节教师首先提炼出核心问题, 让学生带着问题自主学习。之后由学生讲解, 展开课堂讨论, 最后教师再总结归纳。这样学生不再是只带耳朵来听课的机器, 更多的时候由他们来主导控制课堂, 由完全的被动转化为主动, 将会大大地提高教学效果。当然在这个过程中教师要有足够掌控课堂的能力, 给出恰当的涵盖相应知识面的问题, 能在适当的时候做引导者促进讨论的展开, 让大多数学生能在互动的氛围中积极掌握课程知识。

枯燥的理论转化为实例教学, 效果也是事半功倍。比如词法、语法分析中很多理论描述都比较抽象复杂, 此时教师先不分析理论, 而是借助实例的讲解, 案例完成后再总结归纳理论知识点。通过实例的引导, 既提高了教学效果又营造了轻松的课堂氛围, 师生互动得以良性地发展下去。下面通过一个具体的例子简单分析“实例教学———知识归纳———案例实践———总结”的教学模式。语法分析中有个重要的内容是项目集规范族C的构造, 这是自下而上语法分析中LR (0) 以及SLR (1) 分析表的关键, 但其构造算法描述很复杂, 我们从案例出发引导学生推导到算法规则。例:文法G为E→aA∣d, A→cA∣d, 要求给出该文法对应的项目集规范族C。教师通过讲解例子归纳出求解过程:首先引入新的开始符号S’拓广文法, 构成S’→S.作为唯一的接受态项目, 用closure ({S’→.S}得到初态项目集;计算go (I, x) 得到新状态J的项目集;重复前面两个步骤直到不出现新的项目集为止。在此基础上分析算法, 接着让学生自主完成练习领会算法思想, 这样比直接分析长篇幅的算法效果更加明显。

3.3 课程实验的深化

目前学校提倡“本科学历 (学位) +职业技能素养”的办学模式, 把实践教学提到了相当的高度。整个课程体系及人才培养方案都在强化实践, 同时编译原理课程属于技术学科, 必须注重理论与实践的有机结合, 强调课程实验的重要性, 强化对学生实践动手能力的培养。编译原理的实验难度大, 有的编译器实现程序代码多达十几万条指令, 因此我们一定要避免直接让学生分析和设计编译器, 要循序渐进, 按照高级程序语言的编译过程模块化地设计实验, 结合系统的编译原理实验教材逐步深入地进行课程实践, 真正把实践教学落到实处。

分层次制定课程的实践环节。最初借助面向对象编程语言的编译模型工具生成简单代码的词法分析和语法分析程序, 让学生理解代码的程序结构;在此基础上添加语义动作, 理解虚拟机生成代码;最后扩展教学模型, 分层次构造完整的编译程序。在综合实验部分, 教师可以设置好程序代码框架, 甚至提供源代码将关键模块挖空, 指导学生完成核心代码的编写与调试, 有方向性地指导学生完成课程设计, 以此让他们能投入更多的热情与精力去实际地开展有深度和广度的课程实践, 促进理论的进一步掌握。

4、结束语

编译原理在高校计算机专业课程体系中的地位是不可忽视的, 我们需要与时俱进, 适当调整课程教学的体系和内容, 以更好地顺应计算机技术的发展。怎样在有限的学时内让学生既能掌握扎实的理论, 又能切实提高实践的能力, 这是编译原理课程教学面临的难题。教师应通过优化教学改革、不断探讨, 采用多样的教学手段、灵活的教学方法, 不断地提高编译原理课程的教学质量。

摘要:以新建本科院校为背景, 从学生学习兴趣、教师教学、课程实践等几个方面分析了当前编译原理的教学现状, 提出了对教材、教学模式以及课程实验的基本改革思路, 用以提高编译原理教学效果。

关键词:编译原理,教学改革,面向对象,实例教学

参考文献

[1]何炎祥, 伍春香.计算机专业不需要开设编译原理课程吗[J].计算机教育, 2009年第4期

[2]Alfred V.Aho, Ravi Sethi.编译原理技术与工具 (英文版) [M].北京:人民邮电出版社, 2010

[3]胡学联.编译原理课程的调态与转型[J].计算机教育, 2006年11期

《编译原理》课程教学改革探讨 篇8

编译原理是计算机科学与技术专业中比较重要的专业课程, 特别是对于今后将从事计算机软件工程的技术人员来说, 编译原理技术是极为重要的基础知识之一。

编译原理课程主要介绍编译程序构造的一般原理、基本设计方法、主要实现技术和一些自动构造工具。编译器的构造综合了计算机科学的各个方面, 包括计算机理论、程序设计、软件工程、数据结构等, 是理论性强同时也是理论应用于实践的成功典范。虽然绝大多数的程序设计和开发人员不需要写自己的编译器, 也不一定非要读懂任何编译器的代码, 但是编译程序构造的基本原理和技术广泛应用于一般软件的设计和实现, 因此很好地掌握编译原理这门课程, 可以更加深层次地理解程序语言和内部机制, 对以后从事计算机项目开发, 很多思想可以借鉴, 受益匪浅。

2 编译原理课程的教学现状

我们是新建的本科院校, 并且学校坐落在民族地区, 学生在平时的学习中与外界的实践接触较少。对于计算机学科来说, 这使得很多课程的教学偏重理论, 显得枯燥, 增加了难度。特别对于编译原理这门课程, 接触过的老师和学生大概都有相同的感受:这是一门“难教难学”的课程, 甚至大多学生认为这是计算机高年级课程中难度系数最高的课程, 内容比较抽象、理论性很强、对实践要求高。

2.1 没有清楚认识课程的学习意义

在学习过程中, 学生大多理解这门课程只是介绍编译程序的构造, 而自己以后很少会涉及从事编译器设计工作, 因而认为没有实际应用价值, 没有真正领会这门课程在整个计算机知识系统以及理解软件理论和开发方法上的潜在意义。

不管是国内还是国际知名高校, 从本科、硕士到博士都有关于编译原理课程的整体规划设置, 这足以说明该课程在计算机专业中的位置是不可忽略的。

2.2 学习兴趣和热情的严重缺乏

学生理解的不实用思想导致了学习兴趣的大幅下降, 被动的学习加上课程本身的难度和深度使得学生的学习积极性降到了低点。较多的学生反映课堂上能听懂老师的例题讲解, 但是由于没有真正把知识点落实, 课后独立完成习题觉得很困难, 慢慢地产生畏难情绪, 如此的恶性循环滋生了对课程学习的强大障碍。

2.3 纯理论式的传统教学

在前些年编译原理课程的教学中, 理论教学比例过大甚至忽略了实践教学, 没有真正将实践和理论结合起来。在课堂上老师扮演着主要角色, 采用传统的教学模式, 以教师为中心、老师讲、学生听, 没有更好地调动学生的积极性, 因此教学效果也不是那么好。

2.4 课程实践的匮乏

编译原理的实践教学所占比例小, 教师和学生都忽视了实践教学在整个课程中的重要性, 脱离了实践的理论学习会显得更加枯燥和抽象。目前课程设置中增加了实践教学, 但是由于编译原理的实验题目偏难, 并且需要实践者有足够的理论基础和较强的编程能力做支撑, 所以大多数学生仍然觉得编译原理的实践是件棘手的事情。导致了学生对编译原理的理解往往停留在书本的理论概念上, 不明白怎样才能把理论应用到实际的编译程序设计中。

3 推进编译原理课程的教学改革

由于编译原理课程涉及的理论知识多, 可研究性强, 应根据学生的实际情况选择合适的教材、运用适当的教学模式来组织教学内容、理论实践相结合, 以更好地提高教学效果, 满足不同层次学生的需求。

3.1 教材的改进与选择

现在程序设计语言已经从过程式转向对象式语言, 比如C++、C#、Java等就是目前在软件设计中流行的面向对象的编程语言, 程序设计模型的变迁带来了算法描述工具的变化。面向对象语言已经成为高校计算机专业课程的主流语言, 社会上的计算机应用领域也大量使用面向对象语言手, 各种电子产品的嵌入式软件非常广泛用到面向对象技术。在这样的背景下一些程序设计的后继课程诸如数据结构等也进行了同步的改进, 已出现了用Java或者C++描述的数据结构教材, 但是大多高校使用的编译原理教材还是没有大的变化, 教材中的编译算法和模型仍然用C语言甚至Pascal语言来描述。

这种主要关注面向过程的编译技术的教材, 会让学生觉得编译原理课程和当前的程序设计应用较为脱节。因此对面向对象编译技术的研究迫在眉睫, 分析面向对象技术后台的编译系统是非常有必要的, 这样更贴近应用, 更利于培养学生的学习兴趣。由此, 我们可以选择用对象式语言描述编译算法和教学模型的编译原理教材, 将面向对象的编译技术有机结合到教学中。例如目前国外或者国内某些高校选择的用Java语言描述的编译原理新教材, 其中像高等教育出版社出版的《现代编译程序实现——Java语言》 (影印版) 教材可视为典型。改进后的教材在编译原理前面部分的词法分析和语法分析被人上变动很小, 主要增加了针对面向对象语言的语法结构及其语义特征, 着重从类及类的继承结构上, 讨论编译实现技术及构造面向对象编译器的思路;在后半部分的语义分析、代码生成等内容上调整幅度较大, 面向对象的作用域特性、类的封装、继承以及多态的典型特性都将体现在教材中。

3.2 教学模式的转变

打破传统的以教师为中心、一味灌输式的教学方法, 采用更能激发学生兴趣和潜能的“以学生为主, 师生互动, 实例教学”的教学模式。在教学中, 教师扮演好传授、指导、组织和帮助的角色, 利用问题及情境等充分发挥学生的主动性、积极性和创造性。

在这种教学模式下, 教师在课前要做更为充足的准备, 对整个课程体系要非常清楚。重要章节的知识点在课堂上结合实例做详细讲解, 而对于容易点的内容, 老师首先提炼出核心问题, 让学生带着问题自主学习。第一阶段结束后由学生讲解, 展开课堂讨论, 最后教师再总结归纳。这样学生不再是只带耳朵来听课的机器, 更多的时候由他们来主导控制课堂, 由完全的被动转化为主动, 将会大大地提高教学效果。当然在这个过程中教师要有足够掌控课堂的能力, 给出恰当的涵盖相应知识面的问题, 能在适当的时候做引导者促进讨论的展开, 让大多数学生能在这种互动的氛围中掌握课程的知识。

枯燥的理论转化为实例教学, 效果也是事半功倍。比如在编译原理的基础篇中, 关于词法分析、语法分析中很多理论描述都比较抽象复杂, 此时教师先不要死板地分析理论, 而是借助实例的讲解, 案例完成后再总结归纳理论知识点。这样通过实例引导学生对知识的掌握, 既提高了教学效果又营造了轻松愉快的课堂氛围, 师生互动得以更良性地发展下去。下面通过一个具体的例子简单分析“实例教学——知识归纳——案例实践——总结”的教学模式。语法分析中有个重要的内容是项目集规范族C的构造, 这是自下而上语法分析中LR (0) 以及SLR (1) 分析表的关键, 但是关于文法的项目集规范族的构造算法描述复杂, 我们从案例出发引导学生推导到算法规则。例如:文法G[S]为E→a A∣d, A→c A∣d, 要给出该文法对应的项目集规范族C。教师先讲解例子;再归纳出求解过程:首先拓广文法, 引入一个新的非终结符S’作拓广文法的开始符号, 构成项目S’→S作为唯一的接受态, 用closure ({S’→.S}得到初态的项目集;对初态集或其他构造的项目集求go (I, x) , 得到新状态J的项目集;重复前面两个步骤直到不出现新的项目集为止;接着分析算法;最后把布置练习题。让学生在老师分析的基础上自主完成练习, 领会算法的思想, 这样比直接分析长篇幅的算法效果更加明显。

3.3 课程实验的深化

目前学校提倡“本科学历 (学位) +职业技能素养”的办学模式, 把实践教学提到了相当的高度。整个课程体系及人才培养方案都在强化实践, 同时编译原理课程属于技术学科, 必须注重理论与实践的有机结合, 深化课程实验的重要性, 加强对学生实践动手能力的培养。众所周知, 编译原理的实验难度很大, 有的编译器实现程序代码多达十几万条指令构成。因此我们一定要避免直接让学生分析和设计编译器, 要循序渐进, 按照高级程序语言的编译过程模块化地设计实验, 同时结合系统的编译原理实验教材指导学生逐步深入地进行课程实践, 真正地把实践教学落到实处。

分层次制定课程的实践环节。最初可以借助面向对象编程语言的编译模型工具生成简单代码的词法分析和语法分析程序, 让学生理解代码的程序结构;在此基础上添加语义动作, 理解虚拟机生成代码;最后扩展教学模型, 分层次构造完整的编译程序。在综合实验部分, 教师可以设置好程序代码框架, 甚至提供源代码将关键模块挖空, 指导学生完成核心代码的编写与调试, 有方向性地指导学生完成课程设计, 以此让他们能投入更多的热情与精力去实际地开展有深度和广度的课程实践, 促进理论的进一步掌握。

4 结束语

总之, 编译原理在高校计算机专业课程体系中的地位是不可忽视的, 我们需要与时俱进, 适当调整课程教学的体系和内容, 以更好地顺应计算机技术的发展。怎样在有限的学时内让学生既能掌握扎实的理论, 又能切实提高实践的能力, 这是编译原理课程教学面临的难题。教师应通过优化教学改革、不断探讨, 采用多样的教学手段、灵活的教学方法, 不断地提高编译原理课程的教学质量。

摘要:以新建本科院校为背景, 从学生学习兴趣、教师教学、课程实践等几个方面分析了当前编译原理的教学现状, 提出了对教材、教学模式以及课程实验的基本改革思路, 用以提高编译原理教学效果。

关键词:编译原理,教学改革,面向对象,实例教学

参考文献

[1]何炎祥, 伍春香.计算机专业不需要开设编译原理课程吗[J].计算机教育, 2009, (4) .

[2]Alfred V.Aho, Ravi Sethi.编译原理技术与工具 (英文版) [M].北京:人民邮电出版社, 2010

[3]胡学联.编译原理课程的调态与转型[J].计算机教育, 2006, (11) .

编译原理教学方法论文 篇9

“编译原理”是计算机科学及相关专业的一门核心专业基础课程, 由于涉及形式语言、有穷自动机等抽象内容, 学生在学习过程中存在较大的困难, 被戏称为“天书”。该课程主要介绍了高级程序设计语言编译系统的构造原理、设计方法以及主要实现技术, 综合了离散数学、数据结构、算法设计与分析、形式语言与自动机、程序设计原理、程序设计语言等知识, 具有概念多、理论性强等特点。学生通过系统地学习这门课程, 不仅能够了解编译系统内部的工作原理, 加深对程序设计语言的真正理解, 而且还能有助于提高学生的计算机思维能力、实践动手能力和综合运用专业知识的能力。

一、编译原理课程教学存在的问题

长期以来, 由于编译原理课程具有较强的理论性和实践性, 学生在学习过程中感到很吃力。究其原因, 总结起来主要有以下两个方面的问题。

1. 课程本身理论性太强

该课程内容丰富、抽象, 且具有严密的逻辑性, 它除了具有自身的一套理论体系, 还涉及到大量的其他课程的理论知识, 如形式语言与自动机理论、离散数学、算法等。对于本科生而言, 要学好这些理论本身就有一定的难度。

2. 实践性环节比较薄弱

编译程序是大型复杂的软件系统, 其实现涉及到若干课程, 综合性、连贯性均很强, 学生实验难度很大, 因此, 很多教师对实验重视不够, 实验内容安排也比较随意, 导致实验效果较差, 影响学生动手能力的提高。

笔者长期承担“编译原理”课程的教学工作, 结合多年的编译原理教学实践, 针对以上问题, 从以下几个方面入手进行了教学改革和创新, 积累了一定的经验, 取得了良好的教学效果。

二、明确课程与计算机专业人才培养目标的关系

目前, 按照我国高校的教育现状, 其人才培养目标大致可以分为学术型人才培养和工程型人才培养。学术型人才在取得本科学位以后, 可能会继续学业到硕士或博士阶段, 将来的主要职业以从事学术研究为主;而工程型人才本科毕业后, 主要职业是在工业界发展, 从事与计算机有关的开发和应用方面的工作。工程型人才的社会需求量远大于学术型人才, 但是学术型人才培养对提高国家的学术竞争力至关重要。虽然本科培养方案中尚没有进行区分, 但未来走向决定了不同类型的人才在本科阶段的基础应有区别。因此, 编译原理课程定位有必要参照这两类人才培养要求来确定[1]。对于学术型人才的培养设计一个主要以强调理论性的课程内容, 而对于应用型人才的培养则侧重于编译器的设计和实现, 提高学习编程语言及在程序开发中应用编程语言的能力。培养目标的不同, 将直接影响到授课教师对课程内容进行的剪裁。

三、优化课程的理论教学环节, 提高教学质量

1. 精选教学内容

笔者认为, 教学内容和习题应包括一些从实际碰到的问题中抽象出来的例题和习题, 鼓励学生用所学的知识去分析和解决实际问题。紧紧围绕编译的具体过程这样一条主线, 建议的主要教学内容如下。

(1) 词法分析

首先应明确词法分析的任务, 然后重点讲解词法分析器的设计过程, 如预处理、单词符号的超前搜索、状态转换图以及状态转换图的实现;接着介绍正则表达式与自动机的相关理论, 最后讲解词法分析器自动生成器工具的原理及使用方法。

(2) 语法分析

首先应介绍语法分析的必备知识上下文无关文法, 然后将语法分析分成两个大类予以介绍:自上而下的语法分析和自下而上的语法分析。自上而下的语法分析包括LL (1) 文法和递归下降分析法, 由于它们比较直观, 便于学生接受, 应首先介绍。其次, 介绍自下而上的语法分析, 它主要包括算符优先分析法和LR分析法, 由于目前的编译器的语法分析已不再使用算符优先分析法, 因此, 可以只介绍LR分析法。最后, 介绍语法分析器自动生成器工具的原理及使用方法[2]。

(3) 语义分析及中间代码生成

首先介绍语义分析的基础知识:属性文法和语法制导翻译。然后把语义分析的重点放在类型检查上。类型系统在编程语言的设计中占据重要位置, 可以先介绍一下类型系统在编程语言中的作用, 然后用语义动作来表达类型检查算法。对于中间代码的生成, 则主要介绍各种形式的中间语言, 把赋值语句和各种控制流语句翻译成中间代码的语义动作。对于类型和变量声明语句, 则主要关注怎样按语言的作用域规则组织符号表[2]。

(4) 运行时存储空间的组织和管理

对于这部分内容, 应主要介绍局部存储分配策略 (即一个活动记录中各类数据的组织) , 静态分配、栈式分配和堆式分配等三种全局存储分配策略, 非局部名字的访问方式和各种参数传递方式的实现。

(5) 优化

优化可在编译的各个阶段进行, 但最主要的一类优化是在目标代码生成以前, 对语法分析后的中间代码进行的, 这类优化不依赖于具体计算机。这部分内容建议重点介绍基于块内的局部优化。

(6) 目标代码生成

编译模型的最后一个阶段是目标代码生成, 它通常以语义分析后或优化后的中间代码为输入, 以产生等价目标程序为输出。应重点介绍一种采用简单的寄存器分配策略的代码生成算法, 让学生对代码生成有所了解。

2. 改进教学模式

对于编译原理这种理论性和抽象性都很强的课程来讲, 采用一种恰当的教学模式显得尤为重要。由于案例式教学具有实践性和形象性的特点, 刚好弥补编译课程教学难的问题, 因此, 它可以充分调动学生兴趣, 使其在分析案例、得出结论的过程中掌握理论知识。在教学过程中, 案例的主要形式是例题, 一般是具有代表性的例题或综合习题, 约占2/3的课堂时间。在课堂教学中, 合理结合黑板、粉笔和先进的多媒体教学技术, 建议相关算法理论采用幻灯片形式, 加大知识点的容量;而相应实例的讲授则建议采用板书形式, 可适当降低教学速度, 使学生有充裕的时间思考和掌握。比如, 在讲解正则式转化成等价的NFA这部分内容时, 首先把具体转换的方法以幻灯片形式快速地播放给学生看, 同时配上教师的简单讲解, 然后选取一个具体的例子详细分析, 让学生理解例子, 最后教师对例子进行小结, 归纳出一般性规律, 并让学生与前面的理论对比, 这样回过头读这些理论知识便会轻松很多、容易很多, 从而更加有助于其巩固对理论的理解。又如, 在介绍自动机、正则文法、正则表达式之间的相互转换以后, 还可以通过一道综合例题将这些知识融会贯通, 这样教学效果会更好[3,4]。为了巩固教学效果, 每次课后教师都应该有针对性地布置作业, 学生自己变为实例教学模型的主体, 教师再就作业中出现的问题安排习题课, 这样教学效果会更佳。

四、强化课程的实践教学环节, 提高学生的动手能力

实践活动是创新意识的源泉, 是创新能力的基础, 学生只有不断的在实验环节中尝试、探索、研究和创新, 才能不断提高解决工程问题的能力。“编译原理”课程对实践性要求较高, 学生在实验中掌握一些重要算法, 将数据结构、高级语言等内容融会贯通, 最终提高知识的综合应用能力。

1. 设计实验内容

首先, 要将编译理论和方法在实验中得以概括, 使学生不仅掌握它们本身具体应用, 而且掌握由这些理论和方法所构造编译程序的各个部件是如何在整个系统中协调运行, 这是实验最重要目的之一。其次, 必须合理地简化, 使学生比较容易完成。针对编译过程的五个阶段:词法分析、语法分析、语义分析与中间代码生成、优化及目标代码生成, 分别设置相应的实验项目。这些实验项目既和理论课内容相辅相承, 同时相互之间又互相关联, 构成了一个实验整体。采用这种实验教学体系所要求的实验学时较少, 一般为20学时左右, 并且可以跟随理论教学的进度安排, 这样既可以降低实验难度, 又利于学生及时将课堂知识应用于实验[5]。当然, 也可直接将实验部分设置为课程设计, 通常是要求设计一个简单语言的编译程序, 让学生用1~2周的时间来完成。这种实验教学体系与前一种相比更难, 需要学生在对编译原理知识系统理解掌握的基础上才能完成, 更加有利于学生对编译过程的有一个整体深入的认识。

2. 规范考核形式

考核是对学生学习效果的检验, 也是调动学生学习积极性的指挥棒, 对教学目标的实现具有至关重要的作用。“编译原理”实验课程的一个难点在于如何进行成绩评定。为了均衡理论和实验, 建议实验成绩占总评成绩的30%~40%。本着公正的原则, 笔者提出阶段考核和汇总考核相结合的成绩评定方法[6]。每个实验成绩由教师面试给出, 以学生对实验理论内容的理解和实现算法的思路为主, 并要求其分析具体源代码, 从而判断学生真正掌握知识的程度, 避免抄袭。在汇总考核阶段, 由学生主动申请, 采取公开答辩的形式, 答辩优秀的可以加分。通过以上措施, 较好地避免了以往实验中经常出现的偷懒现象, 同时也帮助学生树立了荣誉感和成就感。

五、结语

编译原理是一门理论性和实践性都很强的课程, 在计算机专业的教学体系中又有着非常重要的作用, 决定了该课程教学改革的长期性。通过“编译原理”课程的学习, 学生不仅能掌握编译程序本身的实现技术, 也能加深对程序设计语言的理解, 提高开发大型软件的能力。因此, 探索该课程的教学方法, 提高教学质量是从事计算机教育的工作者必须重视和探讨的问题。

参考文献

[1]赵银亮.浅谈编译原理课程的定位.西安邮电学院学报, 2010.7

[2]张昱, 陈意云, 郭宇, 李兆鹏.“编译原理”课程的教学内容选择的探讨.计算机教育, 2009.18

[3]刘洁, 黄贤英, 王柯柯, 曹琼.软件工程专业中编译原理课程的教学探讨.计算机教育, 2010.8 (16)

[4]王顺晔.“编译原理”课程教学方法的研究与实践.计算机教育, 2010.2 (3)

[5]王忠策.“编译原理”课程教学改革与实践探索.科技创新导报, 2010 (34)

上一篇:帕萨特B5下一篇:科技计划评估