编译原理学习论文(精选7篇)
《编译原理》课程学习心得
《编译原理》是计算机专业的一门重要课程,正如教材
第一章的引论所述,“编译程序是现代计算机系统的基本组成部分之一”。“一个编译程序就是一个语言翻译程序,语言翻译程序把一种语言(源语言)书写的程序翻译成另一种语言(目标语言)的等价程序”。
通过这一学期的学习,我觉得编译原理是一门理论性很强的课程,从文法和语言的概念到LL(1)文法和LR(0)文法的分析,几乎都是对具体问题的抽象。因而,我们需要更多的时间来理解、掌握相关的知识,当然在这一过程中也存在很多问题,比如我们后期学习具体文法的分析方法时,对于文法的概念不够清晰,影响了上课的效率,知道老师再次给我们讲解了文法等基础的知识点,我们才慢慢掌握后面所学的LL(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。
关键词:编译原理;网络;作业提交
中图分类号:TP311.52 文献标识码:A 文章编号:1674-7712 (2012) 12-0085-01
一、系统的主要功能分析
《编译原理》课程作业网上提交系统主要为《编译原理》课程提供网上的作业管理功能,主要分为管理员、教师和学生三个部分。
(一)管理员部分的主要功能
1.管理员登录功能:根据管理员权限进入管理员相应的页面。2.公告管理功能:管理员可以对公告进行查看、增加、删除、修改等功能。3.修改密码功能:管理员可以修改密码。4.作业管理功能:实现作业信息的删除、修改、查询的功能。5.教师管理:实现教师信息的增加、删除、修改、查询的功能
(二)教师部分的主要功能
1.教师登录功能:根据教师权限进入教师相应的页面的功能。2.修改个人资料功能:可以修改个人的信息。3.学生管理功能:能够实现学生信息的查看、添加、修改、删除、搜索的功能。4.在线布置作业功能:发布作业信息。5.在线批改作业的功能:在线给出相应的作业的点评和分数
(三)学生部分的主要功能
1.学生登录功能:根据学生权限进入学生相应的页面的功能。2.查看公告的功能:可以查看公告信息。3.修改个人资料的功能:修改个人信息。4.作业信息列表:学生查看、下载老师发布的作业题目。5.上传作业:上传做好的作业。1.4管理员信息表和作业信息表
二、教师模块的设计与实现
(一)教师修改个人信息模块的设计与实现
1.教师修改个人信息的功能描述:功能描述:本模块主要实现的功能是教师能够对自己的信息进行修改。2.教师对自己的信息进行修改的输入、输出:输入:更改的教师的基本信息。输出:个人信息修改成功或者失败的页面。
(二)教师布置作业模块的设计与实现
1.教师布置作业模块的功能设计:功能设计:用户登录确定为教师后,teacherlist.do对数据库进行查询,将查询值绑定给request转发到显示界面上。2.教师布置作业模块的输入输出设计:输入:作业标题、出题教师、作业上传截止日期、作业内容等。输出:作业发布成功或者失败的页面。3.教师批改作业模块的功能描述:功能设计:教师点击批改链接,查询数据库,显示该题答案和题号,做出批改,保存到数据库的correst表中。4.教师批改作业模块的输入输出设计:输入:教师批改作业后所给出的评语和分数。输出:成功批改的页面
三、学生模块的设计与实现
(一)学生查看公告和个人信息模块的设计与实现
功能设计:在用户登录后确认为学生后,跳转到answer.do,查询数据库work表,把查询结果显示到页面上。
(二)学生上传作业模块的设计与实现
1.学生上传作业模块的功能描述:功能设计:学生点击做题链接,进行做题,并把做题结果和题号存入到answer表中,通过addwork添加到数据库。
2.学生上传模块的输入输出设计:输入:上传作业。输出:完成作业
四、结语
《编译原理》课程作业网上提交系统是学校信息化教学环境的基础设施之一,是全面实现素质教育的重要手段,是教育技术装备现代化的主要体现和教育现代化的重要标志之一。
参考文献:
[1]孙卫琴,李洪成.Tomcat与Java Web开发技术详解[M].北京:电子工业出版社,2003,6
[2]孙一林,彭波.Java数据库编程实例[M].北京:清华大学出版社,2002,8
[3]飞思科技产品研发中心.JSP应用开发详解[M].北京:电子工业出版社,2003,9
[4]赛奎春.JSP工程应用与项目实践[M].北京:机械工业出版社,2002,8
[5]Kven Genet.SQL Server database development Case Study Analysis.Tsinghua University Press,2006,12
[6]Steven Nath.SQL SERVER 2000 Development and Application,Mechanical Industry Press,July,2003
课程设计的具体内容以传至QQ群共享《编译原理课程设计具体内容.ppt》中,由于学校没有足够大的机房供我们课程设计,所以课程设计采取单独辅导形势,同学们有任何问题,可以来我办公室答疑。
设计报告提交要求
1提交的内容:
验收经过测试的程序
提交设计报告。报告可以包括以下内容:
<1> 任务与目的<2> 软件设计
a.软件的总体结构与模块划分
b.关键算法与重要数据结构
<3> 测试例程设计与测试结果分析
<4> 总结、体会、改进建议等
2.课程设计报告的字数(包括图表)不得少于10000字。
3. 禁止课程设计抄袭,发现原文抄袭网站或报刊内容以零分记。
4.禁止课程设计雷同,发现雷同以零分记。
提交方式
1.要求提交《课程设计报告》打印稿。
2.A4纸张排版,格式参考学年论文规范。
3.在提交论文时填写课程设计封面,详细注明课程名称、题目、学号、姓名、年级、专业班级等基本信息。
4.解释程序源程序(由各班班长统一用U盘拷贝给我)。
时间要求
第19周周五前,按班为单位,各班班长负责提交,过期不再受理,不记成绩。
周次课内学时课内安排(讲授内容)建议课外安排备注
12编译原理概述阅读PL/0程序文本
24介绍PL/0编译程序阅读PL/0程序文本
32词法分析程序自动构造阅读PL/0程序文本
(正规式,有穷自动机)
44(2)词法分析程序自动构造练习题
Lex(Flex)介绍,布置PP1实践题一PP1
52文法和语言练习题
64自顶向下语法分析练习题提交PP1LL(1)文法
72自底向上语法分析练习题
LR文法
84LR分析练习题
期中考试
92Yacc介绍,布置PP2实践题一PP2
104习题课
语法分析方法比较提交PP2 112语法制导翻译,布置PP3实践题一PP3
124语法制导翻译
运行时存储组织提交PP3 132运行时存储组织练习题144代码优化, 布置PP4实践题一PP4
152代码生成164实践题目总结答辩
习题课
附1 实践题目(从中选一)
实践题一 Deacf编译程序的设计和实现.实践题二Pl/0编译程序扩充,用Lex和 Yacc实现一个小解释器.实践题三 java实现的Mini-Triangle编译程序.(限少数同学选,在第四周作选题报告)附2 课程评分
1课堂小测验,作业抽查 10%期中考试20%
3实践题一 40% 实践题二20% 实践题三 50%
经过一个星期的编译原理课程设计,在老师的指导以及小组同学的互相帮助下顺利完成该课程设计。通过该课程设计,收获很多。
此次课设,我们小组用的是java语言,在课设过程中,用到了以前开发过程中所没有的探索过的很多新方法,最直接的影响就是让我对java语言的认识与理解更近一层。并且掌握了什么是编译程序,编译程序工作的基本过程及其各阶段的基本任务,对课本上的知识有了更深的理解。
因为本实验用了java语言编写,个人觉得相比C语言模块更加清晰明了。在该词法分析程序中,我们用了java中的split方法对输入串进行分割,简单易懂。其次,在字符匹配过程中,引进了正则表达式,让输入串与之匹配,极大地缩减程序的繁琐性。同时,java的面对对象的性质在程序中得到充分的体现,在代码的编写过程中,将各种判定封装为函数,主函数通过调用这些封装函数完成功能,摒弃了C语言结构化的繁琐,使整个处理函数清晰可读。在测试多个用例时,发现程序的很多小错误,但最后都能够一一解决,尤其在这个过程中,我也充分体会到了团队合作的力量。此次课设更加深了对java语言的认识,并熟悉了java语言中正则表达式的用法。
关键词:编译原理,实践改革,分级教学
《编译原理》是计算机及相关专业的一门专业必修课程,在整个专业教学中占有举足轻重的地位。该课程内容比较抽象,逻辑性强,它涵盖了程序设计、自动机、数据结构、机器实现等多门学科,需要具有足够的计算机基础知识作为它的前驱课程,所以学生普遍反应编译比较难学。
现在计算机专业考研统考取消了《编译原理》的考查,许多同学便认为该门课程不是很重要,上课也都采取无所谓的态度,理论掌握不扎实,进而给实践增加了难度。该门课的理论性、实践性都比较强,学习内容包括了词法分析、语法分析、语义分析与中间代码生成、代码优化及目标代码的生成,其中涉及到的正则文法、有穷自动机理论、上下文无关文法、LR文法、属性文法、回填技术、局部优化等概念都是构造编译器的重要理论基础。其实归根到底编译的重点不在于研究编译程序具体代码的实现,而是对编译的算法、基本原理的理解,编译原理中包含的形式语言的定义、语言的翻译过程、自动机理论等知识都是计算机研究的精髓内容,通过编译系统的理论学习和编程实践,可以增强学生软件的设计开发能力,提高他们的逻辑思维能力和操作动手能力,提升他们的专业水平,使他们获得可持续发展的计算机应用能力。
1 编译原理实践课程现状
为了加深学生对编译原理理论知识的理论,实践环节的设置是必不可少的。在笔者的学校,目前给编译原理课程安排实践内容是8节上机课外加一个课程设计,因为上机课时有限,所以给学生安排的是任务量稍轻的词法分析、语法分析等程序的设计,课程设计则增添了语义分析及编译器的实现等内容。
从以前的实践结果看来,情况不容乐观。学生本身水平就是参差不齐,提交上来的设计作业水平也相差较大,更有甚者,如果不会做的话,直接把其他同学的作业拷贝一份改了名字交上来,这样一来显然失去了实践的意义。如果不是对学生足够了解的话,光凭作业老师是无法判断出谁的水平高、谁又是不劳而获的。能力较强的学生觉得大家提交的作业一样,体现不出自己的优势,可能会打击到他们的积极性,也无法激发他们进行再创造的兴趣。能力稍差的学生则觉得不用付出多少劳动,却能得到差不多的成绩,那为何不继续偷懒下去呢?长此以往,他们的水平只会不进反退,得不到真正的锻炼。
由此,笔者想来,因为每次布置的实验内容都是一样的,对于水平不同的学生来说,显然这是不太合理的。要是照顾的大多数同学的情况,作业难度提不上去,难度大的话不少同学不会做,太简单的话对于一些水平高的学生来说又体现不出他们的实际能力。那可不可以将学生分成几部分,分层次让他们实践不同的实验内容呢?
2 实践改革初探,采用分级实践、分组合作
所谓分级,是将学生按照他们的学习实践能力分为几个等级,上机时可以选择难度不同的实践内容。例如分为三个等级:
1) 这类学生基础知识比较扎实,编程能力较强,自主学习能力强,一般可以快速完成老师分配给他们的任务。对于此类学生,老师可以根据他们的特长设计不同的实践课题,或是让学生自己设计感兴趣的实践内容,只要能充分利用编译的相关原理即可。在实践前期,老师和学生一起探讨实践课题的需求分析、框架设计等等,后期的具体实施则交由学生去完成。同时老师的考核方法也要做相应的调整,不能只看结果不看过程,因为选题难度较之前的加大,学生很有可能在有限时间内无法完成,这样也会产生畏难情绪。作为老师应该打消他们的后顾之忧,只要整个过程学生亲身参与了,付出了相应的劳动,那就应该得到最大的鼓励,评分还是应以中上等为主。具体评价的时候,可以参考实践内容有没有创新,跟现有的类似课题相比有没有改进的地方。这样一来肯定会极大的激发学生的积极性,愿意投入更多的精力到新课题的实施中去。
2) 对于前期课程没有学好,编程水平较差的学生,让他们独立完成一个稍大型的程序不太现实。那我们可以因材施教,让他们去阅读一些程序代码,分析代码的结构,所用到的算法,画出代码的流程图等等,即使没有亲自设计程序,也可以大致读懂程序,为后续的课程实践打下基础。另外也可以从词法分析器或语法分析器中提取出部分内容,让他们设计实现一些简单的函数。对于这部分学生,千万要防止他们出现自暴自弃的情绪,如果只是单纯靠抄袭其他同学的作业来交差,那他们在实践方面永远得不到提高,这对于他们找工作是极其不利的。
3) 此部分学生应该是班级中的大多数了,他们在平时的学习中按部就班,循规蹈矩,对于老师布置的一般任务基本可以独立完成或是少部分求助于其他同学,但基本缺乏创新意识,思考问题不够全面。对于此类学生,应该鼓励他们去实践一些有创新性的实践课题。摒弃以往单纯去实现词法分析、语法分析、语义分析的思路,可以分析设计基于某表达式的计算器,实现某编译的前端等等。从根本上对学生的实践内容进行改革,根据他们的个人能力来决定他们的实践题目。此类学生的考核可以从创新性、题目的难度及完成程度几方面去考察,既要让学生掌握编译原理的相关知识,又不能打击了他们的积极性,让他们对以后的课程实践都失去了兴趣。
还有一种实践模式,就是将好中差学生分在一组,根据实践的难易程度,大家量力而为,将实践内容分解为几部分,不同的学生完成不同的内容,最后大家提交一份完整的设计。这样的分组,有利有弊,利在可以培养学生的团队合作精神,集思广益,大家齐心去完成一个有难度、有创新的课题,考核时采用答辩的机制,每人阐述自己所完成的部分,既公平又使每人都得到了锻炼。不过此法的弊端也是存在的,那就是有的同学浑水摸鱼,什么都不做,最后直接把别人的成果拿为己用,这对于辛苦参与实践的同学是有失公允的。
3 对老师提出新的要求
基于因材施教的原则,在实践部分采取分级的方式是比较合理的一种方法,但同时也对老师提出了较高的要求。首先老师要对学生基本水平具有足够的了解,指导学生进行不同课题的选择,以体现他们的实际水平并激发他们的潜能。但在当前的教育模式下,要让老师认识每一个学生并掌握他们的学习情况基本上是不可能的事情,这就要依靠其他教师或辅导员的力量,争取让学生能选到合适自己的题目。
其次根据不同学生的水平设计不同的实践题目,需要老师对编译原理掌握的更为透彻,需要深入研究教学内容,了解学科的前沿动态,将新思想、新事物加在编译原理的实践当中,以提高学生的学习兴趣并设计出更适合、更能有效体现学生水准的题目。
4 结论
【编译原理学习论文】推荐阅读:
编译原理论文11-21
编译原理实验语法分析06-03
大班数学 编译密码06-10
论文:《原电池原理》07-17
中学德育原理论文12-28
网络通信原理论文09-16
机械原理课程设计论文12-20
对学习通信原理的感想11-25
会计学原理学习笔记12-28
《管理学原理》学习心得01-26