编译原理课程

2024-06-15

编译原理课程(精选10篇)

1.编译原理课程 篇一

编译原理实践课程

编译原理课程是计算机专业必修的一门重要的专业基础课程,也是计算机系统软件中非常重要的一个分支,经过多年建设取得了丰硕的教学成果:2003年被评为“吉林大学百门精品课程”之一,2004年被评为吉林省精品课程,2006年被评为教育部—微软精品课程。编译原理实践课程建设作为新世纪教学改革重点项目和编译原理精品课程建设的一个重要组成部分,在教材建设、教学内容和教学方法的改革等方面也取得了较突出的成绩,并发表了多篇学术论文。

一、实验课程目的

编译原理课程是计算机科学与技术专业学生的专业骨干课之一。通过学习这门课程,使学生掌握编译程序的基本原理、方法和实现技术,使学生更好的理解程序语言的内部机制,培养学生初步掌握设计大型系统软件的方法、技术以及设计大型软件的能力。

编译原理实践性教学的设计思想是使学生透彻的理解编译程序的原理和思想,系统全面的掌握编译技术,使学生通过课堂学习,理解编译原理的同时,注重学生实践能力的培养,进一步巩固对知识的理解,通过实际的锻炼,掌握编译技术,进而能够独立的进行编译器的设计。

二、实验内容及要求

编译程序不同于一般的应用程序,是一个十分庞大和复杂的系统软件。一般的应用程序是以数据作为操作对象,而编译程序则是以程序作为操作对象,是一个元级处理程序,它所包含的算法和思想比较特殊,理论性较强,抽象度也较高,因而编译原理课程一直以来都是计算机专业学生比较难于理解和掌握的一门课程。为此我们开设编译原理实践课程。编译原理实践课程的主要实践题目有:

实验一: 词法分析程序开发

实验要求: 1.掌握词法分析程序自动生成工具LEX的使用。

2.掌握各类单词的形式描述。

3.学会用数据中心法实现有限自动机。4.学会用直接转向法实现有限自动机。5.独立完成SNL语言的词法分析器。

实验二: 递归下降语法分析

实验要求: 1.理解递归下降语法分析方法的主要原理。

2.理解递归下降分析法对文法的要求。

3.熟练掌握Predict集合的求法。

4.熟练掌握文法变换算法(消除左递归和消除公共前缀)。实验三: LL(1)语法分析

实验要求: 1.理解LL(1)分析法的主要原理。

2.理解LL(1)分析法对文法的要求。

3.熟练掌握Predict集合的求法。

4.通过编程熟练掌握LL(1)分析法的工作过程。实验四: 符号表管理

实验要求: 1.了解符号表在编译过程中的重要作用。

2.掌握符号表应包含的符号的属性信息。3.了解符号表的组织原则。4.掌握符号表的操作。

5.掌握符号表的可见性问题。

实验五: 语义检查

实验要求: 1.了解语义检查是语义分析的一个重要内容。

2.掌握语义检查的一般内容。

3.学会在语法分析的同时进行语义检查。4.学会将语义分析作为一遍独立的扫描。

实验六: 中间代码生成

实验要求: 1.了解中间代码生成是为优化和移植而进行的。

2.了解几种常见中间代码表示形式掌握符号表应包含的符号的属性信息。

3.会用简单的程序实现中缀式到后缀式的转换。4.会用栈实现复杂表达式的求值。

5.掌握常见程序结构的中间代码结构。

6.掌握由语法树到四元式中间代码的转换方法。

实验七: 中间代码优化

实验要求: 1.能够对中间代码正确划分基本块。

2.理解常量表达式局部优化算法。

3.理解公共表达式局部优化算法。

4.理解循环不变式外提优化算法。实验八: 目标程序生成

实验要求: 1.熟练掌握虚拟机的指令系统。

2.理解并掌握指令选择的方法。

3.理解多寄存器分配的原则和方法。

4.熟练掌握基本语句从四元式中间代码形式到目标代码的翻译原理和方法。

5.独立完成目标代码生成程序。

三、实验教学过程及教学手段

教学过程:

经过近三年的研究、探索与实践,我们在编译原理实践课程的建设方面取得了一定成效。在吉林大学计算机学院首次开设了编译原理实践课程,该课程以学生实际上机实习为主,教师指导为辅,强调启发式教学,注重学生自学能力的培养。学生在实践课程中,通过实际动手编程,将抽象的编译理论知识具体化和形象化,加深了对基本概念和方法的理解和运用,从而全面系统地掌握了编译器的构造过程。

该课程采用教研室自编实践教材《编译程序设计与实现》(高等教育出版社)作为辅导教材,通过对教材中提供的编译实例的透彻解析,加深了学生对编译程序的直观认识,提高了学生对源程序的分析和设计能力。同时,对学生学习、理解和掌握编译原理理论课程也有很大的促进作用。在课程中,学生通过亲自动手实践,把原理性的抽象理论知识具体化和形象化,消化了课堂上、书本中难于理解的概念和方法,全面系统的掌握了编译器的构造过程,激发了学生的学习兴趣,培养了学生进行更深入学习的主动性。在教学方法上,结合多媒体课件,强调启发式教学,培养学生的创新能力和动手实践能力。实践证明,这些教学方式的尝试在实际教学中取得了良好的教学效果。

教学环境:

拥有良好的实践教学环境,已建成3个大型网络化、多媒体微机实验室,共有800台奔IV微机,32台服务器,实验室面积为2040平方米,完全能够满足教学实践要求,通过开放式的实践教学,收到了良好的教学效果。除实践课程中规定的实验之外,还设计了一些难度较大的选作实验题目,激发学生的能动性,提高学生分析问题、解决问题的能力。教学手段:

1.多媒体辅助教学软件-PCMCAI(Principle of Compile Multimedia CAI)在教学过程中,我们发现由于编译原理理论性强,抽象度高,学生不易于理解。针对这一情况,我们研制了编译原理多媒体辅助教学软件-PCMCAI(Principle of Compile Multimedia CAI),该软件以多媒体动画的形式生动形象地描述了编译器的各个阶段的工作过程。借助现代化的教学手段和工具,将抽象的知识具体化,便于学生理解复杂的原理,极大地调动了学生的学习积极性,学习效果有了明显的提高;

2.编译实例库

我们完成了编译实例库的构建,建立实例库的目的是使学生通过编译实例库,可以了解和掌握不同类型语言的编译原理和构造技术,培养学生的主动参与、自主思考和创新能力,扩大学生的知识面。通过实践课程,我们总结和综合了学生中优秀的设计实例,同时,广泛的收集当前国内外最新的素材资料,对编译实例库不断地进行完善。目前,实例库已经初具规模并投入使用,为学生提供了广泛的实践素材和范例,在教学过程中作为一种辅助教学手段,效果良好。

3.网络教学平台:http://softlab.jlu.edu.cn 针对目前学生人数增多,教学资源不足,学生质量参差不齐,教学质量和效率得不到保证的情况,我们充分利用Internet,建立和实施网络课程体系,利用Internet在信息制造、贮存和递送方面的优势,克服资源不足的缺点,同时也为学生提供了完全个性化的学习环境,发挥网络教学优势。目前我们已经开始了这方面的建设,完成了编译原理实例库、课件、习题库等方面的建设,构建了网络课程的框架体系,目前正着手网络课程的进一步完善工作。

四、教材及课件

教材建设:

1.校内教材:《一个教学语言TINY的编译程序教学实例分析教材》(2001年6月)。2.校内教材:《编译程序构造原理与实例分析》(2003年2月)。3.编译原理实践教材:《编译程序的设计与实现》(高等教育出版社,2004年7月)。

教学软件:

1.多媒体辅助教学软件-PCMCAI(Principle of Compile Multimedia CAI)。2.SNL(Small Nested Language)语言实例设计及其编译器构造。3.编译原理实例库(C语言版本)。4.编译原理实例库(Java语言版本)。

五、相关成果

发表论文:

1.《编译原理实践课程设计的探索》,刘磊等,吉林大学新世纪教学改革项目研究成果----创新、改革与实践 第一集 吉林大学出版社。2.《用递归下降方法实现自底向上的分析》,刘磊等,吉林大学学报(信息科学版),2004(3)。

3.《编译原理多媒体辅助教学软件的设计与实现》,刘磊等,吉林大学自然科学学报,2002(2)。

4.《测试语言ATLAS的实现技术》,刘磊等,仪器仪表学报,2004(4)。5.《ATLAS_MPS的设计与实现》,刘磊等,吉林大学学报,2004(4)。6.《编译原理实践课程教学方法研究》,张晶等,全国首届计算机程序设计类课程教学研讨会,2005(9)。7.《“编译原理”课程建设研究》,刘磊等,计算机教育,2006(6)。获得奖励:

1.2004年,《编译原理实践课程建设》,吉林大学教学成果二等奖。2.2006年,《编译程序的设计与实现》一书获吉林大学本科优秀教材。3.2002年,编译原理CAI课件-PCMCAI获被吉林省教育厅评为二等奖,并在第六届全国多媒体教育软件大奖赛上获得优秀奖。

4.《编译原理》课程先后被评为吉林大学精品课程、吉林省精品课程及教育部-微软精品课程。

总之,经过多年的研究、探索与实践,我们在编译原理实践课程的建设方面取得了一定成效。在吉林大学计算机学院首次开设了编译原理实践课程,该课程以学生实际上机实习为主,教师指导为辅,强调启发式教学,注重学生自学能力的培养。学生在实践课程中,通过实际动手编程,将抽象的编译理论知识具体化和形象化,加深了对基本概念和方法的理解和运用,从而全面系统地掌握了编译器的构造过程。该课程采用我们自编实践教材《编译程序设计与实现》作为辅导教材,通过对教材中提供的编译实例的透彻解析,加深了学生对编译程序的直观认识,提高了学生对源程序的分析和设计能力。同时,对学生学习、理解和掌握编译原理理论课程也有很大的促进作用。在教学方法上,结合多媒体课件,强调启发式教学,培养学生的创新能力和动手实践能力。实践证明,这些教学方式的尝试在实际教学中取得了良好的教学效果。

附件(获得奖励证书)

2.编译原理课程 篇二

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

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

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) .

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.《编译原理》课程设计教学大纲 篇四

揭金良 2006.10.20 1 目的

通过课程设计,将《编译原理》的相关理论和技术运用到软件开发中,提高学生的应用程序设计能力,提高分析问题、解决问题的能力。内容

利用编译原理的某种思想或方法,设计一个应用程序,实现的具体内容自拟(见下面的选题指导)。要求

进行简单的需求分析、设计说明,写出程序结构框架,阐明设计思路、用到的原理和方法。程序规模适中,着重于内核功能。估计时间

总共时间2.5周(150学时),其中:1.讲课2学时;2.上机48学时调试;3.其余非上机时间由同学自行安排分析、检查问题、绘制流程图、写相关文档,最后集成设计(实验)报告并自行打印。过程指导

5.1 选题

通过平时积累,找到适合于自己的应用或某种软件功能,该应用能利用编译原理中的某些理论。题目大小适中。参考题目如下: 表达式计算器

表达式计算器:这是一款算术表达式计算程序,通过输入表达式达到计算的目的,可代替目前普遍使用的计算器。使用了编译原理中的词法分析、算符优先分析等。根据功能的不同可分为:

⑴无符号整数表达式计算器:输入无符号整数表达式,输出结果。难度:较难。工作量:中等。

 整数表达式计算器:考虑负数。难度:较难。工作量:中等。 定点实数表达式计算器:难度:较难。工作量:中等。

 通用表达式计算器:考虑1.23e-2的形式输入。难度:难。工作量:中等。⑵函数表达式计算程序:这是一款能计算函数值的实用程序,输入含有自变量x的函数表达式被接受后,可接着输入自变量x的值,输出函数值y的值。使用了词法分析、算符优先分析。根据功能的不同可以分为:

 多项式函数计算程序:只处理多项式函数,如f(x)=x^3+x^2+5等。难度:较难。也可设计成其他专用函数计算程序,如幂函数计算、三角函数计算等。但要避免出现不同用,如不要设计成仅能处理f(x)=2^x的幂函数,因为这样的函数利用普通编程就能实现,无法体现编译原理。工作量:中等。

 通用初等函数计算程序:能处理所有的初等函数的计算。如f(x)=3*sin(x/2+3.1415)+x^2等。难度:难(因为涉及到函数名称和参数的识别问题)。工作量:较大。

 二元或多元函数的计算:如f(x,y)=x^2+y^2等。难度和工作量同一元函数的计算。⑶逻辑运算分析:输入逻辑表达式串,对表达式进行分析,并得出结果。难度:较难。2 字符串搜索程序

输入要查找的字符串的正规表达式,软件可在大量文本(要求不低于3000字符的文档资料文件)中找到符合描述的字符串。这个设计可参考微软.NET的正规表达式的功能。

⑴字符串搜索程序:使用到正规式、词法分析等,还需要有较大的设计技巧。根据功能的不同可以分为:

 名称查找程序(类似于文件名):存有大量的名称,如abc,123,a1,ab1245等,输入要查找的规则,找出符合规则的名称。

 方案1:通配符,把“*、?”当作通配符:如输入“a*”,显示“abc,a1,ab1245”;输入“a?”,输出“a1”。

 方案2:正规式,把“*”当作“闭包”,把“|”当作“或”:如输入“(a|b)1”,输出“a1”;输入“(a|b)*c”,输出“abc”。

 方案3:只要包含正规式即可,当名称中包含该正规式,就输出来:如输入“(a|b)1”,输出“a1,ab1245(含有b1)”;输入“(a|b)*”,输出“abc,a1,ab1245”。

 方案4:含有通配符的正规式,设“@”表示任意字母,“$”表示任意数字(其他可再设多一点,如表示符号等,但会减少名称中的符号种数):如输入“a@*” 输出“abc”;输入“a(@|$)*”,输出“abc,a1,ab1245”。

(以上涉及到正规式的方案难度较大,其他难度一般。注:以上的@$等符号是随便设定的,与.NET中通用的符号不同且有冲突的,请在实际编程时修改它。)

 文本搜索程序:在一连串文本中搜索所需的字符串。同“名称查找程序”中的有关正规式的方案,难度较大,具体正规式包含哪些符号和通配符可另定。

(关于正则表达式的介绍参见另一文档,详细信息见.NET框架联机文档)3 逻辑运算分析

可对关系表达式进行分析,并得出结果。这个设计结果可改变后用于电路分析、谓词演算等。源程序扫描程序

对某种高级语言的源程序进行分析,建立符号表,找出尽可能多的问题并输出相关的出错信息。转义符的识别

C语言的字符串常量书写时使用了大量的转义符,如“”表示单斜杠,而“n”表示换行(同“u000A”),“x20”表示十六进制表示形式(恰好两位)与 ASCII 字符匹配(这里代表值为32的ASCII字符,即空格)。请参照C语言教材,编制一个软件,输入包含转义符的字符串,输出没有转义符的真实字符串。难度:一般。工作量:一般。有限自动机的运行

设计一个确定的有限自动机,写出状态转换函数,或画出状态图,编制程序,输入一个字符串,程序能判别该字符串是否能被该有限自动机接受,可以考虑输出能否接受的同时,输出状态路径。难度:一般。

⑴整数的判断:写出整数的正规式,画出状态图,写出状态转换函数。编出程序。难度:简单。

⑵同上的过程还可以进行:正偶数的判断、自然数的判断、定点数的判断等。⑶实数的判断:过程同上。难度:一般。7 编写一个语法分析程序

编写一个语法分析程序,对输入到缓冲区的符号进行分析,建立相应的语法树,并输出相应的语法树。编写一个代码生成程序

编写一个代码生成程序,形成三地址程序并输出到文件中,打印三地址程序。9 学习使用LEX和YACC工具

LEX和YACC分别是生成词法分析程序和语法分析程序的工具,即编译程序的编译程序。其功能非常强大,可用于任何语言的分析。

学习使用LEX和YACC工具并编写相应程序。请参考有关文档资料。

5.2 分析

选好题目后,分析该题目的应用性,可用到编译原理的哪些理论?对它们进行简单阐述。同时对软件进行需求分析,通过回答下面问题得到:

1.软件提供哪些功能?软件有什么用?界面怎样?怎样使用该软件?对输入数据的格式有什么要求?用什么语言开发?怎样测试该软件?该软件开发的进度如何安排?

2.写出以上问题的答案,然后自问:你的分析材料别人能非常清楚地看懂吗?如果回答是肯定的,就可以搞设计了。

5.3 设计

对软件划分功能模块,将模块细化,设计出数据存放格式,写出各模块(函数)的功能、传递参数的格式和返回值的类型,画出模块结构图。最后画出较详细的程序流程图。

5.4上机

按课表的安排上机(修改设计/编码/调试/测试)。

1.根据流程图编制并输入代码,教师查看学生的设计,对设计提出修改意见。2.修改设计,继续完成输入代码,并作初步调试。3.调试,教师帮助解决学生设计和调试中出现的难题。4.修改设计中的缺陷,完善程序。„„

演示软件,教师根据实际情况提出测试用例,学生作最后的修改和完善,教师评分。继续完善程序,并完成设计说明书,上交成果。

5.5 注意事项

测试数据的设计:每组测试数据包括输入数据、预期的输出结果、实际的输出结果和预期的是否相吻合(如果不吻合,实际输出什么?可能错误的原因?检查源代码或设计进行查错,纪录结果)。上交文档

1.程序源代码(打印,文件名中包含姓名);

2.一组较完备的测试数据(存在一个文本文件中);

3.设计报告:有关的文档资料,包括:选题报告,简单的软件需求分析说明书,软件设计说明,设计经验总结。其中设计经验总结可以包括下列方面:你在编程过程中花时多少?多少时间在纸上设计?多少时间上机输入和调试?多少时间在思考问题?遇到了哪些难题?你是怎么克服的?你对你的软件如何评价?你的收获有哪些? 评分

教师对每个实验结果进行评分(优、良、中、及格、不及格),记入成绩。以下几方面可以提高分数: 7.1 软件实用性强;

7.2 软件使用了编译原理中的某些理论; 7.3 软件具有扩展性; 7.4 各类文档写的很规范;

5.编译原理课程 篇五

《编译原理》课程设计

1.要求

完成一个简化C语言——TINY C语言的编译程序,最终能为用TINY C语言编写的源程序(后缀为.tny,已给sample.tny,用一般的文本编辑程序即可打开)生成目标代码,并在给定的虚拟机TM上运行得到运行结果。

TINY C语言中允许出现的字词:  整数、标识符;

 算术运算符/关系运算符/赋值运算符/界符:+、-、*、/、=、<、:=、;、{、}、(、) 其它保留字:IF THEN ELSE END REPEAT UNTIL READ WRITE TINY C语言中允许出现的语法单位

 表达式:简单整型算术表达式、关系表达式  语句:

 条件语句(IF THEN ELSE END) 循环语句(REPEAT UNTIL) 赋值语句(:=) 读写语句(READ WRITE) { }中可以有注释,但不能嵌套

2.步骤

1)、词法分析

2)、语法分析

3)、语义分析

4)、生成目标代码

3.源码构成

 MAIN.C 主程序

 GLOBALS.H 全局类型及变量(如Token类属及语法树结点的组成) UTIL.H、UTIL.C 各步骤的实用函数。如输出Token,生成语法树结点等  SCAN.C、SCAN.H 词法分析程序及其头文件  PARSE.C、PARSE.H 语法分析程序及其头文件  ANALYZE.C、ANALYZE.H 语义检查程序及其头文件  SYMTAB.C、SYMTAB.H 符号表生成程序及其头文件

 CGEN.H、CGEN.C、CODE.C、CODE.H 目标代码生成程序及其头文件

《编译原理》课程设计

 TM 编译sample.tny源程序后得到目标代码,在该虚拟机上运行得到结果

步骤1——词法分析

要求:填写getToken()函数,完成词法分析器scan.c。约定:

 仅允许整数类型,不允许实数类型

 标识符由大小写英文字母组成,最多52个。其识别按最长匹配原则  整数后紧跟非数字,或标识符后紧跟非字母认为是一个新Token开始  由{ }括起来符号串都认为是注释部分,该部分在词法分析时被过滤掉

 识别出的Token由两个变量:currentToken,tokenString识别,其中currentToken代表Token的类属,为一个名为TokenType的枚举类型,在文件globals.h中定义;tokenString代表Token在程序中出现的形式,即其本来面目。例如整数10的currentToken值为NUM,而tokenString值为‘10’;标识符i的currentToken值为ID,而tokenString值为‘i’

typedef enum

{ ENDFILE,ERROR,IF,THEN,ELSE,END,REPEAT,UNTIL,READ,WRITE,/* 保留字 */

ID,NUM, ASSIGN,EQ,LT,PLUS,MINUS,TIMES,OVER,LPAREN,RPAREN,SEMI :=

= <

+

*

/

()

;

} TokenType;

画识别符合TINY C语言构词规则的DFA。然后用直接编码的方法构造词法分析器

/****************************************************/ /* File: scan.c

*/ /* The scanner implementation for the TINY compiler

*/ /****************************************************/ #include “globals.h”

#include “util.h”

#include “scan.h”

typedef enum

{ START, INASSIGN, INCOMMENT, INNUM, INID, DONE } StateType;

《编译原理》课程设计

char tokenString[MAXTOKENLEN+1];static int getNextChar(void)

//获得下一字符 {实现请自己看scan.c文件} static void ungetNextChar(void)

//用于回吐字符 {实现请自己看scan.c文件}

static struct

{ char* str;

TokenType tok;

} reservedWords[MAXRESERVED]

= {{“if”,IF},{“then”,THEN},{“else”,ELSE},{“end”,END},{“repeat”,REPEAT},{“until”,UNTIL},{“read”,READ},{“write”,WRITE}};

//定义保留字表

static TokenType reservedLookup(char * s)

//进行保留字的匹配 {实现请自己看scan.c文件}

/**********************************************/ /* the primary function of the scanner

*/ /* function getToken returns the next token in source file */ /**********************************************/ TokenType getToken(void){ int tokenStringIndex = 0;

TokenType currentToken;

//保存被识别Token的类属

StateType state = START;

//初始状态为START

int save;

//标识当前字符是否保存,如空格,换行符n、TAB符t及注释中的任何字符

while(state!= DONE)

//DONE状态表示已识别出一个Token

{ int c = getNextChar();

save = TRUE;

switch(state)

{ case START:

if(isdigit(c))

state = INNUM;

else if …… //此处请自己填写(字符、:、空格/tab/换行、{、算符及界符等)

break;

case INCOMMENT:

…//此处请自己填写,仅出现‘}’或EOF(注释未完结束程序)时才改变状态。

break;

case INASSIGN: …… //此处请自己填写,‘=’或其它(出现错误)

《编译原理》课程设计

break;

case INNUM:

if(!isdigit(c))

{ /* backup in the input */

ungetNextChar();

save = FALSE;

state = DONE;

currentToken = NUM;

}

break;

case INID:

…… //此处请自己填写,不是字符则回吐,并进入DONE,且识别出一个ID

break;

case DONE: //不可能到

default: /* should never happen */

fprintf(listing,“Scanner Bug: state= %dn”,state);

state = DONE;

currentToken = ERROR;

break;

}

if((save)&&(tokenStringIndex <= MAXTOKENLEN))

tokenString[tokenStringIndex++] =(char)c;

if(state == DONE)

{ tokenString[tokenStringIndex] = ';

if(currentToken == ID)

currentToken = reservedLookup(tokenString);

}

}

---------end WHILE

if(TraceScan){

fprintf(listing,“t%d: ”,lineno);

printToken(currentToken,tokenString);

}

6.编译原理 学习心得 篇六

《编译原理》课程学习心得

《编译原理》是计算机专业的一门重要课程,正如教材

第一章的引论所述,“编译程序是现代计算机系统的基本组成部分之一”。“一个编译程序就是一个语言翻译程序,语言翻译程序把一种语言(源语言)书写的程序翻译成另一种语言(目标语言)的等价程序”。

通过这一学期的学习,我觉得编译原理是一门理论性很强的课程,从文法和语言的概念到LL(1)文法和LR(0)文法的分析,几乎都是对具体问题的抽象。因而,我们需要更多的时间来理解、掌握相关的知识,当然在这一过程中也存在很多问题,比如我们后期学习具体文法的分析方法时,对于文法的概念不够清晰,影响了上课的效率,知道老师再次给我们讲解了文法等基础的知识点,我们才慢慢掌握后面所学的LL(1)文法等,也发现了知识点之间的关联。此外,这门课程的课时被安排得很少,一周只有一次,这样很不利于我们对这门重要课程的理解和掌握。但是我觉得我们很幸运,因为老师在有限的课程中尽量将知识点以比较容易接受的方式给我们讲解,教我们用简单的方法理解记忆不同的知识,对于我们提出的问题,无论课上或是课外,老师一直是不厌其烦,甚至利用课余时间为我们讲解重要的难题。

7.编译原理课程 篇七

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

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

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

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)

8.编译原理知识点总结 篇八

编译原理是大学计算机专业的必修科目,也是计算机的基础知识,学好编译原理,有助于更好的进行编程的操作,下面是编译原理知识点总结,一起来看看吧!

编译原理知识点总结

一 编译器

简单讲,编译器就是将“高级语言”翻译为“机器语言(低级语言)”的程序。一个现代编译器的主要工作流程:源代码 (source code) → 预处理器

(preprocessor) → 编译器 (compiler) → 汇编程序 (assembler) → 目标代码 (object code) → 链接器(Linker) → 可执行程序 (executables)

二 工作原理

编译是从源代码(通常为高阶语言)到能直接被计算机或虚拟机执行的目标代码(通常为低阶语言或机器语言)的翻译过程。然而,也存在从低阶语言到高阶语言的编译器,这类编译器中用来从由高阶语言生成的低阶语言代码重新生成高阶语言代码的又被叫做反编译器。

也有从一种高阶语言生成另一种高阶语言的编译器,或者生成一种需要进一步处理的的中间代码的编译器(又叫级联)。

典型的编译器输出是由包含入口点的名字和地址, 以及外部调用(到不在这个目标文件中的函数调用)的机器代码所组成的目标文件。一组目标文件,不必是同一编译器产生,但使用的编译器必需采用同样的输出格式,可以链接在一起并生成可以由用户直接执行的可执行程序

三 编译器的发展史

(1) 20世纪50年代

IBM的John Backus带领一个研究小组对FORTRAN语言及其编译器进行开发。但由于当时人们对编译理论了解不多,开发工作变得既复杂又艰苦。与此同时,Noam Chomsky开始了他对自然语言结构的研究。他的发现最终使得编译器的结构异常简单,甚至还带有了一些自动化。Chomsky的研究导致了根据语言文法的难易程度以及识别它们所需要的算法来对语言分类。正如现在所称的Chomsky架构(Chomsky Hierarchy),它包括了文法的四个层次:0型文法、1型文法、2型文法和3型文法,且其中的每一个都是其前者的特殊情况。2型文法(或上下文无关文法)被证明是程序设计语言中最有用的,而且今天它已代表着程序设计语言结构的标准方式。分析问题(parsing problem,用于上下文无关文法识别的`有效算法)的研究是在60年代和70年代,它相当完善的解决了这个问题。现在它已是编译原理中的一个标准部分。

有限状态自动机(Finite Automaton)和正则表达式(Regular Expression)同上下文无关文法紧密相关,它们与Chomsky的3型文法相对应。对它们的研究与Chomsky的研究几乎同时开始,并且引出了表示程序设计语言的单词的符号方式。

人们接着又深化了生成有效目标代码的方法,这就是最初的编译器,它们被一直使用至今。人们通常将其称为优化技术(Optimization Technique),但因其从未真正地得到过被优化了的目标代码而仅仅改进了它的有效性,因此实际上应称作代码改进技术(Code Improvement Technique)。

当分析问题变得好懂起来时,人们就在开发程序上花费了很大的功夫来研究这一部分的编译器自动构造。这些程序最初被称为编译器的编译器(Compiler-compiler),但更确切地应称为分析程序生成器(Parser Generator),这是因为它们仅仅能够自动处理编译的一部分。这些程序中最著名的是Yacc(Yet Another Compiler-compiler),它是由Steve Johnson在1975年为Unix系统编写的。类似的,有限状态自动机的研究也发展了一种称为扫描程序生成器(Scanner Generator)的工具,Lex(与Yacc同时,由Mike Lesk为Unix系统开发)是这其中的佼佼者。

在70年代后期和80年代早期,大量的项目都贯注于编译器其它部分的生成自动化,这其中就包括了代码生成。这些尝试并未取得多少成功,这大概是因为操作太复杂而人们又对其不甚了解。

(2) 国内编译器的研发历史

我国编译器研发工作起步并不算晚,早在60年代初期,董韫美院士和杨芙清院士就分别在中科院和北大领导研究组开发编译器,那时面向的高级语言是ALGOL和FORTRAN,目标机是国产机。

在改革开放前,由于国家需要,中科院、国防科大、江南计算所、北大等单位一直在研制国产计算机,包括大型机和高性能计算机(如向量机、并行机),相应的也在研制高级语言编译器。中科院计算所以董韫美院士领导的研究组先后开发了119机、109机的类 ALGOL语言编译器BCY。国防科大开发了向量编译器和向量识别器。

70年代中科院计算所张兆庆教授研究组(以后称ACTGroup)开始在国产机上研制FORTRAN语言编译器,先后参与了众多的院级和国家级科研攻关项目,主持开发了013,757,KJ8920等国产大型机系统中的FORTRAN语言编译器,所研制的编译器支持了数百万行应用软件的运行。

90年代以来ACTGroup承担科学院重大项目,国家攻关项目,863项目,以及国际合作项目,先后开发了共享内存多处理机的并行识别器,分布式内存多处理机的并行识别器, SIMD芯片和VLIW芯片的并行优化C编译器。将编译技术与图形学结合,ACTGroup还推出了集成化、可视化的并行编程环境。ACTGroup在先进编译技术和并行编程环境方面的研究工作获国内外专家高度评价,国际著名学者评价此研究组居编译领域的世界先进行列。

(3) 研究现状

编译器设计最近的发展包括:首先,编译器包括了更加复杂算法的应用程序它用于推断或简化程序中的信息;这又与更为复杂的程序设计语言的发展结合在一起。其中典型的有用于函数语言编译的Hindley-Milner类型检查的统一算法。其次,编译器已越来越成为基于窗口的交互开发环境(Interactive Development Environment,IDE)的一部分,它包括了编辑器、连接程序、调试程序以及项目管理程序。这样的IDE标准并没有多少,但是对标准的窗口环境进行开发已成为方向。另一方面,尽管近年来在编译原理领域进行了大量的研究,但是基本的编译器设计原理在近中都没有多大的改变,它现在正迅速地成为计算机科学课程中的中心环节。

在九十年代,作为GNU项目或其它开放源代码项目的一部分,许多免费编译器和编译器开发工具被开发出来。这些工具可用来编译所有的计算机程序语言。它们中的一些项目被认为是高质量的,而且对现代编译理论感性趣的人可以很容易的得到它们的免费源代码。

大约在,SGI公布了他们的一个工业化的并行化优化编译器Pro64的源代码,后被全世界多个编译器研究小组用来做研究平台,并命名为Open64。Open64的设计结构好,分析优化全面,是编译器高级研究的理想平台。

(4)国内编译器开发的现状

90年代以来,国内主要以研制并行机为主,相应的并行编译器研制也在国内开展起来。代表性的成果有:上海复旦大学朱传琪教授研究组研制的面向共享存储并行机的并行优化编译器AFT达到世界领先水平。

9.编译原理课程 篇九

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

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

一、前言

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

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

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].中国科学技术大学出版社,.

10.编译原理课程 篇十

计算机专业对学生主动学习和实践动手能力的要求较高,专业课教学在加强理论学习的同时必须面向设计,以培养学生创造性的思维方式。编译原理课程是计算机专业的主干课和必修课,同时也是一门实践性较强的课程,其中编译器的编写既有算法分析又有综合程序设计,涉及高级语言程序设计、形式语言和自动机理论、算法和软件工程等多门课程的学习。长期以来在编译原理课程教学中,采取的还是传统的“老师讲、学生记”的填鸭式教学模式,其不足之处是没有充分发挥学生的主观能动性,不利于学生自主学习能力的培养。同时由于实践教学体系不完整,缺少有效的实践教学手段,学生缺乏对教学内容系统化的认识,动手能力有待进一步提高。

基于PBL (Problem Based Learning)的教学模式是近年来在英美等发达国家较为流行的一种教学方法,该模式的主要教学特点是采取以问题为中心、学生为主体的自主学习方式。老师通过提问或给出项目等方式在课前引导学生查阅相关资料;学生采取小组讨论、合作等方式集体完成任务;课堂上老师通过让学生主讲等方式达到完成教学内容,提高学生分析问题、解决问题能力的目的。针对目前在编译原理课程教学中普遍存在的学生缺乏主观能动性、动手能力不强等问题,笔者拟将PBL新教学模式引入到编译原理课程教学中,旨在结合专业教学特点,研究PBL典型教学过程如典型问题的设计,并围绕问题重新设计课程教学体系,为计算机专业教学改革提供新的解决思路。

2. 基于PBL的《编译原理》课程教学设计

2.1 教学模式转变

我于2009年以访问学者身份赴美国北卡罗来纳大学州立大学计算机系,希望通过观摩国外本科专业课程,学习PBL教学模式及相关的教学方法。北卡罗来纳州立大学成立于1789年,位于美国的北卡罗来纳州,是美国成立最早的公立大学。PBL典型的教学过程包括:问题提出—组织小组—自主学习—合作交流—展示成果—总结评价。在国外,课堂教学前需要学生自己预习的内容比较多,有时有几十页之多;课程安排的实验环节多,每次做完实习内容还必须找TA(助教)验收;教学形式多样,特别注重实践和团队的合作。到每学期中间,老师会给每个组布置一个项目,每个组学生自由组合,几个人一组,老师任命一个组长。然后在剩下的两个月时间,同学们从最初的方案,程序设计,到最后做PPT,上台报告,都要合作完成。整个过程非常注重合作精神的培养,经常可以在图书馆看到三五成群的学生坐在一起讨论。期间要经常把阶段成果发给老师,老师给予相应指导,一起讨论实现方案。最后完成报告的提交,老师验收程序并推荐一个人上台做PPT工作。学生在做报告期间,其他同学有问题可以随时举手,课堂的交互性比较好。最终考核成绩由两部分组成,一部分是老师对小组的评价,一部分是组内各同学之间的相互匿名评分。通过学习观摩,我深刻体会到这种“学生为主体、问题为中心”的教学模式,在教师的整体把握和指导下,学生能主动地参与到教学的各个环节。但是考虑到国内教学实际,比如教学班较大、学时较少等问题,我们在具体实施时还不能简单地照搬国外模式,需重点研究如下问题。

2.1.1 问题和创新型的课程设计

如何围绕课程目标来设计问题并以此引出相关学习内容;设计的项目如何与实际应用接轨,更好地提高学生的学习兴趣;如何组织学生独立完成小型系统的设计、调试工作,使学生更好地将课本知识与实践活动相结合。这些都是有待研究与解决的课题。

2.1.2 考核标准的制定研究

为保证PBL教学模式的切实贯彻,研究有效的动态评价模式非常必要。通过有机结合教师评价、小组评价、自我评价,从多个角度地对学生学习活动即问题解决过程进行全面、客观的评价。

2.1.3 教师观念转变

开展PBL教学,教师承担着多种角色的变换,因此对教师的专业能力、实际问题的开发经验提出了更高的要求。

针对上述问题,我们结合教学现状,在问题设计、教学内容整合、创新型课程设计、考核标准制定等方面做了大量的工作。

2.2《编译原理》课程PBL教学模式设计

《编译原理》课程理论抽象、学习难度大,过去教学重点多放在理论部分,如各类语法分析算法的设计与学习,而实验环节的设置与安排仅仅只是对理论的初级验证,往往缺少代表性的编译器综合实验训练,在一定程度上影响了学生对编译器设计原理及内部处理机制的深入理解。根据PBL教学模式,问题是PBL教学活动开展的前提,为此我们结合实践根据教学内容,将问题设计分为单元PBL教学、综合PBL教学和实践PBL教学三大类。

2.2.1 单元PBL教学

编译原理课程有很多经典算法,单元PBL教学内容的设计以课程经典算法的理论学习和软件设计为主。如手工生成PASCAL语言词法分析器,应用FLEX自动生成词法分析器,应用算符优先法实现逆波兰表达式分析,利用BISON编写逆波兰表达式计算器等具有代表性的教学内容,我们让学生在理解掌握课程词法分析、语法分析等经典算法的基础上,通过小型项目的设计达到熟悉设计流程,体会软件工程思想的目的。

2.2.2 综合PBL实验教学

传统实验教学主要偏重编译程序各阶段的实现,较少涉及完整编译器项目构造。考虑到学生实际设计能力,我们构建了基于框架—插件式的编译原理创新型实验平台,通过该平台实现了综合PBL实验教学。平台以TINY语言为高级语言,以MIPS汇编语言为低级语言,实现从TINY到MIPS的编译器构造。

创新型实验平台提供词法分析、LR (1)语法分析、语义分析(类型检查)、代码生成、代码优化等五个模块,其中每个模块被设计为一个单独的插件。任务分配时,不同的小组完成编译器不同模块的设计;具体实现时,学生并不需要考虑其他模块的设计与实现,只要专心设计完成相应的插件,就能得到一个完整的编译程序。

2.2.3 实践PBL教学

综合实践的主要目的是提高学生应用编译技术解决实际问题的能力,以此为基础开展本科生毕业设计。我们在2008、2009届毕业生中以形式语言和自动机理论为基础,开展相关实践设计。设计内容包括《基于元胞自动机的城市演化》、《基于L系统的植物花序仿真方法研究》等。学生通过将课本知识与实践活动相结合,达到综合实践、学以致用的目的。

2.3 PBL教学模式实施

通过上述问题设计,在此基础上我们采取分组实践形式具体实施PBL教学模式,每组由5—6名学生组成。分组后老师首先帮助学生明确问题主要研究内容、任务具体分配及验收方式等。在问题提出阶段,老师以引导为主,让学生明确问题,引导学生通过网络、图书馆等各种渠道搜集相关设计资料;在任务分配阶段,由组长制定开发计划,选择开发平台,提出设计方案,分配组员具体设计工作,老师在该阶段重点检查设计方案的合理性;在具体设计与代码实现阶段,由学生完成详细设计包括代码编码、测试、集成等工作,老师在该阶段主要进行组内工作协调等;问题完成后,老师组织学生进行编码测试、分组答辩、结果评比等多种形式展示设计结果。

该教学模式分别在06、07两届学生中小范围尝试,从实施情况看,课堂气氛活跃,学生普遍反映通过自主学习,合作开发,课堂讲解等多种教学形式,更好地理解了算法。这同时也为教师组织教学、考核评价提出了更高的要求。

2.4 PBL教学模式考核标准研究

传统编译原理课程考核主要采用笔试形式,而新PBL教学模式形式多样,因此标准的制定应强调评价的多元性,即将教师评价、小组评价和自我评价等有机结合起来,保护每个学生积极参与的热情,避免吃“大锅饭”的现象,保证PBL教学模式能够切实有力地贯彻。

为多角度地了解学生的学习活动,考查根据每次讨论学生发言的次数、质量、最终提交的书面报告及每个学生在问题实现过程所做的贡献进行,最终成绩应该包括两部分,一部分是老师对小组的评价,一部分是组内各同学之间的匿名相互评分,通过对问题设计实现的整个过程进行全面、客观的评价,保证PBL教学的效果。基于新教学模式考核标准研究还有待在今后的教学中进一步地摸索、改进。

3. 结语

基于PBL的教学模式的特点是以问题为中心,以学生为主体,我们围绕PBL典型教学过程,将PBL新教学模式引入到编译原理课程教学中,根据实际教学情况总结了一些经典案例,开发了与之相关的创新型实验平台,并重新设计了课程教学体系。这种启发引导为主的教学模式,能够提高学生自主学习、合作开发、解决问题的能力。但是教学方法、教学手段的改革是一个长期的过程,其中教学模式的转化是根本出发点,课程内容的优化、组合,以及教学方法的改革是个长期的过程。这些还需要我们根据教学实际情况,及时调整优化并在以后的教学实践中摸索,进一步提高教学水平,为计算机专业教学改革提供新的解决途径。

摘要:基于PBL教学模式的特点是以问题为中心, 学生为主体, 能较好地提高学生分析问题、解决问题的能力。针对目前编译原理课程教学中普遍存在的学生缺乏主观能动性、动手能力不强等问题, 作者结合教学实际, 将PBL新教学模式引入到编译原理课程教学中, 就典型问题设计、围绕问题重新设计课程教学体系等问题进行了探讨和研究, 研究表明新教学模式能提高学生自主学习、解决问题的能力, 为计算机专业教学改革提供了新的解决思路。

关键词:PBL,《编译原理》课程教学,课程教学体系

参考文献

[1]毛玉萃.编译原理实验课的实践探索[J].大连大学学报, 2004, 25, (6) .

[2]曹琼.浅淡编译原理实验课程教学[J].计算机教育, 2007, (18) .

[3]刘远兴.“基于问题的教学”在软件类课程教学中的实践与探讨[J].考试周刊, 2010, (12) .

[4]王改芳, 龚君芳, 李圣文, 张冬梅.《编译原理》课程实践教学改革探索[J].实验技术与管理, 2009, (12) .

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

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

[7]温世浩.PBL和非PBL毕业生的综合能力比较.复旦教育论坛, 2006, (02) .

上一篇:报考公务员要求下一篇:古文版辞职报告