第一篇:编译原理课程和助教工作总结
编译原理课程和助教工作总结
时间如流水般,转眼,一学期将至,每个人为了能交上一份满意的答卷,无时无刻不在倾注着汗水,挥洒着热泪。掩卷长思,细细品味,这学期的点点滴滴不禁又浮上心头,现在让我们一起回顾一下,希望可以对今后的教学工作有所帮助。
编译原理是我们北京师范大学信息科学与技术学院计算机专业本科生的专业必修课,它旨在介绍编译程序构造的一般原理和基本方法,其内容主要包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成等。这门课程关注的是编译器方面的产生原理和技术问题,似乎和计算机的基础领域不沾边,但是编译原理课程是所有计算机专业学生应该习得的一门重要课程,因为虽然在将来并不是所有人都会从事编译方面的工作,但是通过编译原理的学习之后,可从许多不同的角度来观察编译器的结构,编译器的物理结构、操作的顺序等等,会涉及到数据结构、计算机组成原理等课程,所以同学们在理论、技术和方法上都能得到系统而有效的训练,而且有利于将来希望从事软件开发的学生的相关素质和能力的进一步提高,更能够让每个学生更清楚的了解和熟悉一段程序从源代码到可执行文件之间具体的转换过程,这样能够更好的理解代码的编译和计算机内部的工作原理,对学生以后计算机相关的学习乃至工作从业都会有非常大的帮助。
编译原理这门课程是计算机专业课程中偏难的一门课,不管是在平时的课堂教学上,还是在上机实验的过程中,学生都会产生很多困惑之处,在这些方面我们的编译原理助教就承担了相当重要的工作和任务:
每周课堂随堂听课,跟进教学进度,并且上课之前做好复习工作,对每节课同学们可能会产生的问题提前做好归纳,以便更好的在课余时间跟同学们讨论,给同学们提供答疑解惑的机会;
能动手编写代码完成变异原理实验是本课程技能培养的重要一环,在每周的上机实验时,助教帮助同学们进行分组,以小组合作的方式来完成每次的实验任务,依照课程进度循序渐进的给同学们分派布置实验任务,在实验课上跟同学们随时交流,一同调试代码,一对一的解答实验疑惑等,并且协助同学们理解实验原理和内容,辅助同学们能够顺利完成上机实验,通过上机实验的手动操作,同学们也可以更直接、更具体的理解编译程序代码过程中一些具体的原理和方法;实验课我选取的是基于C++或者是基于flex和bison的实验,助教会主动和实验课本的作者老师联系沟通,获得更多实验相关的资料,比如书上给出代码的电子版和用例测试等。
助教在课后会主动收集同学们课堂上课或者实验过程中遇到的问题向我反映,这样可以及时发现同学们在课堂中理解较为模糊甚至有偏差的地方,并在课堂或者实验课上进行一个集中的讲解,更利于同学们的学习;
每次课结束之后,我会布置课后作业来让同学们对课堂教学内容进行巩固和查漏补缺,助教认真批改同学们的课后作业、所交的实验报告和运行的代码,做好每位同学的评分与登记,对课后作业、实验报告和代码中关键性的错误做出标记,并要求学生改正。登记课后成绩时,按10分制来决定,登记实验成绩时按照20分制来决定。在每次批改作业结束后,助教会及时整理,汇总学生的成绩和作业实验中出现的问题,助教通过批改课后作业和实验来了解同学们真实的学习情况,从而能够更好的辅助教学工作的进行。
平时为了同学们能获得更好的学习体验,会进行一些与国外教授的视频课程或者相关活动等,助教会组织同学们进行视频授课前的预习工作,同大家一起讨论上课形式,提出可能遇到的问题等等,在课前会负责批教室,布置桌椅场地,设置视频授课环境,调试摄像头、话筒和音响等相关的设备,为进行正常的视频授课或其他活动做准备。
对自己的要求:
一、师德方面:加强修养,塑造“师德”,我始终认为作为一名教师应把“师德”放在一个极其重要的位置上,因为这是教师的立身之本。“学高为师,身正为范”,这个道理古今皆然。从踏上讲台的第一天,我就时刻严格要求自己,力争做一个有崇高师德的人,为每一个学生“传道授业解惑”。
二、认真备课,不但备学生而且备教材备教法,根据教材内容及学生的实际,设计课的类型,拟定采用的教学方法,并对教学过程的程序及时间安排都作了详细的安排,认真写好教案。每一课都做到“有备而来”,每堂课都在课前做好充分的准备,并制作各种有利于吸引学生注意力的有趣教具,课后及时对该课作出总结,并认真搜集每课书的知识要点,归纳总结。
三、增强上课技能,提高教学质量,使讲解清晰化,条理化,准确化,生动化,做到线索清晰,言简意赅,深入浅出。在课堂上特别注意调动学生的积极性,让学生多动手,从而加深理解掌握知识。加强师生交流,充分体现学生的主动作用,让学生学得容易,学得轻松,学得愉快;注意精讲精练,在课堂上老师讲得尽量少,学生动口动手动脑尽量多;同时在每一堂课上都充分考虑每一个层次的学生学习需求和学习能力,让各个层次的学生都得到提高。
四、认真批改作业:布置作业做到精读精练。有针对性,有层次性。同时对学生的作业批改及时、认真,分析并记录学生的作业情况,将他们在作业过程中出现的问题作出分类总结,进行透切的评讲,并针对有关情况及时改进教学方法,做到有的放矢。对学生:
“不积跬步,无以致千里;不积小流,无以成江海”,学生要从点点滴滴做起,一步一个脚印,一份耕耘,一份收获。学习要靠你们自己,踏踏实实做事,所谓“行百里路半九十”,学习要锲而不舍,奋进永远是核心,让努力充实自己,厚积而薄发,达到“书香引蝶宜养兰,胸中点墨绘新颜”的水平。
第二篇:编译原理课程-教学计划
编译原理教学大纲2001,9
周次课内学时课内安排(讲授内容)建议课外安排备注
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%
4期末考试 完成实践题一 30% 完成实践题二50% 完成实践题三 20%
第三篇:《编译原理》课程培训心得体会
《编译原理》课程培训心得体会
天津科技大学 吴江红
首先感谢全国高校教师网络培训中心为我们这些工作在教学第一线的教师提供一个提高自己教学水平、方法和能力的机会,使得我们学习到更好的方法能更好地为学生服务。经过本次培训之后,我个人觉得可以通过以下几个方面提高教学质量。
1、认清编译原理,明确学习意义,激发学生的热情 帮助学生认清编译原理的作用和地位。给学生介绍清楚可以通过编译原理的学习,有助于学生快速理解、定位和解决在程序编译、测试与运行中出现的问题。帮助学生克服畏难心理,提高学生的兴趣。编译原理中的原理除了可以用于分析编译器以外,还对诸如人工智能、并行处理技术等课程的学习具有指导作用。本门课程学习对其它课程的学习和今后很多领域的理论研究具有深远的意义,如计算机软件技术领域、计算机系统结构领域、人工智能系统的机器学习领域、并行处理技术等领域。
2、优化教学内容,搞好课堂教学
可以采用以人本主义学习理论为基础,充分发挥学生的学习主动性,注重启发式教学,注重提高学生的素质、培养学生的创新能力。使得学生对编译原理课程的兴趣提高,能主动学习,理解、体会前辈们在解决相应问题时是如何考虑的,同学们自己又是如何考虑的。
编译系统中的一些概念很抽象,学生无法理解,就只会死记硬背,当然更无兴趣可言。在讲解的过程中,可以选用学生最熟悉的一些实例,通过类比使抽象的概念更容易被理解。我本人觉着对于工学学科的同学来说,不用在数学定义上花费太多时间,因为他们对数学符号不敏感,而应该尽量多安排例子,使得同学们能把数学符号代表的含义通过例子理解清楚,以及知道如何使用。
有效地利用教学辅助手段,增强课堂教学效果。由于本课程涉及形式语言、有穷自动机等抽象内容,学生在学习过程中接受起来较困难。为了提高学生的学习兴趣、增强课堂教学效果,可以将教学过程中一些需要教师在黑板上动态演示的过程做成CAI课件,既可在课堂上演示,也可在课后由学生自己观摩,有助于加深学生对所学知识的理解。
同时可在课堂上和习题中,多准备了一些从实际程序的编译和运行时碰到的问题中抽象出来的例子,供学生用所学的知识去分析、理解、并加以解决。通过采用这种实例教学方式,既能够对前期课程起到复习巩固的作用,又能让学生切实体会到本课程的实际价值,从而有力地激发了学生学习编译原理和技术的积极性。
3、选取合适的教材
把理论知识具体化、通俗化,教材在教学过程中起关键作用。一本好的教材不仅对老师教的过程很重要,同时在学生进行预习和复习时也是相当重要的。我们可以选择蒋宗礼教授编写的编译原理教材来达到我们的目标。
4、精心设计实验教学内容
编译原理课程对实践的要求比较高,所以实验课是培养学生实践能力的重要环节,是巩固和验证所学理论知识,培养学生分析问题、解决问题能力的重要环节。因此为了能达到好的实验效果,极大地促进学生对原理的理解,可以通过认真设计合适的实验内容、采用适当的实验形式以及教师的耐心指导等途径。
第四篇:编译原理课程报告(共)
编译原理课程报告
学院: 信息工程学院专业: 软件工程 姓名: 赖杰学号: 09927212 指导老师: 朱文华完成时间: 2012.5.19
编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法,在计算机本科教学中占有十分重要的地位。
编译程序是现代计算机系统的基本组成部分之一,而且多数计算机系统都配有不止一个高级语言的编译程序,对有些高级语言甚至配置了几个不同性能的编译程序。从功能上讲,一个编译程序就是一个语言翻译程序。语言翻译程序把一种源语言书写的程序翻译成另一种目标语言的等价程序,所以总的说编译程序是一种翻译程序,其源程序是高级语言,目标语言程序是低级语言。
编译程序完成从源程序到目标程序的翻译工作,是一个复杂的整体的过程。从概念上来讲,一个编译程序的整个工作过程是划分成几个阶段进行的,每个阶段将源程序的一种表示形式转换成另一种表示形式,各个阶段进行的操作在逻辑上是紧密连接在一起的。一般一个编译过程是词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成。
编写编译器的原理和技术具有十分普遍的意义,以至于在每个计算机工作者的职业生涯中,本书中的原理和技术都会反复用到。在这本书中,向我们介绍了文法的概念,在讲词法分析的章节中讲述了构造一个有穷自动机的方法,以及如何将一个不确定的有穷自动机转化成确定的有穷自动机和有穷自动机的最小化等方法。
该门课中主要讲述的是两种分析方法,即自上而下分析的方法和自下而上分析的方法。自上而下分析法是从文法的开始符号出发,反复使用各种产生式,寻找“匹配”于输入符号串的推导。自下而上的分析方法是从输入符号串开始,逐步进行“归约”到文法的开始符号。
1.自上而下的分析法主要的就是LL(1)文法,首先要判断某个文法是否是
LL(1)文法,如果是就可以按照LL(1)文法分析的方法去判断某一个输入串是否为该文法的句子。LL(1)f分析方法是,首先根据判断是否为LL(1)文法求出每一个非终结符的SELECTE集合来构造该文法的预测分析表,然后根据预测分析表去分析输入串得出结果;如果不是LL(1)文法,比如说文法产生式中含有左递归和相同的因子,就要消去左递归或公共因子,再根据每一个非终结符的SELECT集合来判断是否为LL(1)文法。利用LL(1)文法分析一个输入串是不是某一个文法的句子,根据预测分析表是比较直观的,而且分析的效率也是比较高的。
2.自下而上的分析方法主要是算符优先分析方法。算符优先分析的基本思
想是只规定算符之间的优先关系,也就是只考虑终结符之间的优先关系,由于算符优先分析不考虑非终结符之间的优先关系,在归约的过程中只要找到可归约串就归约,没有考虑非终结符之间的优先关系,所以说算符优先归约不是规范规约。算符优先分析首先是要构造算符
优先关系矩阵;然后就是分析输入串,根据关系矩阵进行移进或归约操作;最后分析得出判断的结果。
3.算符优先分析是有缺点的,由于算符优先分析方法在分析的过程中不知
道如何确定句柄。下面要说的就是LR(0)文法,这种方法能够根据当前分析栈中的符号串就可以惟一的确定分析器的动作是移进还是归约,并且是用哪一个产生式。根据规则写出LR(0)的分析的项目集,再由项目集构造LR(0)的分析表,其次根据分析栈的元素和状态,查看分析表,找出相关的句柄,是归约还是移进,最后就是分析得出结果了。SLR(0)文法是以LR(0)文法为基础的文法,是为了解决程序设计语言的文法不能够满足LR(0)文法条件的另一种文法分析的方法,大致的与LR(0)的分析过程相似,只是在项目集的组合上有些区别。
该课程理论性与实践性都很强,我在学习时普遍感到内容非常抽象,不易理解,内容多且繁琐,难以完整、全面地掌握编译原理的有关知识,更不用说灵活运用编译原理知识从事相关设计或应用于其他领域。虽然只有少数人从事编译方面的工作,但是这门课在理论、技术、方法上都对我提供了系统而有效的训练,有利于提高软件人员的素质和能力。
在我学习编译原理以前,都认为编译原理只能应用在写程序语言的编译器上,觉得用处不大,学习兴趣不高。而在后来的学习中,我逐渐认识到计算机专业的学生,除了要会编写程序语言之外,还应该了解它是如何被计算机所识别,这才是真正并且透彻地学习软件。另外,编译器中每一个模块的编写,都能对我的编程能力的提高有很大帮助。在今后若从事软件工程,这门课程也能够对编写程序有所帮助。
为了能够系统掌握这门专业课,我把编译原理分为以下几个模块:①语言和文法;②词法分析;③语法分析;④语义分析和中间代码生成;⑤代码优化和目标代码生成。
在学习的开始,我需要掌握什么是编译,编译分为哪些阶段,编译程序和解释程序的区别等等。在做好了这些方面的准备后,开始了系统的学习。
语言和文法部分的知识包括文法基本概念及文法的二义性。基本概念有文法定义、推导、句型、句子等等。二义性文法是通过画语法树的方法来证明。
词法分析中的重点是有穷自动机DFA的生成以及DFA和正规式与正规文法的关系。还要熟练掌握NFA转换为DFA的方法及DFA的化简。
语法分析包括自上而下和自下而上分析。自上而下分析着重掌握LL(1)文法,自下而上分析重点掌握算符优先文法和LR(0)、SLR(1)文法。
语义分析重点是其功能,中间代码生成和语法制导翻译定义与方法。
最后,优化分为局部优化和循环优化,重点理解一些关键词,如基本块、流图等,要学会自己画出程序流图。用DAG图进行局部优化是重点。
在学习文法时,对文法的组成,用法都较为明了,而在真正做题时却感到十分吃力。例如给出了一个语言,要求写出它的上下文无关文法,就感到十分棘手,所以今后在这方面要加大练习量,以熟练掌握。
而在之后的词法分析和语法分析中,我感到在看基本原理时十分困难,通常要长时间钻研才能够有所了解,而一旦掌握了基本原理,做题时就感到十分顺畅了。例如,在刚接触到LR(0)文法时,我用了大量的时间去学习它的原理,掌
握之后,在列LR(0)分析表和写分析过程时,只要思路清晰,就会比较顺畅,而且不会犯错。
通过这学期的对编译原理课程的学习,这么课程让我学会了如何去编译程序的一个理论知识,知道编译程序是通过怎样的方法把程序员编写的源程序翻译成计算机能够执行的机器语言的,我觉得主要的是大大加深了我对程序设计的理解,也对计算机的理论和软件编译有了深一步的理解。这学期的编译原理的实验使我知道了编译程序的工作的基本过程及其各阶段的基本任务,了解了 编译程序流程框图,编译程序的生成过程、构造工具及其相关的技术对课本上的知识有了更深的理解,可以说这是将书本上的理论知识的应用,是对理论知识的更深一步的理解和掌握。
第五篇:编译原理课程学习总结体会
编译原理课程学习总结体会
编译原理是我们计算机科学与技术的一门非常重要的专业课,它主要介绍了高级程序设计语言编译程序构造的一般原理、基本设计方法、主要实现技术和一些自动构造工具。
在开始学习这门课程之前,老师就说过编译原理是一门比较难学的课程,它主要的难点在于它的概念性和理论性很强,内容丰富且抽象,具有严密的逻辑性,应用其他课程的的内容比较多。
通过这一学期的学习,我也发现了编译原理是一门理论性很强的课程,从文法和语言的概念到LL(1)文法和LR(0)文法的分析,几乎都是对具体问题的抽象。这门课还包含许多理论知识和算法,这些理论的学习和理解都存在着一定的难度。其中理论知识包括:词法分析器的构造,语法中各种分析器(LR, LL,SLR,LALR 等)实现与完成。因而,我们需要更多的时间来理解、掌握相关的知识。在学习的过程中也存在这许许多多的问题,比如说由于我之前对文法的概念不够清晰,在后面老师讲解具体文法的方式式,感觉自己很难听懂,影响的自己后期的学习效率,也使得自己对这门课程的兴趣大大降低。此外,这门课程的课时也安排得不多,每个周也就一两次课,这样也不利于我们队这门课程的理解和掌握,但好在我后面通过自己做题和询问同学之后将词法分析和语法语法分析的方法弄懂之后,自己对这门课程的兴趣又提起来。除了自己课后对知识进行了总结之外,最重要的还是老师的讲解,师在有限的课程中尽量将知识点以比较容易接受的方式给我们讲解,教我们用简单的方法理解记忆不同的知识,这样我们学习起这门课程来也没有那么难了。
在我看来编译原理这门课程不仅仅在于其本身的理论价值,更在于为我们解决问题提供的思维方式和方法。从LL(1)到LR(0),问题不断被解决的同时,又有一个个新的问题提了出来。对计算机语言世界的知识积累,像滚雪球一样越滚越大。这个逐渐递进,逐渐解决问题的过程对我来说是收获很大的。整个过程好像踏着前人研究编译理论的路线,不断感觉他们遇到的问题,更重要的是他们解决问题的思路。编译原理的课程带给我的不只是如何去编译程序这样的理论知识,相信更重要的是一种如何“自动计算”的思路。通过对相关编译问题的具体分析,让我体会最深的是一种“自动计算”的思想,同时完成编译试验后,更是感到了一种“自动计算”的快乐。”然而我明白自己虽然对编译有了一定的了解,我懂得了文法的分析,学会了构造确定和非确定有限自动机,学会了LL(1)文法和LR(0)文法等,但是并没有完全掌握,对于这些知识点的实质性和其他方面,更是认识不深。作为一名学习计算机科学与技术的学生,我明白编译原理是软件工程的基础,课程的结束并不意味着学习的结束,只有通过以后的学习,才能更深入地了解编译原理,才能将编译原理更好地应用到以后的学习和工作中去。
最后,衷心感谢老师这一学期的辛苦教学,让我学到了许多颇为重要的知识。