有关编译原理的论文(精选12篇)
1.有关编译原理的论文 篇一
国际学院 0802 杨良燕 200819100227
《编译原理》课程学习心得
《编译原理》是计算机专业的一门重要课程,正如教材
第一章的引论所述,“编译程序是现代计算机系统的基本组成部分之一”。“一个编译程序就是一个语言翻译程序,语言翻译程序把一种语言(源语言)书写的程序翻译成另一种语言(目标语言)的等价程序”。
通过这一学期的学习,我觉得编译原理是一门理论性很强的课程,从文法和语言的概念到LL(1)文法和LR(0)文法的分析,几乎都是对具体问题的抽象。因而,我们需要更多的时间来理解、掌握相关的知识,当然在这一过程中也存在很多问题,比如我们后期学习具体文法的分析方法时,对于文法的概念不够清晰,影响了上课的效率,知道老师再次给我们讲解了文法等基础的知识点,我们才慢慢掌握后面所学的LL(1)文法等,也发现了知识点之间的关联。此外,这门课程的课时被安排得很少,一周只有一次,这样很不利于我们对这门重要课程的理解和掌握。但是我觉得我们很幸运,因为老师在有限的课程中尽量将知识点以比较容易接受的方式给我们讲解,教我们用简单的方法理解记忆不同的知识,对于我们提出的问题,无论课上或是课外,老师一直是不厌其烦,甚至利用课余时间为我们讲解重要的难题。
编译原理这门课程不仅仅在于其本身的理论价值,更在于为我们解决问题提供的思维方式和方法。从LL(1)到LR(0),问题不断被解决的同时,又有一个个新的问题提了出来。对计算机语言世界的知识积累,像滚雪球一样越滚越大。这个逐渐递进,逐渐解决问题的过程对我来说是收获很大的。整个过程好像踏着前人研究编译理论的路线,不断感觉他们遇到的问题,更重要的是他们解决问题的思路。编译原理的课程带给我的不只是如何去编译程序这样的理论知识,相信更重要的是一种如何“自动计算”的思路。通过对相关编译问题的具体分析,让我体会最深的是一种“自动计算”的思想,同时完成编译试验后,更是感到了一种“自动计算”的快乐。”然而我明白自己虽然对编译有了一定的了解,我懂得了文法的分析,学会了构造确定和非确定有限自动机,学会了LL(1)文法和LR(0)文法等,但是并没有完全掌握,对于这些知识点的实质性和其他方面,更是认识不深。作为一名学习计算机科学与技术的学生,我明白编译原理是软件工程的基础,课程的结束并不意味着学习的结束,只有通过以后的学习,才能更深入地了解编译原理。
2.有关编译原理的论文 篇二
编译原理包含着计算机学科的一些基本知识和典型技术与方法, 是计算机科学与技术专业的一门主干课程。计算机语言由单一的机器语言发展到今天的数千种高级语言, 是因为有了编译技术, 编译原理技术是计算机科学中发展的最迅速、最成熟的一个分支。《编译原理》不仅介绍程序设计语言实现的技术, 而且介绍程序构建的一些相关理论知识, 如形式语言、自动机理论、语法制导及代码优化等理论, 理论性比较强难理解, 学生在学习的过程中困难重重, 如何让学生学好这门课是课程教学中面临的一个主要任务。
在教学过程中, 出现学生理解困难和学习效果不好主要有以下几点原因:
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.
3.编译原理课程设计任务 篇三
1设计报告的规范和要求
设计任务完成后写出实践报告。实践报告包括程序设计时考虑的算法和方法;调试过程中出现的问题和解决的措施;打印出程序清单和调试时所用的源程序。
2题目
词法分析器;语法分析器;
词法分析器的输出作为语法分析器的输入。
3算法
算法:选择最有代表性的语法分析方法,如算符优先法、递归子程序法和LR分析法;选择对各种常见程序语言都用的语法结构,如赋值语句,特别是表达式,作为分析对象,并且与所选语法分析方法要比较贴切。
语言:选用 C/C++ 语言的一个子集。
输出:对于所输入的算术表达式,不论对错,都应有明确的信息告诉外界。算术表达式中变量名可以是一般标识符,还可含一般常数、数组元素、函数调用等等。除算术表达式外,还可扩充分析布尔、字符、位等不同类型的各种表达式。加强语法检查,尽量多和确切地指出各种错误。
4.编译原理 形式语言题+答案 篇四
1.试分别构造产生下列语言的文法:(1){an#bn|n≥0}∪{cn#dn|n≥0};
(2)任何不是以0打头的所有奇整数所组成的集合。
答:(1)对应文法为G(S)=({S,X,Y},{a,b,c,d,#}, {S→X, S→Y, X→aXb|#, Y→cYd|# },S)
(2)G(S)=({S,A,B,I,J},{0,1,2,3,4,5,6,7,8,9}, {S→J|IBJ, B→0B|IB|ε, I→J|2|4|6|8, J→1|3|5|7|9},S)
2.对于下列的文法
S→AB|c
A→bA|a
B→aSb|c
试给出句子bbaacb的最右推导。
答:S=>AB=>AaSb=> Aacb=>bAacb=>bbAacb=>bbaacb
3.已知文法G[S]:
S->(AS)|(b)
A->(SaA)|(a)请找出符号串(a)和(A((SaA)(b)))的短语、简单短语和句柄。答:
因为S 不能 (a), 所以(a)不是文法的句型。没有短语、直接短语和句柄。
因为S (AS)(A(AS))(A((SaA)S))(A((SaA)(b))),所以(A((SaA)(b)))是文法的句型。短语:(A((SaA)(b))),((SaA)(b)),(SaA),(b)直接短语:(SaA),(b)句柄:(SaA)S
(A
S)
(A
S)
(S a A)(b)
4.试描述由下列文法所产生的语言的特点:(1)S→10S0
S→aA
A→bA
A→a(2)S→aSS
S→a
答:(1)本文法构成的语言集为:L(G)={(10)nabma0n|n,m≥0}。(2)由L(G)={a2n-1|n≥1}可知,该语言特点是:产生的句子是奇数个a。
附加题:试证明文法
S→AB|DC
A→aA|a
B→bBc|bc
C→cC|c
D→aDb|ab 为二义性文法。
答:因为存在句子:abc,它对应两个最右推导:
5.《编译原理》课程设计教学大纲 篇五
揭金良 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 各类文档写的很规范;
6.有关编译原理的论文 篇六
一、建构主义理论基础
建构主义也称结构主义, 最早起源于瑞士著名心理学家皮亚杰的“发生认识论”。皮亚杰认为个体的认知发展来自于内因和外因的相互作用, 通过同化与顺应两种形式建构成动态的认知结构, 在与周围环境“平衡———不平衡———新的平衡”的循环中不断得到促进, 达到一种平衡的认知状态。该理论的核心是:以学生为中心, 强调学生对知识的主动探索、主动发现和对所学知识的意义的主动建构。
建构主义理论指导下的教学主体在教学过程中的职能与传统的不同:知识不是通过教师传授得到的, 而是学习者在一定的情境即社会文化背景下借助获取知识的过程中其他人 (包括教师和学习伙伴) 的帮助, 利用必要的学习资料, 通过意义建构的方式而获得的。教学不是传授、灌输知识的活动, 而是一个激发学生建构意义的过程。教师的价值就体现在能够激励学生以探究、合作等方式进行学习, 教师是学生学习的引导者、辅助者和学习资料的提供者。这就要求学生在学习过程中发挥主体作用, 主动去搜集、分析有关的信息和资料, 对学习中的问题提出各种假设并努力加以验证, 同时要把学习的内容尽量和自己已经掌握的知识相联系, 加以思考, 从而参与协作学习。
二、建构主义理论指导下教学内容的取舍
为帮助学生对编译理论的理解和对实际编译器的剖析, 教师要指导学生对编译器代码进行阅读, 加深他们对抽象理论和算法的理解。同时, 要删除一些理论证明, 弱化代码优化和中间代码生成, 缩短从理论到实践的距离。
建构主义认为个体的主动性在建构认知结构过程中起着关键作用, 而实践教学正是学生主动参与最多的一个教学环节。目前, 大多数高校编译原理课程的实践环节都是要求学生能使用计算机编译一个小型程序。这样就不能让学生看到编译原理在实际中的应用, 导致很多学生认为学习编译原理就是为了设计编译器。这对他们走上工作岗位后没有太大帮助, 而且对于多数学生来说, 他们会早早就放弃努力, 无法达到练习的目的。建构主义认为学习者往往以自身已有的经验和知识为基础, 通过新经验与已有经验的相互作用而不断充实、改造和丰富自己的经验和知识, 因此新知识的建构只有建立在已有知识的基础上才能收到良好的建构效果。于是, 教师可以选择一个C语言的子集作为分析对象, 让学生根据自己的情况选择合适的子集, 放弃以往常用的类PASCAL语言。另外, 教师要充分考虑编译原理在实际中的应用, 突出编译原理的实用性, 鼓励学生把学习的知识用于实现一些小的实践项目, 增加一些具有一定实际价值的实验选项, 激发学生的学习兴趣, 帮助学生促进意义建构的完成。
三、基于建构主义理论的编译原理教学实践
建构主义学习理论认为情境、协作、会话和意义建构是学习环境中的四大要素;学习环境中的情境必须有利于学生对所学内容的意义建构;协作发生在学习的整个过程, 对学习资料的搜集与分析、假设的提出与验证、学习成果的评价和意义的最终建构均有重要作用;会话是协作过程中不可缺少的环节, 学习小组成员之间必须通过会话商讨如何完成规定的学习任务计划;意义建构是整个学习过程的最终目标。建构主义教育理论倡导以学生为中心, 而教师在整个教学过程中起着组织者、指导者、帮助者和促进者的作用, 利用情境、协作、会话等学习环境, 充分发挥学生的主动性、积极性和创造精神, 最终达到使学生有效地实现对当前所学知识的意义建构的目的。
1. 创设情境
编译系统大而复杂, 编译理论深奥而抽象, 所以学生刚接触这门课时仅是对某种高级语言的基础知识有所了解, 并不了解高级语言是如何使用的, 而且一部分学生在学习之初会认为这是一门纯理论的课程, 从而失去学习兴趣。因此, 教师若能运用一个实例让学生看到编译程序在程序开发平台中所处的地位, 就会使学生自然而然地了解编译、语法、语义及错误检查和处理的概念性问题, 激发起他们强烈的好奇心和学习积极性。
编译器技术部分主要包括一些经典算法, 这些算法抽象复杂, 不易理解。对此, 教师如果采用传统的讲课方式, 势必让学生知难而退。教师要想收得良好的教学效果, 就要借助多媒体技术, 用图形图像把抽象的理论形象化, 寓教于乐, 从而培养学生的学习兴趣。
2. 自主学习
自主学习是建构主义理论中以学生为中心进行教学设计的核心内容, 但教师的主导地位也不能忽视。在学生自主学习的过程中, 教师要向学生提供解决问题的有关线索, 如需要搜集哪些资料、如何获取相关信息等。对于学生自学起来较容易的内容, 教师要采用指导学生备课、讲解和教师总结的方式进行。这样, 可以激发学生的参与热情。
3. 协作学习
在实践教学环节中, 教师根据学生的能力、性别, 采用互补的搭配方式把学生分为若干小组, 然后在每组设小组长负责实验的学习讨论并对各成员进行分工。在实践期间, 学生和学生、学生和教师之间互相讨论、交流, 有利于各种观点的碰撞, 使学生从中受到更大的启迪。
4. 展示交流
每一次实践结束后, 各个小组以小组长为代表汇报作业情况, 由其他小组自由提问, 以实现各小组之间的交流。实践证明, 这种各组分享实践成果、互相借鉴的做法可以提高学生解决问题的能力。最后, 大家共同选出优秀小组, 以此更好地激发大家的学习兴趣。
5. 教学评价
建构主义教学模式强调发展性评价, 即教学评价更重视学生是否完成了对新知识的意义构建、发展了创造性思维。在实践教学中, 教师应坚持对学生进行发展性评价, 即更注重学生的学习过程和学习能力的提高, 注重学生的思维能力尤其是创造性思维和反思能力的培养。学生完成实验是一个特别能体现能力发展的过程, 从课前准备到课堂操作再到课后讨论, 每个学生的能力和优势都得到了发挥。这个过程使教师获得了足够的评价空间, 同时更激发了学生的学习积极性和创造热情。学生的创造性思维会因为发展性评价而得到最大限度的发挥。当教师更关注学生的学习过程而非结果时, 学生更易获得自信, 这必然推动学生不断提高创造性思维能力。
实践证明, 将建构主义教学模式和方法应用于编译原理课程, 可以使学生不再是被动的学习者, 而是教学活动的积极参与者。这就能够增强学生的学习积极性, 提高他们的学习兴趣, 帮助他们打牢理论基础。同时, 通过编程技能的训练, 学生具备了较强的实践能力, 做到学以致用, 真正收到良好的学习效果。
参考文献
[1]何克抗.建构主义的教学模式、教学方法与教学设计[J].北京师范大学学报 (社科版) , 1997, (5) .
[2]张建伟, 陈琦.从认知主义到建构主义[J].北京师范大学学报 (社科版) , 1996, (4) .
[3]薛国凤.建构主义教学理论的实践影响及效果分析[J].外国教育研究, 2003, (11) .
[4]莫雷.教育心理学[M].广州:广东高等教育出版社, 2003.
7.编译原理课程和助教工作总结 篇七
时间如流水般,转眼,一学期将至,每个人为了能交上一份满意的答卷,无时无刻不在倾注着汗水,挥洒着热泪。掩卷长思,细细品味,这学期的点点滴滴不禁又浮上心头,现在让我们一起回顾一下,希望可以对今后的教学工作有所帮助。
编译原理是我们北京师范大学信息科学与技术学院计算机专业本科生的专业必修课,它旨在介绍编译程序构造的一般原理和基本方法,其内容主要包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成等。这门课程关注的是编译器方面的产生原理和技术问题,似乎和计算机的基础领域不沾边,但是编译原理课程是所有计算机专业学生应该习得的一门重要课程,因为虽然在将来并不是所有人都会从事编译方面的工作,但是通过编译原理的学习之后,可从许多不同的角度来观察编译器的结构,编译器的物理结构、操作的顺序等等,会涉及到数据结构、计算机组成原理等课程,所以同学们在理论、技术和方法上都能得到系统而有效的训练,而且有利于将来希望从事软件开发的学生的相关素质和能力的进一步提高,更能够让每个学生更清楚的了解和熟悉一段程序从源代码到可执行文件之间具体的转换过程,这样能够更好的理解代码的编译和计算机内部的工作原理,对学生以后计算机相关的学习乃至工作从业都会有非常大的帮助。
编译原理这门课程是计算机专业课程中偏难的一门课,不管是在平时的课堂教学上,还是在上机实验的过程中,学生都会产生很多困惑之处,在这些方面我们的编译原理助教就承担了相当重要的工作和任务:
每周课堂随堂听课,跟进教学进度,并且上课之前做好复习工作,对每节课同学们可能会产生的问题提前做好归纳,以便更好的在课余时间跟同学们讨论,给同学们提供答疑解惑的机会;
能动手编写代码完成变异原理实验是本课程技能培养的重要一环,在每周的上机实验时,助教帮助同学们进行分组,以小组合作的方式来完成每次的实验任务,依照课程进度循序渐进的给同学们分派布置实验任务,在实验课上跟同学们随时交流,一同调试代码,一对一的解答实验疑惑等,并且协助同学们理解实验原理和内容,辅助同学们能够顺利完成上机实验,通过上机实验的手动操作,同学们也可以更直接、更具体的理解编译程序代码过程中一些具体的原理和方法;实验课我选取的是基于C++或者是基于flex和bison的实验,助教会主动和实验课本的作者老师联系沟通,获得更多实验相关的资料,比如书上给出代码的电子版和用例测试等。
助教在课后会主动收集同学们课堂上课或者实验过程中遇到的问题向我反映,这样可以及时发现同学们在课堂中理解较为模糊甚至有偏差的地方,并在课堂或者实验课上进行一个集中的讲解,更利于同学们的学习;
每次课结束之后,我会布置课后作业来让同学们对课堂教学内容进行巩固和查漏补缺,助教认真批改同学们的课后作业、所交的实验报告和运行的代码,做好每位同学的评分与登记,对课后作业、实验报告和代码中关键性的错误做出标记,并要求学生改正。登记课后成绩时,按10分制来决定,登记实验成绩时按照20分制来决定。在每次批改作业结束后,助教会及时整理,汇总学生的成绩和作业实验中出现的问题,助教通过批改课后作业和实验来了解同学们真实的学习情况,从而能够更好的辅助教学工作的进行。
平时为了同学们能获得更好的学习体验,会进行一些与国外教授的视频课程或者相关活动等,助教会组织同学们进行视频授课前的预习工作,同大家一起讨论上课形式,提出可能遇到的问题等等,在课前会负责批教室,布置桌椅场地,设置视频授课环境,调试摄像头、话筒和音响等相关的设备,为进行正常的视频授课或其他活动做准备。
对自己的要求:
一、师德方面:加强修养,塑造“师德”,我始终认为作为一名教师应把“师德”放在一个极其重要的位置上,因为这是教师的立身之本。“学高为师,身正为范”,这个道理古今皆然。从踏上讲台的第一天,我就时刻严格要求自己,力争做一个有崇高师德的人,为每一个学生“传道授业解惑”。
二、认真备课,不但备学生而且备教材备教法,根据教材内容及学生的实际,设计课的类型,拟定采用的教学方法,并对教学过程的程序及时间安排都作了详细的安排,认真写好教案。每一课都做到“有备而来”,每堂课都在课前做好充分的准备,并制作各种有利于吸引学生注意力的有趣教具,课后及时对该课作出总结,并认真搜集每课书的知识要点,归纳总结。
三、增强上课技能,提高教学质量,使讲解清晰化,条理化,准确化,生动化,做到线索清晰,言简意赅,深入浅出。在课堂上特别注意调动学生的积极性,让学生多动手,从而加深理解掌握知识。加强师生交流,充分体现学生的主动作用,让学生学得容易,学得轻松,学得愉快;注意精讲精练,在课堂上老师讲得尽量少,学生动口动手动脑尽量多;同时在每一堂课上都充分考虑每一个层次的学生学习需求和学习能力,让各个层次的学生都得到提高。
四、认真批改作业:布置作业做到精读精练。有针对性,有层次性。同时对学生的作业批改及时、认真,分析并记录学生的作业情况,将他们在作业过程中出现的问题作出分类总结,进行透切的评讲,并针对有关情况及时改进教学方法,做到有的放矢。对学生:
8.有关编译原理的论文 篇八
课程编号:07114180 适用专业:计算机科学与技术系计算机应用专业(软件本科)
学时数:34(理论学时数:10 实验或讨论学时数:48)学分数:2 执笔者:周有顺 编写日期:2004年2月 执行时间:2003年以后入学的年级
一、课程的性质和目的
编译原理实践设计是计算机科学与技术专业学生的专业必修课。
系统软件是计算机系统的重要组成部分。本课程是在学习系统软件的组成、设计原理和实现方法的基础之上,设计并上机实现部分系统软件----编译程序。目的在于完成相关课程从理论到实践的推进,使学生真正掌握计算机信息处理的实质,提高其专业素质及驾驭各种系统软件和应用软件的能力。
二、课程教学内容
编译程序设计与实现的目的:
了解编译程序的组成及各部分的基本任务; 掌握编译程序各部分的设计原理和实现方法; 体会理论内容与具体实践之间的关系。
第一章 课堂教学内容要点
(1)编译过程概要:(4学时)
词法分析、语法分析、语义分析及中间代码生成、目标代码生成等各部分的具体实现算法;符号表管理、错误信息处理的具体实现方法;上述各部分之间的数据及信息的传递与交流。
(2)编译程序实现途径(6学时)
编译程序的书写语言与T型图;编译程序的自展技术;编译程序的构造工具。
第二章 实践内容概要(上机部分)(24学时)
(1)实验型语言源文法(略)。(2)编译程序的设计目标
①设计该语言的词法分析程序和语法分析及语义分析程序,词法分析程序和语法分析程序分别作为一遍编写,并生成二元式和中间代码四元式形式。
②在语法分析中,对各语句和布尔表达式的分析采用递归下降分析,对算数表达式的分析采用算符优先分析。
③程序中应包括符号表管理和简单的出错处理。词法分析出错处理包括非法字符和非法单词;语法分析出错处理包括简单的语法错误,即程序结构不符合语法规则的错误。
④将中间代码四元式生成8086/8088汇编语言的目标代码形式。(选做)(3)程序调试
用上述语言编写程序,求函数的值。(4)文档要求
①画出该语言文法的语法图。
②写出编译程序中所使用的主要数据结构(二元式表,四元式表和符号表)。③给出该语言的编译程序的各模块的结构图。
④调试上述程序,并分别给出无错误信息和有错误信息的调试结果,即二元式表和四元式表。
三、课程教学的基本要求
本课程是编译原理的后续课程,完成课程的实践部分。因此教学上应着重强调理论与实践的关系,理论内容如何付诸实践,如何利用理论知识去解决实际问题等,以达到学生实践能力的提高。
Project for Compiler System
四、本课程与其它课程的联系与分工
先修课程:汇编语言,操作系统,编译原理等
五、建议教材与教学参考书
[1]
蒋立源,《编译原理》,西北工业大学出版社,1997 [2]
9.《编译原理》课程教学改革探讨 篇九
编译原理课程主要介绍编译程序构造的一般原理、基本设计方法、主要实现技术和一些自动构造工具。虽然大多数的程序设计和开发人员不需要写自己的编译器, 也不一定非读懂任何编译器的代码, 但是编译程序构造的基本原理和技术广泛应用于一般软件的设计和实现。因此掌握好编译原理这门课程, 可以深层次地理解程序语言和内部机制, 对以后从事计算机项目开发, 很多思想可以借鉴, 受益匪浅。
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期
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) .
11.有关编译原理的论文 篇十一
重点:自底向上分析的基本思想,算符优先分析法的基本思想,简单算符优先分析法,LR分析器的基本构造思想,LR分析算法,规范句型活前缀及其识别器――DFA,LR(0)分析表的构造,SLR(1)分析表的构造,LR(1)分析表的构造。
难点:求FIRSTOP和LASTOP,算符优先关系的确定,算符优先分析表的构造,素短语与最左素短语的概念。规范句型活前缀,LR(0)项目集闭包与项目集规范族,它们与句柄识别的关系,活前缀与句柄的关系,LR(1)项目集闭包与项目集规范族。
5.1 自底向上语法分析的核心问题:
n寻找句型中的当前归约对象――“句柄”进行归约,用不同的方法寻找句柄,就可获得不同的分析方法5.2 计算FIRSTOP:
若有产生式 B -> b... 或 B -> Cb , 则 b ∈ FIRSTOP(B)
若有产生式 A -> B,,, 则有,FIRSTOP(B) ? FIRST(A)
5.3 计算LASTOP:
若有产生式 B -> ...b 或 B -> ...Cb, 则 b ∈ LASTOP(B)
若有产生式 A -> ...B 则有 , LASTOP(B) ? LASTOP(B)
5.4 分析器的4个动作:
1)移进:将下一输入符号移入栈
2)归约:用产生式左侧的非终结符替换栈顶的句柄(某产生式右部)
3)接受:分析成功
4)出错:出错处理
5.5 算符优先文法识别的其实是LPP(最左素短语)
LR识别的其实是活前缀(这个前缀不含相应句型的句柄右部的任何符号)
5.6 素短语:
1.素短语是一个短语
2.它至少包含一个终结符
3.除自身外,不再包含其他终结符的短语
nLR(0)分析法不需要向前查看输入符号,只需要根据当前的栈顶状态就可以确定下一步所应采取的动作LR(0)项目集:右部某个位置标有圆点的产生式称为相应文法的LR(0)项目
n归约(Reduce)项目:S→bBB.n移进(Shift)项目:S→.bBBn待约项目:S→b.BB S→bB.B
CFG不总是LR(0)文法.
SLR(1):向前查看一个输入符号,判断当前是否可以归约
LR(1):
测试:
文法:S => 0S0
S => 1S1
S => 01
1. 计算该文法的SLR(1)项目集规范族,
构造识别其所有规范句型活前缀的DFA
2. 该文法是SLR(1)文法吗?若是,给出其SLR(1)分析表,
若不是,说明理由,
1.
S‘ -> .S
S‘ -> S.
S -> .0S0
S -> 0.S0
S -> 0S.0
S -> 0S0.
S -> .1S1
S -> 1.S1
S -> 1S.1
S -> 1S1.
S -> .01
S -> 0.1
S -> 01.
12.有关编译原理的论文 篇十二
关键词:编译原理,案例驱动,LL (1) 文法
计算机语言之所以能由单一的机器语言发展到现今的命令式编程语言、面向对象的编程语言、函数式编程语言和逻辑式编程语言, 就是编译技术的支持。学生对编译技术已经不再陌生, 如何激发他们从事编译器开发的热情, 进而发展我国的汉语编程语言, 把我国的IT行业发展到国际先进水平, 是我们教学过程中亟待解决的问题。
编译技术中, 自顶向下的语法分析分为预测分析和递归下降分析。预测分析中最常用的是LL (1) 分析, 其中第一个L表示从左向右扫描输入串, 第二个L表示最左推导过程。给定一个文法如何判定它是否是LL (1) 的, 这个问题一直是我们教学过程中的一个重点, 同时也是一个难点, 可能有些老师也会觉得, 自己明明讲的很清楚了, 学生在实际判定过程中怎么还觉得困难呢。问题的关键是我们是采用什么样的案例, 怎么引入, 以及怎么总结的。笔者就根据自己多年的教学总结, 来谈谈这个问题, 希望给老师和同学一个借鉴。
1 LL (1) 文法的引入
自顶向下的语法分析的思想是, 从文法的开始符号出发, 为符号串构造一个最左推导过程, 如果成功, 说明符号串是给定文法可以产生的。因此, 我们仍然以推导为主线, 看一下, LL (1) 到底要满足什么样的条件。
(1) 考虑文法G[A]:
和符号串yxxx。
G[A]的第一个产生式是左递归, 在推导yxxx符号串时, 分析程序无法通过有穷的向前看符号, 了解需要应用几次递归后才选择一条可令递归终止的产生式。
(2) 如果一个文法没有递归产生式, 是否就能顺利推导呢?考虑文法G[S]:
G[S]没有递归产生式, 但在推导符号串abacb时, 从文法的开始符号S开始, 为了匹配第一个字符a, 由于S只有一个产生式, 可以选择a Ab, a匹配成功。为了匹配第二个字符b, 需要将A替换, 但A有两个产生式并且都以b开始, 就存在不确定选择哪个产生式的问题, 必须进行回溯才能确定这个符号串是否是该文法可以产生的。因此, 一个文法没有左递归但有左因子也是不能顺利推导的。
(3) 如果一个文法不含左递归和左因子, 是否就能很顺利地进行推导呢。考虑文法G[P]:
在输入串abc的推导过程中, P有两个候选式Bc和ad, 对于Bc, 要看B的候选式a A和b, 因此, P的两个候选式Bc和ad, 都是以a开始的, 因此, 当文法中同一个非终结符的候选式的First集有交集也不能很顺利地进行推导。
(4) 如果一个文法不含左递归、左因子、候选式的First集也没有交集, 是否就能很顺利地进行推导呢。考虑文法G[Q]:
在输入串cca的推导过程中, 第一个字符是c, 对于Q的两个候选式, 选择以c开始的, 但Q的两个候选式是以A和B开始的, 考虑A和B中以c开始的, 有c A, 因此选择Aa, 第一个字符匹配成功, 第二个字符是c, 选择c A, 第三个要匹配a, A中有定义a的候选式, 如果选择, 就多了一个符号a, 只能选择ε。原因就是A的候选式的First集和A的Follow集有交集a。
因此, 通过前边几个文法的举例, LL (1) 文法的判定就可以总结为:
(1) 文法中不能有左递归的产生式;
(2) 文法中不能有左因子;
(3) 对于一个非终结符来说, 如果它有多个候选式, 并且都不为空, 那么要求候选式的FIRST集合不能有交集.
(4) 对于一个非终结符来说, 如果它有多个候选式, 并且有定义为空, 那么要求候选式的FIRST集合和这个非终结符的FOLLOW不能有交集。
2 LL (1) 文法的判定
对于 (1) (2) 这两个条件是否满足要求, 我们是可以从文法中直观的看出来的, 但是 (3) 是要通过求FIRST集合, (4) 要通过求FIRST集合FOLLOW集合才能判断。因此, 我们要总结FIRST集合的构造方法和FOLLOW集合的构造方法。
2.1 FIRST集合和FOLLOW集合的构造方法
同样要以文法为例, 直观的说明。考虑G[E]:
FIRST集合的构造方法:
(1) 对于F→i这样的产生式, F的候选式i是一个终结符, i不经过推导就能见到第一个终结符, 所以FIRST (i) ={i};
(2) 对于F→ (E) 这样的产生式, 虽然F的候选是 (E) 不是一个终结符, 而是终结符和非终结符组成的符号串, 但是 (E) 是以终结符 (开始的, 所以它的FIRST集合也不难求, FIRST ( (E) ) ={ (};
(3) 对于E→TA这样的产生是, E的候选是是以非终结符开始, 我们直观上是看不到第一个终结符, 因此, 我们就应该根据最左推导的思想替换T, 因此, 第一个终结符要有T推导产生, 也就是需要FIRST (T) , 因为T→FB|ε, 所以FIRST (T) =FIRST (F) ∪{ε}={ (, i, ε}。由于T→ε那么TA=εA=A, E→TA就变成了E→A, FIRST (TA) =FIRST (A) ={+, ε}。因此, FIRST (TA) =FIRST (T) -{ε}∪FIRST (A) = ({, i}∪{+, ε}
FOLLOW集合的构造方法:
(1) 对于文法的开始符号S来说, 有#∈FOLLOW (S) .
(2) 对于F→ (E) 这样的产生式来说, 非终结符E后有终结符) , 因此, ) ∈FOLLOW (E) 。
(3) 对于T→FB这样的产生式来说, 非终结符F后有非终结符B, 因此, F后的第一个终结符要有B推导产生, 因此, FIRST (B) ∈FOLLOW (F) 。
(4) 对于T→FB这样的产生式来说, 非终结符B后既没有终结符, 也没有非终结符, 那能不能说明ε属于FOLLOW (B) 呢?不能。我们看看B是怎么出现的。E=>TA=>FBA, 从文法的开始符号出发经过两步推导, 就能出现B, 这个时候我们看到B后是A, 它和T后的符号相同, 因此, FOLLOW (T) ∈FOLLOW (B) 。
2.2 LL (1) 的具体判定过程
FIRST集合和FOLLOW集合的构造方法已经总结, 通过实例说明, 大家也不觉得太困难了, 但是对一个文法来说, 要判定一个文法是不是LL (1) 的具体应该怎么做呢, 我们仍以文法G[E]为例来进行说明。
对于F→ (E) |i, FIRST ( (E) ) ∩FIRST (i) ={ (}∩{i}=Φ
因此, G[E]是LL (1) 文法。
由于上边这种描述形式很不直观, 会出现求集合不全的现象。如果采用表格法把同一个非终结符定义的不同产生式都写在一个方格里, 并且分别表示。对于一个非终结符来说, 如果它的候选式不包含空, 我们只需比较候选式的FIRST集是否有交集, 如果它的候选式包含空, 只需比较FIRST集和FOLLOW是否有交集。很显然这样会比较直观。
3 小结
以LL (1) 文法的判定为例, 将案例驱动法引入教学过程中, 使得抽象的理论变得具体, 这是在编译原理课程教学中行之有效的方法。因此, 教师要多研究案例, 把课程内容的讲解变的引人入胜, 从而提高教学质量, 提高学生的编译能力, 促进我国的IT事业的发展。
参考文献
[1]张亚娟, 冯灵霞, 王学春.编译技术的发展及应用[M].软件导刊, 2010, (9) :78-80.
[2]蒋立源, 康慕宁.编译原理[M].3版.西安:西北工业大学, 2007.
[3] (美) Thomas Pittman, James Peter.编译程序设计艺术:理论与实践[M].李文军, 高晓燕, 译.北京:机械工业出版社, 2010, 1.
【有关编译原理的论文】推荐阅读:
编译原理课程06-15
编译原理期末总结08-06
《编译原理》课程设计要求08-08
编译原理实验二(设计一个词法分析器)09-20
有关企业文化的论文06-28
有关教育名著的论文08-26
有关写字教学的论文11-03
和李白有关的论文01-02
有关中国历史的论文01-03
有关危机的议论文06-27