编译原理教学方法

2024-07-03

编译原理教学方法(精选十篇)

编译原理教学方法 篇1

《编译原理》课程是计算机专业的主干课程之一。本课程讲述高级程序设计语言的编译程序构造的基本原理和实现技术, 是计算机软件的核心技术之一。通过本课程的学习, 学生应掌握文法和形式语言基础知识, 具有分析和实现编译程序的初步能力, 加深对程序设计语言原理的理解, 并且提高中、大型程序的分析和开发能力。对于将来从事编译系统设计工作的学生来说, 编译原理课程将为其打下坚实的能力和知识基础;对于从事其它工作的学生, 也能够提高他们对计算机系统总体的认识。但由于该门课程内容抽象, 算法复杂难懂, 且传统的教学方法主要突出书本知识的传授, 枯燥无味, 晦涩难懂, 导致学生对该门课程的积极性和学习兴趣不高。针对这种情况, 本文对编译原理课程的教学方法进行一些初步的探讨。

1 理论教学

教师在讲授《编译原理》课程时, 首先应该让学生明白该门课程的教学目标:对课程整体应该有较为全面的认识和了解, 熟悉编程程序的构造过程和形式语言中的基本概念和理论;理解并能掌握编程程序过程中每个阶段出现的相应的重点算法, 并能对该重点算法能够简单编程实现;能够使用课本中出现的理论知识和算法解决常见离散事件问题。

1.1 分阶式理论教学

《编译原理》课程内容覆盖广泛, 涉及到很多相关学科的知识, 就目前教学的基本学时来说, 基本无法满足教材中所有内容的详细讲授, 故教师在课堂教学过程中, 采用分阶式教学方法, 把教材中得相关内容按基本内容和高级内容两个方面进行分类:对于基本内容必须要学生完成, 而对于高级内容可由部分能力较强的学生带帮其他学生协作完成。

以词法分析为例, 《编译原理》课程中的词法分析部分的知识点包括正规表达式、正规文法和有限自动机。有限自动机和正规表达式以及他们之间的相互转换是学生必须完成的基本内容, 而正规文法及其相关内容则属于高级内容, 可以作为提高内容留给学习能力强的学生, 然后由他们带帮其他学生协作完成, 在这过程中, 不但可以加深能力强学生对该内容的理解, 而且可以加深学生之间的友谊, 在他们讨论和带帮中也可以提高学生的学习积极性。

1.2 典型式理论教学

《编译原理》课程中一些内容较抽象, 算法多且杂, 为了让学生掌握该门课程中的重点知识和算法, 教师可以采用典型式教学方法。对每次学生做完布置的作业后, 教师可以从中提取一些典型的作业:作业中做错的内容, 该内容为什么错, 错在哪里, 怎么改正, 其中有没有可以提取的好的方面;作业中做对的内容, 该内容有没有值得学习的方面, 有没有需要进一步改进的方面。

1.3 讨论式理论教学

很多学生认为该门课程的理论只能用于编写一个编译器, 而他们可能以后不会从事编译器相关方面的研究, 所以认为该门课程对他们以后的学生生活没什么帮助, 故学习兴趣不高, 认为可学可不学。所以教师在讲授这门课程时不能采用以前那种满堂灌的教学方法, 否则使得学生更加厌学, 茫然。为了激发学生的积极性, 教师采用讨论式教学方法, 让学生参与到课堂中来, 积极与学生互动。在课堂上, 教师提出问题, 讲解基本理论与思想, 让学生积极参与课堂讨论与分析, 找到问题的解决方法以及可能存在的不足;教师也可以根据时下计算机方面的技术热点, 将其与《编译原理》课程相关的知识点先阐述自己的认识和观点, 然后让学生提出自己的观点, 这样不仅可以加深学生对所学知识的掌握程度, 而且可以让他们认识到该门课程不仅仅只是用于设计一个编译器, 该门课程涉及的相关知识跟很多计算机相关课程以及以后他们所从事的计算机方面的研究都有莫大的关系。

2 实践教学

在实践教学中, 教师应该循序渐进地引导学生在实践中开展研究, 而不是一开始就要求他们完成很难的实践任务。例如, 先要学生实现一个简单的词法分析器, 该词法分析器功能简单, 只能完成词法分析器的一些基本的简单的功能, 等他们完成这个任务后, 学生不但学习兴趣大增, 而且对以后较难的实验也充满的信心。如果一开始就要求他们完成功能齐全的词法分析器, 可能有很多学生做不出来, 那么他们对后面的实践教学更加会产生畏惧心理。

对于较难的实践研究任务, 教师可以让学生分组来实现, 这样既能更好的完成实践任务, 而且更重要的是能培养学生团队精神和分工协作能力, 实现计算机专业学生的培养目标之一。

3 结束语

《编译原理》课程是计算机专业的主干课程之一, 本课程讲述的高级程序设计语言的编译程序构造的基本原理和实现技术, 是计算机软件的核心技术之一, 所以该门课程对计算机专业的学生来说很重要。探讨该课程的教学方法, 提高教学质量, 才能使学生更好的将该课程所学知识应用到以后的科学研究中去。

摘要:《编译原理》作为计算机专业的一门必修专业课程, 在教学中占据着十分重要的地位。但由于其内容抽象, 算法复杂, 而且具有较强的理论性和实践性, 故讲课和学习难度都较大。本文就该课程的教学方法总结出一些经验, 以提高学生对该课程的学习兴趣, 为学生更好的掌握计算机专业知识打下坚实的基础。

关键词:编译原理,教学方法

参考文献

[1]陈火旺, 刘春林, 谭庆平, 赵克佳, 刘越.程序设计语言编译原理[M].第3版.北京:国防工业出版社, 2000.

[2]吕映芝, 张素琴, 蒋维杜.编译原理[M].北京:清华大学出版社, 1998.

[3]顾彬, 郑关胜.《编译原理》教学方法的研讨[J].教育教学论坛.2013 (15) :64

[4]王海文, 林月, 王辉.《编译原理》课程教学方法的探讨[J].黑龙江科技信息, 2012 (6) :160

[5]肖楠.编译原理课程教学方法的改革与实践[J].牡丹江师范学院学报, 2013 (2) :72

[6]余玛俐, 张海.《编译原理》教学方法探析[J].九江学院学报, 2005 (4) :114

《编译原理课程设计》教学大纲 篇2

课程名称: 课程编号: 适用专业: 总 学 分: 总 周 时: 主 撰 人: 撰写日期:

一、目的与任务

通过程序设计上机调试程序实现算法,学习编译程序调试技巧和设计编译程序的一般原则,加深对词法分析、语法分析、语义分析和中间代码生成等编译阶段及实用编译系统的认识,初步掌握编译程序构造的基本原理与技术, 从形式语言理论的角度, 进一步认识与理解程序设计语言。通过编译程序的编写和调试能力的训练,激发学生进一步思考问题,培养学生的学习兴趣和创新能力。并进一步培养学生的抽象思维能力,进一步巩固《编译原理》课程所学知识。

本次课程设计的时间为2周,目的是通过实际的题目如:词法分析、语法分析、代码优化等,使学生了解和掌握编译程序的工作原理,同时培养学生用相关的程序设计语言进行程序设计,实现编译的功能,从而提高学生的综合能力。

二、教学基本要求

1.设计和调试过程要规范化

需求分析:将题目中要求的功能进行叙述分析,并且设计解决此问题的数据存储结构,(有些题目已经指定了数据存储的,按照指定的设计),设计或叙述解决此问题的算法,描述算法可以使用自然语言、伪代码、或函数的方式。

给出实现功能的一组或多组测试数据(测试文法),程序调试后,将按照此测试数据进行测试的结果列出来。

如果程序不能正常运行或运行过程中出现了不满足算法思想的情况,写出出现这一情况的原因或改进行的方法。

源程序要按照写程序的规则来编写。要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。

程序能够运行,要有基本的容错功能。尽量避免出现操作错误时出现死循环。2.课程设计实习报告的书写格式

编译原理 436105 软件工程 2W 2012.6

审 核 人:

① 设计题目

②运行环境(软、硬件环境)③算法设计的思想 ④算法设计分析 ⑤主要函数 ⑥源代码 ⑦运行结果分析 ⑧收获及体会 3.实施方式

本次课程设计分成9个题目,都有一定的工作量,涵盖本课程内容和实际应用相关的主要技术,学生可以自由组队选择其中一个实现。课程设计题目见“主要内容”。

根据老师给定的9个题目进行分析设计,本次课程设计采取分组的办法进行,3-4人为一组,要求每组学生在规定时间内独立完成。4.答辩:课题的论述、测试及问题回答

三、课程设计内容

1、词法分析器的构造:

人们理解一个程序,起码是在单词级别上来思考。同样,在编绎一个程序时,也是在单词级别上来分析和翻译源程序。词法分析是编绎的基础,执行词法分析的程序即为词法分析器,它的任务是对输入或给定的源程序,从左至右逐个字符进行扫描,产生一个个单词符号,把作为字符串的源程序改造成单词符号串的中间程序。设计目的与任务:

通过本课程设计教学所要求达到的目的是:对词法分析工作流程进行总体设计和详细设计,最终用C语言来设计一个简单词法分析器,实现对源程序的词法分析功能,对输入程序去除注释,并以二元式形式输出程序中所有单词。

2、正则表达式到NFA 在编译系统中,词法分析阶段是整个编译系统的基础。对于单词的识别,有限自动机FA是一种十分有效的工具。有限自动机由其映射f是否为单值而分为确定的有限自动机DFA和非确定的有限自动机NFA。在非确定的有限自动机NFA中,由于某些状态的转移需从若干个可能的后续状态中进行选择,故一个NFA对符号串的识别就必然是一个试探的过程。这种不确定性给识别过程带来的反复,无疑会影响到FA的工作效率。而DFA引擎在任意时刻必定处于某个确定的状态,它搜索是无需象NFA一样必须记录所有的可能路径(trace multiple possible routes through the NFA),这也是DFA运行效率高于NFA的原因。而已经证明DFA是NFA的一个特例,即对于每一个NFA M存在一个DFA M’’,使得L(M)=L(M’’)。

设计目的与任务

通过本课程设计教学所要求达到的目的是:充分理解和掌握NFA,DFA以及NFA确定化过程的相关概念和知识,编程实现对输入的任意正规式转换成NFA的形式输出。

3、NFA的确定化

有限自动机理论是描述词法规则的基本理论。一条词法规则表示一个正规表达式(又叫正规式),而一个正规式又可化为一个DFA(确定有穷自动机),这个有限自动机可用来识别词法规则所定义的所有单词符号。把程序设计语言的所有词法规则都构造出相应的有限自动机,就得到一个词法分析器。然后,再转换为计算机可识别的程序就能自动实现词法的分析和检查。在实际应用中,用NFA(不确定有穷自动机)识别词法存在不确定和状态的冗余,因而,就要将NFA(不确定有穷自动机)转换为DFA(确定有穷自动机),消除了不可到达和不确定。设计目的与任务

通过本课程设计教学所要求达到的目的是:掌握从NFA到DFA的转换,以及用子集法把NFA转换成DFA理论,编程实现将NFA(不确定有穷自动机)转换为DFA(确定有穷自动机)。

4、DFA的最小化

确定性有限自动机(DFA ,Deterministic Finite Automata)的最小化仍是有限自动机应用及实现方面的重要问题之一。DFA的最小化可以揭示状态之间的内在联系,便于其存储实现,便于建立用DFA描述的任务模型,一些理论问题也与最小化思想有关。DFA的最小化是指,构造一个与之等价且状态数最小的DFA,即等价最小DFA。许多文献给出了一个最小化算法,算法的思想是,构造状态集的一个划分,再将这个划分中的每个子集作为新的状态,从而得到等价最小DFA。

DFA的最小化可以揭示状态之间的内在联系,便于其存储实现,便于建立用DFA描述的任务模型,一些理论问题也与最小化思想有关。

5、语法分析之LL(1)文法

通过该课程设计了解了程序语言的自上而下的语法分析过程,提高了编程能力,能使我们了解编程语言更多的细节 设计目的与任务(1)读入文法(2)求出first(), follow()(3)判断是否为LL(1)文法

(4)若是,构造分析表;

(5)输入一个字符串看是否是文法的一个句子。

6、算符优先文法

一个文法,如果它的任一产生式的右边都不含有两个相继(并列)的非终结符,即不 含有如下形式的产生式的右部:

„QR„

则我们称该文法为算符文法。

假设文法中的任意两个终结符之间最多只有一个优先关系,则该文法称为算符优先文法。

该课程设计按照求,(P),(P)各两条规则,求出各非终结符的集。然后按照算符优先算法求出各终结符的算符优先关系,填写算符优先表,并将其输出。

7、LR(0)分析表的构造

LR分析技术是一种有效的自下而上分析技术,是一种规范归约,其中L表示从左到右扫描输入串,R表示构造一个最右推导的逆过程。这种方法可以适用于很大一类上下无关文法的语法分析。LR方法的基本思想是:在规范归约过程中,一方面记住已经移进和归约出的整个符号串,即记住“历史”;另一方面根据所用的产生式推测未来可能碰到的输入符号,即对未来进行“展望”。当一串貌似句柄的符号串呈现于分析栈的顶端时,我们希望能够根据所记载的“历史”和“展望”以及“现实”的输入符号等三方面的材料,来确定栈顶的符号传是否构成相对某一产生式的句柄。

LR分析器的核心部分是一张分析表。这张分析表包括两部分,一是“动作”(ACTION)表,另一是“状态转换”(GOTO)表。对于一个文法,如果能用一个每步顶多向前检查K个输入符号的LR分析器进行分析,则这个文法就称为LR(K)文法。本文研究的LR(0)文法即K=0时的文法。

设计目的与任务

本课程设计所设计目的与任务是:通过C语言程序实现LR(0)分析表的构造,熟练掌握LR(0)分析表的构造方法,即利用拓广文法和构造项目集规范族的方法。了解LR(0)分析器的工作原理,并能利用LR(0)分析表对输入串进行分析。

8、逆波兰表达式生成算法

虽然源程序可以直接翻译为目标语言代码,但许多编译程序采用了独立于机器的、复杂性介于源语言和机器翻译语言之间的中间语言:后缀式(逆波兰表达式)等。这样做的好处是:

(1)便于进行与机器无关的代码优化工作;(2)使编译程序改变目标机更容易;

(3)使编译程序的结构在逻辑上更为简单明确。以中间语言为界面,编译前端和后端的接口更清晰。设计目的与任务

将非后缀式用来表示的算术表达式转换为用逆波兰式来表示的算术表达式,并能运行查看结果。

9、表达式的中间代码生成

源程序可以直接翻译为目标语言代码,但是许多编译程序却采用了独立于机器的、复杂性介于源语言和机器语言之间的中间语言。这样我们可以做下面工作:

(1):便于进行与机器无关的代码优化工作;(2):使编译程序以改变目标机更容易;(3):使编译程序的结构在逻辑上更为简单明确;

而以中间语言为界面,编译前端和后端的接口更清晰,表达式可以用四个域分别称为OP、ORG1、ORG2及RESULT来表示。

四、时间安排

《编译原理课程设计》安排在第三学期进行,时间2周(17-18周)。

五、组织管理

1.由院、系指派经验丰富的专业教师担任指导教师。

2.课程设计实行指导教师负责制,由指导教师全面负责课程设计的指导与管理工作。

六、成绩考核与评定

学生课程设计结束后写出总结报告,对设计的内容和效果进行总结,按照学生在设计期间的表现,指导老师对每位学生写出评语和鉴定,系课程设计领导小组组织答辩,最后确定每位学生课程设计成绩,课程设计成绩分为优、良、中、及格和不及格五个等级。课程设计成绩为平时表现30%、设计报告50%、答辩20%。评分标准:

① 优秀:目的明确,态度端正,模范遵守学校的各项纪律。工作认真,积极 主动,吃苦耐劳,能出色的完成设计任务。撰写了高质量的总结报告。答辩准确流利。

② 良好:目的明确,态度端正,能遵守学校的各项纪律,工作比较积极主动。能较好地完成设计任务,成绩较突出,表现良好;撰写了质量比较高的实习报告。答辩较准确流利。

③ 及格:目的明确,态度基本端正,能遵守学校纪律,在督促下能开展工作 并完成一定的设计任务,无大的违纪违规现象;撰写了实习报告。通过了答辩。

④ 不及格:实习态度端正,不能遵守实习单位的纪律,不服从领导,自由散漫,工作消极被动,不能完成实习任务,实习期间有失职、旷工、打架、酗酒等大的过失。或无实习报告,没有通过答辩。

2.成绩评定

依据上述考核内容,最后采用优(>90分)、良(80~89分)、中(70~79分)及格(60~69分)、不及格(<60分)五级记分制评定学生课程设计成绩。

七、主要参考资料

教材:

《编译原理及实践》冯博琴等译,机械工业出版社 教学参考书

1、《程序设计语言与编译》龚天富、侯文永编,电子工业出版社。

2、《编译原理》吕映芝、张素琴、蒋维杜主编,清华大学出版社,1998年

3、《编译原理》胡伦骏、徐兰芳、刘建农编,电子工业出版社2002年

4、《编译原理》(第二版)蒋立源、康慕宁主编,西北工业大学出版社,2002年

5、《编译原理习题精选》陈意云、张昱著,中国科技大学出版社,2002年

6、《编译原理习题与解析》 伍春香著,清华大学出版社,2001年

编译原理教学方法 篇3

【关键词】编译原理 教学内容 课程实验

【中图分类号】H191【文献标识码】A【文章编号】1673-8209(2010)05-0-01

1 引言

编译原理课程是计算机科学与技术专业的重要专业课,它不仅能帮助学生更深入地了解计算机以及计算机程序的本质,还能提高学生进行问题求解的能力。本课程的理论性和实践性都很强。国外和国内分别从二十世纪六十和八十年代开始设置“编译原理”课程,从文献[1,2]两本专著的内容可以看出,几十年来,“编译原理”课程可以讲授的内容越来越多。设置该课程的目的在于系统地向学生讲叙编译程序设计的基本理论、编译系统的结构及编译程序各部分的设计原理和实现技术。通过对这些知识的学习,使学生既能掌握编译理论和编译方法等方面的基本知识,又具有设计、分析、实现和维护编译程序等各方面的综合能力。该课程一般包括理论教学和实验教学两部分。编译原理理论知识包括形式语言、有穷自动机等抽象内容及大量的算法,较难理解和掌握,因此“编译原理”的实验教学对于深化学生对所学理论知识的理解,提高学生的理论联系实践的能力和编程水平具有重要的作用。

本文根据编译原理课程的特点,结合自己的教学经验与我院的实际情况,探讨了普通本科院校编译原理的实践教学内容的设置。

2 课程实验的重要性

编译原理是集理论与实践于一体的一门课程,在理论课中所介绍的基本概念、原理、方法和算法,一定要通过实验加以理解和吸收,才能能够达到真正的理解、吸收和掌握。编译原理课程实验的内容主要放在对词法分析、语法分析和语义分析、中间代码生成、中间代码优化和目标代码生成的方法上。由于编译原理课程有很强的理论性与实践性,在学习时普遍感到内容抽象,不易理解,掌握起来难度很大。因此通过教学实践和对学生所做的调查表明,设计一组与理论内容相配套的实验是十分必要的。

3 课程实验的设计

针对编译原理课程的特点及要求,共设置了五个实验项目。这组实验既和理论课内容相辅相承,同时相互之间又互相关联,构成了一个实验整体。

实验一

题目:消去C、C++程序中的注释(2学时,必做)

实验目的: 掌握C语言文件的基本操作,消除源C语言程序中的注释,为以后的编译提供方便。

实验要求:对给定的带注释的C语言源程序,利用该程序去掉注释,输出去除注释的源程序。

实验二

题目:词法分析(必做,4学时)

目的:通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。

要求:编写程序对输入的源程序字符串进行词法分析,对符合下述文法描述的字符串,建立单词符号表,不符合的字符串给出错误信息。

内容:用扩充的BNF表示如下:

<标识符>→<字母>{<字母> <数字>}

<整型常数>→<数字>{<数字>}

<算符>→+ - * / ( ) =

<字母>→a b c … y A B C … Y

<数字>→1 2 3 4 5 6 7 8 9 0

实验三

题目:递归下降分析法(4学时,选做)

目的:根据给定的文法编制调试递归下降分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对递归下降分析法的理解。

要求:对给定的文法,利用递归下降分析法对任意输入的符号串进行分析语法分析,对符合下述文法描述的字符串(表达式或赋值语句),给出中间代码,不符合的字符串给出错误信息。

内容:用扩充的BNF表示如下:

<赋值语句>→<标识符>=<表达式>

<表达式>→<表达式>{+<项> -<项>} <项>

<项>→<项>{*<因子> /<因子>} <因子>

<因子>→<标识符> (<表达式>)

即:S→i=E

E→E+T E-T T

T→T*F T/F F

F→i (E)

实验四

题目:语法分析程序LL(1) (4学时,必做)

目的:通过该实验使学生掌握描述语法规则的文法,以及加深对语法分析中自顶向下分析法中的预测分析法的理解。

要求:对给定的文法建立预测分析表,利用预分析法对实验一中词法分析产生的符号进行语法分析,对符合下述文法描述的字符串(表达式或赋值语句),给出中间代码,不符合的字符串给出错误信息。

内容:用扩充的BNF表示(同实验三)。

实验五

题目:语法分析程序LR(1) (4学时,必做)

目的:通过该实验使学生加深对语法分析中自下而上分析法中的LR分析法的理解。

要求:对给定的文法手工建立LR(1)分析表;利用LR分析法对实验二中词法分析产生的符号进行语法分析,对符合实验中文法描述的字符串(表达式或赋值语句)给出中间代码;不符合的字符串给出错误信息。

内容:用扩充的BNF表示(同实验三)

4 小结

编译原理课程在计算机课程体系中的重要地位,决定了其课程建设和改革的长期性,对培养计算机专业的人才也有着重要的作用,探索该课程的教学方法,提高教学质量是从事计算机教育工作者的必须重视的问题,也是一个永远值得探讨的问题,我们根据我系的实际情况合理的运用现代手段,综合考虑多种因素,将该课程的教学改革推向更科学的发展道路。

参考文献

[1] Alfred V.Aho,Ravi Sethi,Jeffrey D.Ullman. Compilers:principles,techniques,and tools[M]. New York:Addison Wesley,1986.

[2] Alfred V.Aho,Monica S.Lam,Ravi Sethi,Jeffrey D.Ullman..Compilers: principles, techniques, and tools[M]. 2nd edition.New York:Addison-Wesley,2007.

[3] 孟亚辉.关于《编译原理》课程教学的思考.科技信息,2008年第16期.

“编译原理”课程的教学探讨 篇4

1 当前教学中存在的问题

由于这门课程理论性强,内容丰富抽象,具有严密的逻辑性,使用到其它课程的知识较多,因此成为计算机专业诸课程中既难教又难学的一门课程。目前该课程在教学过程中主要存在以下问题:

1)课程内容抽象难理解

编译程序不同于一般的应用程序,是一个十分庞大和复杂的系统软件,它所包含的理论知识较多,抽象度也较高,要求教师在有限的课时内将课程内容讲解清楚,并使学生接受理解是有难度的。

2)基于面向过程语言的描述模型

目前,这门课程中的算法和模型描述是用PASCAL语言或者C语言等面向过程语言。虽然个别教材加入了少量关于面向对象语言编译技术的内容,那也是稍加点缀而已,用途较小。然而,面向对象语言已经成了高校计算机教学的主流语言,社会上大量使用的也是面向对象语言,而我们的编译原理教学仍然沿袭旧的面向过程语言,这种现象严重脱离了计算机技术发展和社会实际需要。

3)课程实验设计不合理

目前,大多数高校在“编译原理”课程的实验内容上基本上都是要求学生能上机实现一个小型模型语言的完整编译程序,或者是分四个单独的实验(词法一个实验,语法三个实验),它们的目的是让学生加深理解一些编译理论与算法,这对于一部分学生来说是不能完成的任务,也不能激发他们的兴趣(他们认为学习编译原理就是为了设计编译器),造成很大部分学生在动手之前就早早放弃了努力,也就不能达到预期的实验效果。

4)教学手段陈旧

目前,“编译原理”课程主要以理论教学为主,课时主要用于形式语言理论与各种语法分析算法、语义分析技术的讲授上,缺乏对实际编译器的分析。同时,在讲解的时候一般没有辅之以其它形象生动的教学手段,对学生是采用“灌输式”的教学模式,而没有采用“启发式”、“讨论式”等多种教学模式,因此学生觉得授课内容枯燥乏味,激不起他们学习的兴趣。

5)教学大纲统一

目前,每个高校计算机相关专业包括计算机科学与技术、软件工程、网络工程等,学生也存在不同的层次包括统招的“一本”、“二本”学生,以及“专升本”学生等。不同专业有不同的培养目标,不同的生源造成学生知识背景和自身素质也有差异。在这种情况下,在“编译原理”课程教学过程中实行统一的教学大纲显然不合适。

6)学生学习兴趣不浓

目前,学生普遍认为学习编译原理就是为了设计编译器,而大部分学生今后从事编译器设计工作的可能性较小,因此觉得没必要学。另外,目前面向对象的程序设计语言已经成为了主流,认为课程主要讲授面向过程的程序设计语言的处理已经落伍,因此失去了学习兴趣。

形成以上这些问题的原因既有主观的也有客观的,这些问题在我校的编译原理教学过程中也都不同程度地存在。为此,对“编译原理”课程的教学内容和教学方法进行探讨是十分必要的、有意义的。

2 需要解决的问题

1)课程内容的调整

“编译原理”课程内容丰富抽象,理论性和逻辑性很强,所以很多学生在学习时普遍感到枯燥、乏味,难理解,激不起学习兴趣。为此,需要对课程内容合理安排以便收到较好的教学效果。

a)抓住重点,分清主次

由于课程内容涉及较多,学生往往抓不住重点,分不清主次,结果导致劳而无功。为此,需要根据专业的不同,学生层次的不同,在不影响对编译系统理解的情况下,合理安排授课内容,切不可造成“统一重点的教学”、“统一层次的教学”、“统一大纲的教学”现象。

b)范例式编译器的剖析

为了帮助学生对编译思想和方法的理解,应在教学过程中增加一部分内容,即对一个范例式编译器进行剖析。该范例式编译器应采用教学中涉及到的典型编译思想与方法。学生在教师的指导下对实际编译器代码进行阅读,将使学生对抽象的编译理论与算法有更深刻的认识,从而达到较好的教学效果。

c)面向对象式语言的描述模型

当前,面向对象式语言已成为主流,而目前课程中的内容却是围绕面向过程式语言展开的。为此,需要在教学过程中增加一部分内容,即选择某个对象式语言来描述典型的编译算法。但就目前来看,以面向对象语言作为源语言来重新组织编译原理的教学内容并不合适。在教学过程中应向学生指明这一点,使之有个正确的认识。

2)实践环节的设计

“编译原理”也是一门实践性较强的课程,只有通过实践环节才能让学生加深对抽象理论的理解,培养其分析、设计软件的能力。为此,必须重视实践环节的教学,精心设计实验方案,合理组织实践训练(对于不同专业培养目标、不同类别学生素质差异,需设计不同的实验方案)。

a)设计合适的实验内容

目前,大多数高校在“编译原理”课程的实验内容上基本上都是要求学生能上机实现一个小型模型语言的完整编译程序,或者是分四个单独的实验(词法一个实验,语法三个实验)。这样的实验内容存在一个缺陷就是不能充分激发学生的学习兴趣,因为他们认为学习编译就是为设计编译器,而大部分学生以后从事这方面工作的可能性较小。为此,我们需要设计一个能运用编译理论和技术去解决实际问题的实验。例如,可以给定一个受限汉语的子集,引导学生用文法去描述它,然后把它应用到一个简单的自然语言查询的程序设计中去。

b)合理安排实验课时间

实验时间安排要具有灵活性,不要一周或两周一次实验,这样可能和授课的理论内容脱节。可以分别在每个实验的相关内容讲解完后安排这四个实验,并要求学生记录下每次实验的输入和输出形式,实现理论与实践的结合。

c)改进实验课教学方法

为了让实验能达到预期的效果,需要做以下工作:一是老师在实验前要将准备好的实验资料发放给学生,让学生利用业余时间分析、设计实验内容;二是老师指导学生一起讨论实验所涉及的原理、程序模块的功能和部分变量的用途;三是学生在理解的前提下,开始进行实验,老师随时进行监督指导。最后,在实验完成后,老师一定要检查学生的完成情况,并给予记录,学生则要记录下所有的实验结果。

3)教学方法的改进

“编译原理”课程抽象性和理论性较高,学生普遍感到内容难理解,更不能运用编译技术所涉及到的思想和方法去解决其他专业问题,学起来枯燥、无味。为此,需要灵活运用多种教学方法,以激发他们的学习兴趣和积极性,培养其分析、解决实际问题的能力。

a)多媒体辅助教学

“编译原理”课程涉及到形式语言与自动机理论,主要包括一些经典的语法、语义分析算法。这些理论和算法抽象复杂,不易理解。为此,需要借助多种辅助教学手段,如CAI课件、CAI教学系统和教学网站等。这样可以把抽象的理论形象化,把知识讲解化静为动,寓教于乐,培养和激发学生的学习兴趣。

b)师生互动式教学

教学是由“教”与“学”两方面构成的,师生互动才能“教”、“学”相长,提高教学效果。在课堂上,应采用“启发式”、“讨论式”、“提问式”等多种教学模式,以发散学生的思维,激发他们的思考能力;在课后,应通过教学网站发放调查问卷等形式及时获取学生对教学活动的意见与建议,学生也可以通过BBS系统进行交流,以便及时发现问题进而改进教学方法。还可以指定课后的时间组织小型的师生面对面交流,一方面是答疑,一方面也可以就编译领域的一些新问题、新动向进行研讨,进一步激发学生的学习积极性。

4)教材建设和CAI课件制作

目前为止,国内外已有不少关于“编译原理”的经典教材,因而我们暂时不打算重新编写授课教材。但从以上分析可知,目前的课程实验内容设计却各不相同,没有合适的实验教材,因此有必要根据我院特色来组织编写“编译原理”课程实验教材。同时,我们也将依据我院教学实际,重新合理组织教学内容,图文并茂,制作精良的CAI课件,以减少板书的时间,提高授课效率。

5)教学网站的建设

开发“编译原理”网络教学平台,构建良好的网络辅助教学环境,实现学习、答疑、作业和考试等各个教学环节的网络化,教师和学生可以很方便的利用该平台完成几乎所有教学活动,本课程教学网站主要将分四大模块:

a)基本信息

包括课程负责人、课程主讲人、教学队伍、自我评价、课程建设规划、课程教学录像等相关信息。

b)课程建设

课程概况:课程简介、课程大纲、教学日历、教材和参考文献。

教学资源:电子教材、电子课件(PPT)、电子课件、参考教案、例题源代码、习题答案、考试样卷及参考答案。

实验教学:实验教学大纲、实验内容、实验指导。

在线考试:为学生提供了模拟笔试、模拟机试和在线考试,实现了自动组卷和评分。

作业练习:提供了各章的练习题、单元测试题。

作业提交:主要提供了作业的发布与提交等功能。

c)BBS论坛

提供学生、老师相互之间的交流平台,以便及时发现问题进而改进教学方法和内容。

d)问卷调查

在课后,发放调查问卷及时获取学生对教学活动的意见与建议。

6)CAI教学系统的研制

CAI教学系统是辅助教学的一重要手段,通过它可以帮助学生加深对编译思想和方法的理解与运用,进而培养和激发他们的学习兴趣。我们将考虑按照图1所示的系统结构图来设计“编译原理”课程的CAI教学系统。

基本知识播放:提供每章的基本知识点的查询和一些基本知识点的程序实现等。

编译过程演示:这是CAI教学系统主要模块,提供了词法、语法、语义分析算法的动态演示,而且还要动态演示中间代码生成、中间代码优化和目标代码生成的执行过程。

自我测试:提供题库,让学生测试自己对所学知识的掌握情况。

系统维护:随着编译技术的发展,知识的不断更新,会出现一些新的概念和算法,因此系统也要随时增加新的知识点。另外,随着系统的运行,可能会发现一些不正确的地方,也需要及时修改。

3 结束语

“编译原理”是计算机专业中一门重要的课程,通过本课程的学习,可以使学生获得设计、分析和移植编译程序方面的初步能力。结合实际教学过程,本文分析了“编译原理”课程教学中所遇到的六个问题,探讨了需要解决的五个问题,以期望在今后的教学中能达到较好的效果。

摘要:“编译原理”是计算机专业中一门非常有用的核心课程,针对“编译原理”课程教学过程存在的问题,结合实际的教学情况,对“编译原理”课程的教学内容和方法进行了探讨,提出了解决思路和方法。

关键词:编译原理,教学内容,教学方法

参考文献

[1]陈火旺,刘春林,谭庆平等.程序设计语言编译原理[M].北京:国防工业出版社,2009.

[2]刘磊,郭德贵“.编译原理”课程建设研究[J].计算机教育,2006(6):8-10.

编译原理教学方法 篇5

【摘 要】本文对《编译原理》教学过程中出现的一系列问题进行了分析,并根据实践,对编译原理课程的课堂教学和实验教学进行了思考和探索。

【关键词】编译原理 教学过程 课堂教学 实验教学

一、前言

《编译原理》是高等院校本科教育计算机专业中一门非常有用的核心课程之一,它对培养学生的抽象思维能力、独立解决复杂问题的能力以及增强编写和调试程序的能力等方面起着很大作用。但是,接触过编译原理的学生和老师都知道《编译原理》是一门难学难教的课程。这门课程的内容比较抽象,理论性很强,不容易理解,而且对实践也有较高的要求。学生普遍认为编译原理不实用,因而也就缺乏了学习的热情与积极性,存在畏难情绪。如何在教学过程中激发学生的兴趣,并解决教学中出现的一些问题,我觉得可以从以下几个方面去思考与探讨。

二、认清编译原理,明确学习意义,激发学生的热情

1.帮助学生认清编译原理的作用和地位

在教学过程中,很多学生都有这样的疑问:编译原理学的是什么?学习它有什么作用?

我们知道,目前的计算机能执行的都是非常低级的机器语言,一个用高级语言编写的源程序最终如何在计算机上执行呢?这就是编译原理要解决的问题。概括地说,编译原理课程介绍编译器构造的一般原理、基本设计方法和主要实现技术。编译原理课程通过编译器的各个组成部分来解释高级语言编写的源程序如何翻译成计算机能够执行的机器语言。这个翻译的过程涉及程序设计语言、机器结构、形式语言理论、类型论、算法和软件工程等方面的知识。例如,对软件工程来说,编译程序是一个很好的实例(基本设计、模块划分、基于事件驱动的编程等),编译原理课程所介绍的概念和技术可以用到一般的软件设计中。

事实上,通过编译原理的学习,有助于学生快速理解、定位和解决在程序编译、测试与运行中出现的问题。另外,编译原理的学习对熟悉编译过程、掌握计算机高级语言的生成机制、理解具体程序的运行状态起着关键作用。

2.帮助学生克服畏难心理,提高学生的兴趣

在教学的过程中,很多学生认为他们今后的工作不会涉及到编译原理的理论和技术,编译原理没有实际的用处,学习起来就非常的枯燥无味。其实这是对编译原理的一种错误认识。该课程中的原理除了可以用于分析编译器以外,还对诸如人工智能、并行处理技术等课程的学习具有指导作用。例如,利用编译原理的理论设计出“翻译风”这样的软件。与此同时编译原理课程可以帮助学生更进一步地理解和综合应用离散数学、高级语言、数据结构、汇编语言等专业基础课程的知识。例如,编译程序应用了多种数据结构,在词法分析阶段使用状态转换图来识别各种单词;在语法分析中使用语法树等来进行语法分析;在存储分配时使用栈式结构和堆式结构进行存储空间的分配。本门课程学习对其它课程的学习和今后很多领域的理论研究具有深远的意义,如计算机软件技术领域、计算机系统结构领域、人工智能系统的机器学习领域、并行处理技术等领域。

鉴于“编译原理”这门专业课程的特点,在教学过程中端正学生的认识,帮助学生克服畏难情绪,肯定学生所具有的能力,让学生明白以他们掌握的计算机知识,有足够的能力学好《编译原理》这门课程。鼓励他们同样可以利用学到的理论技术设计出类似“翻译风”这样的软件,帮助学生建立信心,发挥他们的才智,提高学习的热情。

三、把握课堂教学内容

1.整体把握一条主线,领会每个阶段的精髓,各个击破

编译器(编译程序)可以分为词法分析、语法分析、语义分析、中间代码生成,代码优化和目标代码生成这六个阶段,每个阶段还会伴有符号表管理和出错管理。在第一章编译器概述中就把编译器化分成这六个阶段,同时还简要的描述了这六个阶段各自的任务,这是贯穿整个课程的一个主线,整个课程就是按这六个阶段组织进行的。所以一开始让学生把握这条主线,对课程有一个总体的把握,理解编译的过程。

当学生从整体上理解编译器的结构之后,然后分章节对各个部分进行细致地教学。按照编译过程的划分,把课程分为六章内容,每章都有它的精髓所在,只要掌握了每章的精髓,就能掌握编译的整个过程。词法分析的精髓主要是词法分析的构造、有限自动机理论的应用;语法分析的精髓主要是语法分析的两种方法——自上而下分析法和自下而上分析法;语义分析主要是属性文法、语法制导定义以及翻译方案;中间代码主要描述了中间代码常见的几种表示形式、各种语法结构如何进行语法制导翻译形成中间代码;代码优化主要围绕如何从时间和空间上进行优化,尽可能提高执行的效率展开,分别讲述了局部优化和循环优化;目标代码生成主要是目标代码生成算法的实现及寄存器的分配。这六个部分相辅相成,互有联系,掌握每个阶段的精髓,各个击破,这样学生比较容易理解和接受。

2.课堂讨论式

在《编译原理》的教学过程中,课堂上不能采取“灌输式”教学,上面老师讲解的充满激情,下面学生听得昏昏欲睡,随着时间的积累,学生不理解的知识越来越多,就会慢慢失去学习的兴趣。所以,要注重与学生的交流,在课堂上可以采取集体讨论和分析的方法,让学生说出自己在学习的过程遇到的问题以及解决问题的方法。例如,数据对齐是由硬件特点造成的对存储分配的`一点约束,这个概念有的教材并没有提到或者只是一带而过。针对数据对齐问题,有一个C语言的例子:

typedef struct a

{ char cl ;

long i;

char c2;

double f;

}a ;

typedef struct_b

{ char cl;

char c2;

long i;

double f;

)b ;

main ( )

{ printf( “Sizeof double,long,char= %d, %d , %d”,sizeof(double) , siz eof( long),sizeof(char));

printf (“ Sizeof a ,b =%d, %d,sizeof(a), sizeof(b)) ;

}

在X86/Linux机器上,该程序的运行的结果是:

Size of double,long,char= 8,4,1

Size of a, b = 20,16

在SPARC/Solaris工作站上,该程序的运行结果是:

Sizeof double,long,char=8,4 ,1

Sizeof a,b = 24,16

在这个例子中,结构体类型a和b的域名及类型都一样,仅次序不同,但是它们在同一机器上的存储分配字节数不一样,在不同机器上的情况也不一样。有的学生就会问为什么会要考虑数据对齐的问题?这时候,老师可以指导学生课后搜集相关资料,然后进行课堂讨论分析。

其实,数据对齐对用C语言编程、对构造编译器、对C程序的移植来说都是重要的。利用这样的例子考察实际编译器存储分配的对齐情况,让学生明白存储分配时要考虑到数据对齐以及数据对齐的作用。让学生自己去探索,不仅明白了概念的重要性,增强了学生的理解和应用能力,拓宽了知识面,而且培养了学生思考问题和解决问题的能力,培养了科学严谨的思维能力。

四、精心设计实验教学内容

《编译原理》对实践的要求比较高,所以实验课是培养学生实践能力的重要环节,是巩固和验证所学理论知识,培养学生分析问题、解决问题能力的重要环节。但是在教学的过程中,绝大部分学生无法完成编译原理的实验。即使告诉学生实验的思路和算法,有的还是不知如何入手,整个实验的效果很差。为了能达到好的实验效果,极大地促进学生对原理的理解,可以从以下几个方面思考:

1.认真设计合适的实验内容

编译技术中有很多经典的算法,由于课时有限,可以选择具有代表性的典型算法来实现。根据课程的特点和大纲的要求,可以设置三个实验内容:词法分析器的设计、递归下降分析器的设计、LR(0)分析器的设计。很多教材中都有相关的设计算法和程序代码片断,这样降低了《编译原理》实验课的难度。另外,根据老师可以根据的实验效果对实验内容再做适当调整。

2.采用适当的实验形式

根据课程的重难点和实验覆盖的知识点不同,将《编译原理》的实验内容分为两大部分:独立实验和分组实验。

在实验的过程中,将词法分析器的设计和递归下降分析器的设计作为独立的实验,由每一个学生自己独立完成,而将LR(0)分析器的设计作为分组实验。分组实验以学生自由组合的小组形式为单位进行,一般一个小组由3至4名学生组成,并推荐一人作为组长,负责师生之间的联系,采用分组实验的形式锻炼了团队分工协作的能力,培养了团队精神。

3.教师的耐心指导

教师在实验过程中的指导也很重要。教师对学生的指导要细心认真,让学生记录下每次实验的输入和输出形式,实现理论与实践的结合,注意调动学生的积极性,引导他们独立思考、独立完成;另外,更要加强实验结果的监督,提高实验教学质量。

五、结束语

以上结合自己的教学实际,在编译原理的课堂教学和实验教学中的一些思考。事实上学好编译原理课程需要老师和学生双方的共同努力,需要我们共同不断的思考、探索、实践和积累。

参考文献:

[1]张昱,陈意云,郑启龙.编译原理课程的教学方法和教材建设[J].中国大学教学,,(7):61-62.

[2]余玛俐,张海.《编译原理》教学方法探析[J].九江学院学报(自然科学版),2005,(4):114-118.

[3]陈意云,张昱.编译原理[M].高等教育出版社,.

[4]陈意云,张昱.编译原理习题精选[M].中国科学技术大学出版社,.

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

《编译原理》作为高校计算机类专业的一门重要基础、核心课程, 在培养学生的抽象思维能力、独立解决复杂问题的能力, 以及增强软件设计和开发能力等方面发挥着重要作用, 在对计算机类专业学生的培养中占有重要地位。但由于该门课程主要介绍了高级程序设计语言编译程序构造的一般原理、基本设计方法、主要实现技术和一些自动构造工具, 具有很强的理论性和实践性, 教学内容具有一定难度, 学生也因为其极强的理论性和抽象性而缺乏学习积极性。如何在教学过程中激发学生的兴趣, 结合教学实践积极地推进《编译原理》课程教学改革, 解决教学中出现的一些问题, 是文本探讨的核心内容。

1 目前教学中存在问题分析

《编译原理》由于其课程自身的一些特点, 使其在具体的教学过程中存在如下问题:

1.1 课程内容具有理论性、抽象性的特点

本门课程在介绍程序设计语言实现技术的同时, 又介绍程序构建的一些相关理论知识, 如形式语言、自动机理论、语法制导及代码优化理论等, 其教学内容抽象, 知识点容量大, 理论性强而难于理解。学生往往在初次听课后不能快速理解其含义, 要经多次的、反复认真的深入学习后才能很好地理解和掌握。此外, 由于编译原理技术主要完成的是从高级语言到低级语言的翻译工作, 有部分教学内容看似道理简单, 而实际操作却烦琐, 易出错。学生在初始学习阶段常常出现听课时觉得清楚明白, 而自己练习时却越来越糊涂的情况, 容易挫伤学生的自信心。课程内容自身的这些特点致使大多数学生在学习过程中, 感到内容太过抽象和枯燥, 缺乏学习积极性;认为编译原理技术不如程序设计语言实用性强, 缺乏学习热情。

1.2 要求多门前导专业课程

该门课程在教学过程中, 需要涉及多门前导课程, 其实践部分更是对学生的编程能力有更高要求。因此, 对前导课程学习效果不够理想, 基本功不够扎实的学生是不小的考验。《编译原理》课程的教学过程中涉及离散数学、汇编语言、操作系统、数据结构、算法设计与分析、高级程序设计语言等众多课程的内容, 对部分课程有较高的要求, 这对于学生前面阶段的学习是一个综合性的考验。学生通过专业基础课程的学习后需要进行融会贯通, 并在实践中积累编程和调试经验, 才能更好地适应本门课程的学习。

针对课程在教学过程中存在的以上问题, 笔者从教学实践中总结出一些教学改革方案并运用于实际教学中, 取得了良好的教学效果。

2 建立以学生为主的互动教学, 加强实践环节

2.1 活用教学手段, 增强课程内容趣味性

在传统的教学方法中, 有很多是教学成果的精华, 能够灵活地掌握多种教学手段, 利用其将原本枯燥抽象的理论变得富有趣味性, 就能很好地帮助学生从一开始就摆脱畏难情绪, 增强学习自信心和学习热情。由于计算机处理问题的过程与日常处理问题有些不同, 概念比较抽象, 所以, 在教学过程中利用学生易于理解的方式转换问题的难度, 能够达到较好的效果。例如定义文法所产生的语言时, 需要利用规则完成推导, 从而产生句子并形成语言。这里就可以对比汉语句子的结构和产生过程, 甚至利用一些时尚新鲜的汉语句子来实现引入, 使学生易于理解并能更好地激发学生的学习兴趣。

2.2 以学生为主, 开展研究型教学

现代教学过程中, 通常教师都会注重互动教学, 但讲课形式始终占据高校教学的主体地位。特别是一些理论性强的基础课程, 更是以传授为主, 灌输理念为主。学生在大量接受理论教育的同时, 对所学内容产生了畏难情绪。一方面清楚课程的重要性, 想要深入理解;另一方面又觉得理论深奥, 学习有难度。《编译原理》正是属于这样一类课程。因此, 在编译教学中推进研究型教学, 通过提出一些较为典型的问题, 来引导学生体验前辈科学工作者建立理论时的思维方式, 积极的进行思考并提出自己的认知。教师需要给学生提供一个具有明确目标问题而思考过程宽松的学习环境, 让学生自主地进行学习和探索, 求解问题答案。当学生思考遇到困难或瓶颈时, 教师再提供帮助和修正, 让学生真正感受到每一点知识的有用之处, 才会更主动地进行钻研。例如在整个编译过程的各个阶段分别完成了什么, 为下一阶段提供了什么基础, 不同分析方法的优势对比及存在价值等, 都可以让学生自主的进行思考。在LR分析法中更是可以通过问题的层层递进, 直接给出例题, 让学生自己去发现当前分析法的缺陷并思考改进方法, 从而引出下一个分析方法。通过以学生为主的教学法, 以研究问题的方式启发学生思考热情, 自主接触理论知识并应用于问题求解过程, 不仅能让学生深刻理解理论知识的重要作用, 也便于知识的串联和贯通理解。通过学习主体的改变来降低理论学习难度, 能够达到很好的教学效果。

2.3 利用现代教学平台构建教学新方法

目前众多高校在现代教学平台的硬件设施方面都完成了较好的环境建设, 例如多媒体教室和校园网平台的建设。因此, 在计算机相关课程教学过程中更应该重视利用现代教学平台构建教学新方法, 带领学生在更广阔的平台上获取知识。除了常用的多媒体课件教学, 演示范例教学外, 教师还可以利用网络平台带领学生扩展知识面, 稍加引导后让学生自己去查阅感兴趣的相关内容和课程前沿信息, 并激励学生将过滤出的有用知识与教师同学共享, 使得教学达到事半功倍的效果。例如可以让学生通过网络查阅各种高级程序设计语言的编译程序版本信息, 讨论其实现编译过程和程序优化策略的优劣。教学还可以利用现代平台延伸至课堂之外, 通过建立课程讨论区, 教师与学生共同讨论教学进度或学习心得等, 答疑解惑。

2.4 注重实践教学, 合理设计实验

实践教学是计算机类课程教学的一个不可或缺的组成部分。《编译原理》对实践的要求比较高, 其中的实验课是培养学生实践能力, 巩固和验证所学理论知识, 培养学生分析问题、解决问题能力的重要环节。但在实际教学过程中, 既要加强对实践教学的重视, 又要注意实验题目设计的合理性和可操作性, 要把握好学生的实际学习情况, 因材施教的设计一些绝大部分学生能够完成的又能够体现课程实践意义的实验。在实验课前要提点学生实验的思路和算法, 对还不知如何入手的学生要善于引导其进一步思考, 从而得出结论。由于课时的关系, 《编译原理》课程的实验课时通常不多, 因此更要注意实验贵在精而不在多, 形式上既有独立实验又有分组实验, 有课内实验也有课外实验, 帮助学生充分利用实验课内外的时间通过实验学以致用, 让实验反过来促进学生对原理的理解, 提高教学效果。

3 结语

《编译原理》作为计算机类专业的主要课程, 可以帮助学生更进一步地理解和综合应用多门专业基础课程, 对其它课程的学习和今后很多领域如计算机软件技术领域、计算机系统结构领域、人工智能系统的机器学习领域、并行处理技术等的理论研究具有深远的意义, 对培养计算机专业人才有着重要的作用。但由于其课程内容和课程特点, 需要在教学过程中不断探索更优的教学方法, 降低该门课程在学生心中的难度等级, 激发学生学习热情。并且通过引导学生自主学习帮助他们找到适合自己的认知方式, 培养其独立创新能力, 从而提升教学意义。

摘要:针对《编译原理》教学中出现的由于课程内容抽象、理论深奥引发的学生缺乏学习积极性和教学效果不理想等一系列问题, 提出了一些在教学实践中总结出来的解决方案。通过建立以学生为主、师生互动的教学模式来推进课程教学改革。

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

参考文献

[1]吕映芝, 张素琴, 蒋维杜.编译原理[M].清华大学出版社, 2005.

编译原理实践教学改革初探 篇7

关键词:编译原理,实践改革,分级教学

《编译原理》是计算机及相关专业的一门专业必修课程,在整个专业教学中占有举足轻重的地位。该课程内容比较抽象,逻辑性强,它涵盖了程序设计、自动机、数据结构、机器实现等多门学科,需要具有足够的计算机基础知识作为它的前驱课程,所以学生普遍反应编译比较难学。

现在计算机专业考研统考取消了《编译原理》的考查,许多同学便认为该门课程不是很重要,上课也都采取无所谓的态度,理论掌握不扎实,进而给实践增加了难度。该门课的理论性、实践性都比较强,学习内容包括了词法分析、语法分析、语义分析与中间代码生成、代码优化及目标代码的生成,其中涉及到的正则文法、有穷自动机理论、上下文无关文法、LR文法、属性文法、回填技术、局部优化等概念都是构造编译器的重要理论基础。其实归根到底编译的重点不在于研究编译程序具体代码的实现,而是对编译的算法、基本原理的理解,编译原理中包含的形式语言的定义、语言的翻译过程、自动机理论等知识都是计算机研究的精髓内容,通过编译系统的理论学习和编程实践,可以增强学生软件的设计开发能力,提高他们的逻辑思维能力和操作动手能力,提升他们的专业水平,使他们获得可持续发展的计算机应用能力。

1 编译原理实践课程现状

为了加深学生对编译原理理论知识的理论,实践环节的设置是必不可少的。在笔者的学校,目前给编译原理课程安排实践内容是8节上机课外加一个课程设计,因为上机课时有限,所以给学生安排的是任务量稍轻的词法分析、语法分析等程序的设计,课程设计则增添了语义分析及编译器的实现等内容。

从以前的实践结果看来,情况不容乐观。学生本身水平就是参差不齐,提交上来的设计作业水平也相差较大,更有甚者,如果不会做的话,直接把其他同学的作业拷贝一份改了名字交上来,这样一来显然失去了实践的意义。如果不是对学生足够了解的话,光凭作业老师是无法判断出谁的水平高、谁又是不劳而获的。能力较强的学生觉得大家提交的作业一样,体现不出自己的优势,可能会打击到他们的积极性,也无法激发他们进行再创造的兴趣。能力稍差的学生则觉得不用付出多少劳动,却能得到差不多的成绩,那为何不继续偷懒下去呢?长此以往,他们的水平只会不进反退,得不到真正的锻炼。

由此,笔者想来,因为每次布置的实验内容都是一样的,对于水平不同的学生来说,显然这是不太合理的。要是照顾的大多数同学的情况,作业难度提不上去,难度大的话不少同学不会做,太简单的话对于一些水平高的学生来说又体现不出他们的实际能力。那可不可以将学生分成几部分,分层次让他们实践不同的实验内容呢?

2 实践改革初探,采用分级实践、分组合作

所谓分级,是将学生按照他们的学习实践能力分为几个等级,上机时可以选择难度不同的实践内容。例如分为三个等级:

1) 这类学生基础知识比较扎实,编程能力较强,自主学习能力强,一般可以快速完成老师分配给他们的任务。对于此类学生,老师可以根据他们的特长设计不同的实践课题,或是让学生自己设计感兴趣的实践内容,只要能充分利用编译的相关原理即可。在实践前期,老师和学生一起探讨实践课题的需求分析、框架设计等等,后期的具体实施则交由学生去完成。同时老师的考核方法也要做相应的调整,不能只看结果不看过程,因为选题难度较之前的加大,学生很有可能在有限时间内无法完成,这样也会产生畏难情绪。作为老师应该打消他们的后顾之忧,只要整个过程学生亲身参与了,付出了相应的劳动,那就应该得到最大的鼓励,评分还是应以中上等为主。具体评价的时候,可以参考实践内容有没有创新,跟现有的类似课题相比有没有改进的地方。这样一来肯定会极大的激发学生的积极性,愿意投入更多的精力到新课题的实施中去。

2) 对于前期课程没有学好,编程水平较差的学生,让他们独立完成一个稍大型的程序不太现实。那我们可以因材施教,让他们去阅读一些程序代码,分析代码的结构,所用到的算法,画出代码的流程图等等,即使没有亲自设计程序,也可以大致读懂程序,为后续的课程实践打下基础。另外也可以从词法分析器或语法分析器中提取出部分内容,让他们设计实现一些简单的函数。对于这部分学生,千万要防止他们出现自暴自弃的情绪,如果只是单纯靠抄袭其他同学的作业来交差,那他们在实践方面永远得不到提高,这对于他们找工作是极其不利的。

3) 此部分学生应该是班级中的大多数了,他们在平时的学习中按部就班,循规蹈矩,对于老师布置的一般任务基本可以独立完成或是少部分求助于其他同学,但基本缺乏创新意识,思考问题不够全面。对于此类学生,应该鼓励他们去实践一些有创新性的实践课题。摒弃以往单纯去实现词法分析、语法分析、语义分析的思路,可以分析设计基于某表达式的计算器,实现某编译的前端等等。从根本上对学生的实践内容进行改革,根据他们的个人能力来决定他们的实践题目。此类学生的考核可以从创新性、题目的难度及完成程度几方面去考察,既要让学生掌握编译原理的相关知识,又不能打击了他们的积极性,让他们对以后的课程实践都失去了兴趣。

还有一种实践模式,就是将好中差学生分在一组,根据实践的难易程度,大家量力而为,将实践内容分解为几部分,不同的学生完成不同的内容,最后大家提交一份完整的设计。这样的分组,有利有弊,利在可以培养学生的团队合作精神,集思广益,大家齐心去完成一个有难度、有创新的课题,考核时采用答辩的机制,每人阐述自己所完成的部分,既公平又使每人都得到了锻炼。不过此法的弊端也是存在的,那就是有的同学浑水摸鱼,什么都不做,最后直接把别人的成果拿为己用,这对于辛苦参与实践的同学是有失公允的。

3 对老师提出新的要求

基于因材施教的原则,在实践部分采取分级的方式是比较合理的一种方法,但同时也对老师提出了较高的要求。首先老师要对学生基本水平具有足够的了解,指导学生进行不同课题的选择,以体现他们的实际水平并激发他们的潜能。但在当前的教育模式下,要让老师认识每一个学生并掌握他们的学习情况基本上是不可能的事情,这就要依靠其他教师或辅导员的力量,争取让学生能选到合适自己的题目。

其次根据不同学生的水平设计不同的实践题目,需要老师对编译原理掌握的更为透彻,需要深入研究教学内容,了解学科的前沿动态,将新思想、新事物加在编译原理的实践当中,以提高学生的学习兴趣并设计出更适合、更能有效体现学生水准的题目。

4 结论

编译原理中LR分析的教学探讨 篇8

语法分析是编译程序的第二阶段,其实质是分析程序设计语言中由单词构成的句子是否正确。常见的分析句子的方法为:自上而下和自下而上两大类,其中自上而下分析法中以预测分析法(又称LL (1)分析法)最为典型;自下而上分析法分为算符优先分析法和LR分析法。算符优先分析法最大的优点是简单、直观且便于手工实现,但它仅适用于算符文法,有很大的局限性;LR分析法功能强大,它可以分析大多数用上下文无关文法描述的程序语言,并能准确的指出出错地点,但此方法有一定的复杂性,学生在学习此部分内容时感觉到很吃力。针对这一问题,本文将用一个实例,采用倒叙的方法逐一讲解LR分析法中的各种分析器以及它们之间的关系。

2、实例讲解

本文仍采用最常用到的四则运算的文法G:

从前面的学习可以知道,对于任何一种分析句子的方法,只要有了分析表,就可以用该分析表来分析句子。假定已有该文法的LR分析表如图1,那如何用该分析表来分析句子呢?参见文献[1],可以很容易的得到句子如i*i+i#的分析过程如图2。分析句子时仍采用文献[1]中的LR分析器模型(图略),为后面讲解方便,将读头下的符号看成"现实",已经进栈的符号看成"历史",栈顶句柄形成后可能遇到的符号看成"将来"。LR分析法不仅考虑了历史,看了现实,还展望了将来。

只要有了LR分析表,可以很容易的分析一个句子的正确性。如何来构造一个文法的LR分析表呢?这是我们要重点解决的问题。讲课时,可以先讲解此例,让学生先感受到LR分析表的强大功能,引起他们的学习兴趣,再来讲解它的构造。

3、LR分析表的构造

从LR分析表的状态和表头分析可知它的实质就是一个DFA(有限状态自动机),将每一个有归约动作的状态看成是DFA的终态,可以很容易的绘出DFA的状态转换图,可是它的每一个状态是怎么获得的呢?引入可归活前缀的概念。所谓活前缀是指规范句型的一个前缀,这种前缀不含句柄之后的任何符号,之所以称为活前缀,是因为在右边增添一些终结符号之后,就可以使它成为一个规范句型。对于一个文法G,首先构造一个NFA,它能识别文法G的所有活前缀。这个NFA的每个状态是一个LR (0)项目(它和活前缀一一对应)。为了让自动机有开始状态,需对文法G进行拓广,增加一个产生式E'E,由此产生式产生的两个项目分别是E'·E和E'E·。拓广后的四则运算的文法G的所有LR (0)项目如下:

将每一个项目看成自动机的一个终态,可以绘出识别该文法所有活前缀的NFA如图3,将NFA确定化后得到DFA如图4,此DFA又称为文法G的LR (0)项目集规范族,这是构造LR分析表的基础;但仅有LR (0)项目集规范族,我们仅得到LR (0)分析表(如图5),这张表几乎一点用也没有,它仅考虑了历史,没有考虑现实,也没有考虑将来,需要对此表进一步完善。



(注意:此状态转换图中的所有不能读入字符的状态是自动机的终态,确定化时可先画出它状态转换图来帮助理解。)

由于此分析表仅考虑了历史,归约时没有考虑到现实,而是面临所有的终结符归约,显然这是不合理的;如果归约时考虑点现实,即当读头是符号栈中句柄归约后的非终结符的随符,则分析表中面临此终结符号归约,其余终结符号不归约,经过这种规定后所得的分析表称为文法的SLR分析表。可以很快的求出文法G中每个非终结符的随符为:Follow (E')={#};

比较一下可以发现图5和图1是一样的。当一个文法的SLR分析表中无多重定义项时,该SLR分析表可能是该文法的LR分析表,可以用此表来分析句子。那当文法的SLR分析表中有多重定义项时,如何去求该文法的LR分析表呢?这就需要用到栈顶句柄形成后可能遇到的符号--"将来"。引入搜索符的概念,构造文法G的LR (1)项目集规范族,具体构造过程可参见文献[1],这里不再赘述。到此我们就讲完LR分析所有理论内容,最后再用一综合性例题将所有的理论内容串一遍,引入例题如下:

例题:设文法G为:S'A

1)构造文法的LR (0) 项目集规范族及相应的DFA。

2)如果把每一个LR (0) 项目看成一个状态,并从每一个形如B→α·Xβ的状态出发画一条标记为X的箭弧到状态B→αX·β,而且从每一个形如B→α·Aβ的状态出发画标记为ε的箭弧到所有形如A→·γ的状态。这样就得到了一个NFA。说明这个NFA与 (1) 中的DFA是等价的。

3)构造它的SLR分析表。

4) 构造它的LR (1) 分析表。

5)分别给出输入符号串abab#的SLR分析过程和LR (1) 分析过程。

这道例题将LR分析法的所有内容都包括了。讲授基本理论时,我们先讲了句子的分析过程,再一一讲解了分析句子时所用到的基本理论,做这道例题时是先做准备工作得到LR分析表,再来分析句子,这样一反一正的过程可以让学生很好的理解LR分析法。

4、结束语

LR分析法功能强大,它不仅可以分析句子,还可以构造词法分析表识别单词[2,3]。本文通过倒叙的讲解方法和综合性例题的小结,使得一个复杂的分析句子的算法变得简单而又通俗易懂,可以取得很好的教学效果。

摘要:以一个典型的四则运算的文法为例, 采用倒叙的讲解方法, 系统地介绍了使用LR分析表的构造过程和语法分析器的构造方法, 简化了编译程序的设计和构造。

关键词:编译程序,LR分析法,LR (0) 项目

参考文献

[1]陈火旺.程序设计语言编译原理「M」.北京国防工业出版社, 2000:98-123.

[2]温敬和, 庞艳霞, 王娜.使用LR分析表的词法分析器与分析表最小化[J].上海第二工业大学学报, 2007, 24 (3) :201-208

编译原理教学方法 篇9

《编译原理》是大学计算机专业本科教育的一门核心课程, 它涉及形式语言、程序设计语言、算法和数据结构、体系结构和软件工程等内容。学生通过该课程的学习, 除了应该掌握编译程序的工作原理和有关算法外, 还可以增进计算机科学基础理论知识, 进一步加深对数据结构和算法等课程的综合理解和灵活应用, 以及提高软件开发的能力。但是, 由于受到教学时数的限制, 要全方位地在这些方面去培养学生, 是相当困难的, 而是要根据教学对象以及对其专业能力的培养目标, 来确定课程的教学内容和相应的教学手段。我们认为:对于理科学生, 可偏重于理论研究能力的培养, 使学生掌握形式语言与自动机的基本理论和常见算法, 为从事计算机理论研究打下坚实的基础;而对于工科学生, 可偏重于软件开发能力的培养, 提高学生对数据结构和算法知识的综合应用能力, 以及程序编制能力。本文针对工科生的特点及其培养目标, 对《编译原理》课程的教学目标定位和教学方法进行一些分析和实践总结。

二、教学目标

《编译原理》课程的教学目标一般是使学生掌握形式语言和自动机的基本理论, 以及编译程序有关的算法和开发方法[1]。考虑到对工科学生的基本要求是能应用基本理论解决工程实际问题, 我们要求学生在能正确理解形式语言和自动机的基础理论基础上, 不仅能掌握其在程序设计语言翻译中的应用方法, 而且能灵活应用于解决计算机工程领域中其他有关问题, 例如:命令行处理器、用户界面等。我们向学生强调, 通过学习编译原理这门课程, 掌握编译程序的基本原理和有关算法只是一个方面, 另外一个很重要的方面是培养应用基本理论来解决实际问题的能力, 加强数据结构及其算法的综合应用能力, 以及提高编制大程序的能力。在教学内容安排上, 我们把重点放在词法分析、语法分析、语法制导翻译、符号表和中间代码生成上, 而对代码优化、目标代码生成、寄存器分配等内容只作概要性介绍。

三、教学方法

(一) 化抽象为具体

《编译原理》课程的内容非常抽象, 大多数学生在学习过程中, 会对其抽象的术语和符号、以及枯燥的形式化推导过程感到困惑, 并渐渐失去学习的兴趣和热情。如果能从具体的例子出发, 再抽象出基本概念, 就能使学生对抽象的概念有更深刻的理解。

例如, “LR (0) 分析”是《编译原理》课程中非常精彩的一节内容, 但由于涉及“活前缀”、“LR (0) 项目”等许多抽象的术语, 学生往往难以理解, 特别对“构造识别活前缀的有限自动机”的思想内涵的理解难以透彻。我们在讲解时, 不是直接给出这些术语的定义, 而是从一个LR分析的实例出发, 让学生观察LR分析过程中分析栈内容的变化及其特征, 引导学生发现“分析栈中的符号串有三种格局:不含有句柄的任何符号;含有句柄的部分符号;正好含有句柄的全部符号。”这时, 可向学生引入“活前缀”和“LR (0) 项目”等术语的含义:“活前缀”就是LR分析过程中分析栈中形成的一个符号串, 而“LR (0) 项目”就是刻画这个符号串的格局。最后给出“活前缀”和“LR (0) 项目”的形式化定义。这种讲法, 不仅可以使学生对这些抽象概念有具体的感性认识, 从而更容易地去理解相应的形式化定义, 而且可以培养学生逐步适应形式化描述。接着在讲解“构造识别活前缀的有限自动机”时, 先让学生回答“使用LR方法, 用给定的一个文法去分析一个符号串时, 会有哪些可能的LR (0) 项目出现, 并且这些LR (0) 项目是如何迁移的?”, 进一步启发学生:“一个文法的任何一个句型, 它的句柄只可能是这个文法的某个产生式的右部。”。这样, 学生就能较好地理解如何从一个文法求出它的所有LR (0) 项目及其迁移关系, 进而也能较好地掌握构造识别活前缀的有限自动机的方法。

(二) 开发和使用多媒体教学课件, 采取直观形象的教学方式

对《编译原理》课程中的一些抽象内容, 除了采用“化抽象为具体”的方法外, 我们还开发了一组多媒体教学课件, 用于动态演示一些较为复杂和难以理解的编译过程。例如, 在用属性文法描述一个语法制导翻译过程的教学中, 学生很难从一个给定的属性文法想象出一个具体的翻译过程。要让他们用一个属性文法来定义一个语法制导的翻译过程, 那就更难了。所以, 我们针对教材[2]中给出的每个程序结构的语法制导翻译过程的属性文法, 分别结合一个具体的例子制作了多媒体课件, 用于动态演示在语法制导翻译的每一步过程中, 是如何使用与产生式相关联的属性计算规则来进行翻译的。图1 (a) 是“控制语句中布尔表达式的翻译”的多媒体课件的一个画面, 它同时显示了某步翻译过程所依附的产生式、所使用的属性计算规则, 以及引起的符号栈和属性栈的相应变化和产生的翻译结果。通过使用这一多媒体课件, 学生对于属性文法的理解更加透彻了, 应用属性文法的兴趣和能力也有了很大的提高, 许多同学都在相关的实验中自觉地用上了属性文法, 获得了更好的实验效果。

我们还对教材中的某些算法的冗长文字描述, 制作了多媒体课件, 以更加直观、生动的方式表现这些内容。例如, 教材中有关利用DAG进行四元式优化的算法描述, 文字很长, 而且含有很多嵌套的选择结构, 在课堂上很难直接展现, 同学们在课后也没有很好的把它完整地看下来。所以, 我们将这段文字描述改成流程图的形式, 并结合具体的例子, 借助多媒体课件展现了动态的执行过程, 如图1 (b) 所示。

(三) 优化实验教学方案, 增强实验教学效果

实验课的教学目的主要有两个:一是巩固和强化主要的编译理论和方法;二是熟悉软件的开发方法, 提高软件开发的能力。为了取得较好的实验教学效果, 我们将实验教学分成两个阶段加以实施。

第一阶段以巩固主要的编译理论和方法为目的, 安排了词法分析、递归子程序法语法分析、LR (0) 法语法分析、以及语义分析和中间代码生成等四个实验, 并且与课堂理论教学保持同步。为了激发同学的学习兴趣和热情, 这四个实验的设计基于如下的原则:实验要编译的语言以小为宜, 但能体现编译原理的核心思想;编制实验程序不必从零开始, 但能涉及编译程序的关键代码。我们设计了图2所示的语言, 作为这四个实验所用的语言, 并给出了这个语言编译程序的框架, 但隐去了体现编译原理核心思想的关键代码, 要求学生在实验中将其编写完整。在对近几届学生的教学实践中, 我们发现这一阶段的实验教学方式能增强学生的学习兴趣和信心, 消除了许多学生在实验课初期对《编译原理》课程的恐惧感, 避免了学生在实验室无所适从、无从下手、在网上盲目搜索类似程序的状况出现。

第二阶段以加强编译原理和方法的综合应用能力和软件开发能力为目的。我们安排了两个综合实验:一是在第一阶段的语言中增加“*”、“/”两个运算符;二是增加一条“repeat...until”语句。这两个实验都要涉及扩充原有的文法、修改原先的词法分析程序、语法分析程序和语义分析程序。这就可提高学生对编译程序总体架构的认识和理解, 增强对编译原理和方法的综合应用能力, 对“增量式软件开发方法”形成一个初步的认识。

四、结语

本文是对上海市教委重点课程《编译原理》建设项目的部分工作成果的总结。近些年, 不少人对《编译原理》在计算机专业课程中的地位和作用有不同的看法, 认为绝大多数学生在大学毕业后, 很少有机会从事编译程序的研究和开发工作, 提出不将《编译原理》作为计算机专业的必修课程。我们认为, 《编译原理》集理论与实践于一身, 只要我们确立合理的教学目标, 采用有效的教学手段和方法, 它对于加强学生对基础理论的综合应用能力, 增强学生的软件开发能力是一把神兵利器。我们的教学实践印证了我们的观点, 近三年学生对我们开设的《编译原理》课程的评分分别为94.2, 95.1和97.4。

参考文献

[1]ACM/IEEE-CS.Computer Science Curriculum2008[R].http://www.acm.org/education/curricula/ComputerScience2008.pdf.

编译原理教学方法 篇10

编译原理课程是高校计算机类专业的重要必修课程。然而, 由于这门课程涉及其它多门课程的知识, 使得它成为一门难学又难教的课程。同时, 目前的编译原理教学存在一些问题, 如教学内容追求大而全, 重点、难点不分, 在相关课程纷纷引入面向对象语言时, 仍在使用面向过程语言讲授算法;理论不能联系实际, 课堂教学与实践环节脱节;教学方法仍采用传统的注入式, 难以引起学生的兴趣;教学手段仍以多媒体课件为主, 缺乏相应的网络资源等, 使得编译原理的教学更是困难重重。因而, 对其进行教学改革是一项重要而迫切的任务。

1. 以人为本的教学理念是教学改革的核心和灵魂

教学改革要顺利完成, 首先要创新教育理念, 只有树立了正确的教育理念才能用它指导实践, 才能创新教育方法。因而, 教学理念上, 要坚持科学发展观, 贯彻以人为本, 真正做到教育以育人为本, 以学生为主体, 办学以人才为本, 以教师为主体, 树立教师的服务意识。

2. 以人为本的教学设计是教学改革的关键和保障

贯彻以人为本, 教师必须树立服务意识。为了更好地服务于教育, 教师首先要提高自身的综合素质, 要选好工具, 更要熟练而灵活地运用工具。

2.1 高素质的教师队伍是教学改革的关键

邓小平同志讲, 提高教育质量"关键在教师", 高素质的人才培养离不开高素质的教师队伍, 从这一理念出发, 造就一支高素质的教师队伍是深化教学改革的关键所在。高素质的教师队伍, 应有两方面的规定:从教育目标看, 实施素质教育, 要求教师具有良好的综合素质, 即思想道德素质、文化素质、业务素质、心理素质, 才能为人师表;从现代科学技术知识的传承看, 教师应是学术型, 应有理论修养和学术创建, 才能成为先进知识的弘扬者和推动者。编译原理这门课程涉及的知识面较广, 虽然主要介绍的是程序设计语言如何编译成汇编语言或机器语言, 但需要有"程序设计语言"、"数据结构"、"离散数学"和"汇编语言"等前驱课程的积累。作为授课教师, 除"编译原理"课程本身外, 还要全面掌握上述这些课程的知识。尤其是对于"程序设计语言"和"汇编语言"这两门课程要有一定的教学经历, 在自己所涉及的学科领域中要花大功夫要有自己的见解, 要有自己的论文。在一定知识积累的基础上这样才能把握好"编译原理"这门课程的教学。

2.2 精品教材是教学改革的重要保障

教材是教师进行课堂教学的基本工具, 选择合适的教材是进行教学的第一步, 是提升教学质量的重要保障。现有的编译原理教材不同程度的存在这样那样的问题, 有的是内容陈旧, 重复严重;有的是体系老化;有的是形式翻版, 大同小异, 没有自身的特点, 甚至越编越厚, 与教学时数越来越少的现状形成尖锐的矛盾。因而, 在教材的选择上, 教师要注重教材的适用性, 注重对学生进行素质与思维能力、创新能力的培养, 为学生选择适用性、明晰性、可读性强的教材。例如, 有些国外经典编译原理教材, 如《Compilers:Principle, Techniques, and Tools》一书, 该书已由李建中和姜守旭老师翻译成中文, 作为这门学科的大全, 可能更适合作为教师的教学参考用书, 而不是学生的学习用书。再如, 有些国内经典教材, 如陈火旺院士编写的《程序设计语言编译原理》和吕映芝教授编写的《编译原理》, 内容较多, 理论较深, 能满足高层次学生的求知欲, 作为普通本科生的教材, 偏难而且偏全。笔者更偏重于温敬和老师编写的《编译原理实用教程》, 该书内容全面, 实践性强, 降低了学习难度, 强化了理解的深度, 而且, 对于书中每一章的原理, 作者都用面向对象语言C++将其相应的算法实现, 很适合作为本科生教材。其次, 教师应当选择或制作和文字教材配套的电子教材, 如电子教案、教学网站、教学辅助软件、网络资源等, 给学生创造一个站全方位、多视角的教学环境。

2.3 备课是二者的有机结合

教师和教材对于教学是十分必要的, 然而, 如何将二者结合并使之更好地服务于教学显得更为重要。备课无疑是教师和教材的有机结合。师者知在先, 备课过程中, 教师不但要准确掌握所用教材的重点、难点、特点问题, 做到"知其然", 更要大量阅读相关文献, 做到"知其所以然"。进一步, 教师还要善于对教材内容进行高度提炼, 达到"去粗取精"的目的, 对于一些学生容易理解的基础知识, 要善于引导学生自学, 培养学生的自学能力, 在有限的课堂教学中, 主要讲授学生难以理解的重点、难点, 要给学生讲通讲透。备课是一项艰辛的劳动, 教师需要学习教育理论、钻研教材、设计教学教法、开发教学资源、考虑学生的学习能力, 经过深入思考, 将它们糅合在一起, 并条理化, 才能在授课时达到预期教学目标和获得理想教学效果。备课同时也是无止境的, 每一轮教学活动完成后, 都会有一些新的问题、新的收获, 需要作进一步的思考、完善。

3. 以人为本的教学方法是教学改革的有效途径

陶行知先生曾说过"教什么和怎么教, 决不是凌空可以规定的, 他们都包含人的问题, 人不同, 则教的东西、教的方法、教的份量、教的次序都跟着不同了。"改革中的编译原理教学, 基本做到了统一大纲、统一教材、统一进度, 而唯独教学方法不能千篇一律。以人为本, 教学就应理论联系实际、传统与现代相结合、因人而异、因材施教来激发学生的学习兴趣, 这也正是教学"无定法"的道理。

3.1 因材施教

课堂教学要因材施教。编译原理课程有研究生专业课、本科课、大专课, 对象有差别, 层次有高低, 知识结构不同, 这一特点决定教学内容要有取舍, 教学方法要有区别, 不能一成不变。课堂教学中, 要考虑到大多数学生学习的现况, 教材中易于理解的基础知识的对本科生就不必过多介绍, 相对地, 由于高职学院、独立学院的学生起点低, 教学中应更多地侧重于讲授编译原理的基本概念、基本知识, 让绝大多数学生了解编译原理的基本思想, 掌握常用的编译技术。同样, 不同层次的对象在实践教学、期末考试等环节也必须区别对待。教学实践证明, 课堂教学的实效性取决于教学的针对性。

3.2 激发兴趣

爱因斯坦曾说过"兴趣是最好的老师。"以人为本, 在教学过程中就要善于交叉运用多种教学方法, 激发学生的兴趣。讲课是一门艺术, 在教学过程中, 具体采用哪种教学方法, 要根据课型和教学内容的不同灵活运用。

启发式教学是现代教学中先进的教学模式之一, 它把学生真正置于主动者位置, 它的成功运用可以充分调动学生的学习积极性, 激发学生的学习兴趣, 是学生从"要我学"到"我要学"的转变的重要途径。对于编译原理中的基础知识, 教师要善于运用各种启发式教学法, 引导学生自主快速学习。例如, 初学《编译原理》, 很多同学不明白为什么编译过程要分为词法分析、语法分析、语义分析几个过程, 这时教师可以找个英文句子"the big elephant ate a banana"来做个类比启发。再如, 在讲授LR分析法时, 引入了短语、直接短语、句柄等概念, 同学们感到很难理解, 这时, 教师可以运用直观启发法画一棵语法树来表示一个句型, 则句型中的短语、直接短语、句柄一目了然。

案例式教学是指从典型事例的分析评价中, 加深对所学理论的理解, 提高运用该理论能力的教学模式。编译原理中的难点、重点通常以理论性、抽象性、枯燥性为特征, 而案例式教学具有实践性、形象性、生动性的特征, 恰好可以弥补其不足, 从而调动学生的兴趣, 使学生在分析案例、得出结论的过程中培养了创新能力。例如, 自下而上的语法分析由于理论性强, 学生难以理解, 教师可以设计一个案例:已知一个二义文法G:E->E+E|E*E (E) |i, 构造一个等价的无二义文法G', 让同学们分别比较 (1) *优先于+且同级运算服从左结合 (2) +优先于*且同级运算服从左结合 (3) *优先于+且同级运算服从右结合 (4) +优先于*且同级运算服从右结合, 从而得到不同得文法G', 如对于 (1) 得到文法E->E+T|T, T->T*F|F, F-> (E) |i, 而对于 (2) 得到文法E->E*T|T, T->T+F|F, F-> (E) |i, (3) 和 (4) 的结论依次类推。通过分析案例, 同学们不仅深刻地理解了运算符的优先性和结合性, 也明白了自下而上的语法分析。

3.3 理论联系实际

编译原理是一门实践性很强的课程, 它不仅有完整的理论体系, 还有十分实用的编译技术。实验环节是理论联系实际的重要环节, 加强实验环节的教学不仅可以加深对编译理论的理解, 还可以从整体上提高编译原理课程的教学质量。传统的《编译原理》教学模式是先理论后实验, 理论课枯燥, 实验课乏味, 结果是理论没学好, 实验做了没效果, 很难落实对学生的能力培养。为了改变这种被动教学局面, 可以设计了一个全新的教学思路, 即实验-理论-再实验的教学模式, 各单元的教学, 以基本实验开始, 以综合实验结束, 在实验中学理论, 在理论指导下完成实验, 以实验来加深对理论的理解。教师可以将编译过程拆开, 按照词法分析、语法分析、语义分析、目标代码生成的顺序分阶段进行实验, 为了降低难度, 教师可以提供部分源程序, 让学生补充重点部分, 特别是在目标代码生成阶段, 可以向学生提供一个高级语言实现的虚拟裸机, 将与编译无关的一些硬件特性屏蔽掉, 用户用汇编语言编写程序, 由汇编程序将它翻译成机器指令程序, 该机器指令程序可以在虚拟裸机上运行, 这样就形成了一个微型编译系统。

3.4 传统与现代相结合

目前, 面向对象语言已经成了高校计算机教学的主流语言, 但编译原理课程却没有及时跟进, 讲授算法仍然是基于过程式语言, 这种状态严重地脱离了计算机技术的发展和社会的实际需要, 因此需要改进教学方法, 在讲授传统理论时, 用面向对象语言来描述编译算法。

4. 良好的课堂氛围是教学改革的坚实基础

良好的课堂氛围是保证授课效果的基础, 学生是课堂学习的主体, 如果没有学生的主动投入, 课堂氛围就难以保证, 教学效果就无从谈起, 因此教师要掌握好学生的心理特点和学习状态, 有针对性的进行指导、启发、激励, 从而调动学生的学习积极性, 使学生进入学习状态, 与教师形成主动"互动", 以保证良好的授课效果。

4.1 教育从秩序开始

良好的课堂秩序是教师完成教学计划, 讲授教学内容, 确保教学质量的重要前提。教师在课堂上的第一件事就是给学生提出具体的课堂纪律要求, 目的在于营造一个良好的教学环境, 使学校的规章制度落到实处, 使学生由被纪律约束到自觉地维护秩序。一位教育家曾指出, 如果没有威信, 那就是说师生之间没有正确的相互关系, 就减少了有效地进行教学和教育工作的必要条件。

4.2 师生间情感的交融

课堂教学的严肃性, 不排斥情感性。课堂上的不良现象不能姑息迁就, 放任自流, 应严格要求, 以保证教学计划的实施, 同时, 也要明确学生的主体地位, 给予尊重和理解, 用爱去感染熏陶学生的灵魂, 使其"亲其师, 信其道", 在课堂上构成师生间的对话, 激发出创造力, 以便在"熟知并非真知"的常态中获得新的突破。

5. 结论

总之, 要积极推进编译原理课程的教学改革, 就必须在教学的各个环节贯彻以人为本, 办学以教师为主导, 树立较强的服务意识, 采用多种方式调动学生的主观能动性;教育以学生为主体, 使学生具备扎实的理论功底以及较强的实践能力, 真正地提高课程教学质量。

摘要:《编译原理》是计算机专业的一门核心课程, 对其进行教学改革是一项重要而迫切的任务, 本文在分析教学现状的基础上, 找出存在的问题, 并提出改革的思路和方法。

关键词:编译原理,教学改革,以人为本

参考文献

[1].温敬和.编译原理实用教程[M].北京:清华大学出版社, 2005.

[2].吕映芝, 张素琴, 蒋维杜.编译原理[M].北京:清华大学出版社, 1998.

[3].余玛俐, 张海.编译原理教学方法探析[J].九江学院学报 (自然科学版) , 2005, (4) .

[4].姚雪梅.编译原理课程的教学探索[J].重庆交通学院学报 (社科版) , 2003, (6) .

上一篇:水资源脱钩指数下一篇:侵彻仿真