编译原理实用论文

2024-08-22

编译原理实用论文(共8篇)

编译原理实用论文 篇1

编译原理实验报告

报告完成日期 2018.5.30

一. 组内分工与贡献介绍

二. 系统功能概述;

我们使用了自动生成系统来完成我们的实验内容。我们设计的系统在完成了实验基本要求的前提下,进行了一部分的扩展。增加了声明变量类型、类型赋值判定和声明的变量被引用时作用域的判断。从而使得我们的实验结果呈现的更加清晰和易懂。

三. 分系统报告;

一、词法分析子系统

词法的正规式:

标识符

<字母>(<字母>|<数字字符>)* 十进制整数

0 |(1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)* 八进制整数 0(1|2|3|4|5|6|7)(0|1|2|3|4|5|6|7)* 十六进制整数 0x(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)* 运算符和分隔符 +| * | / | > | < | = |(|)| <=|>=|==; 对于标识符和关键字: A5—〉 B5C5 B5—〉a | b |⋯⋯| y | z C5—〉(a | b |⋯⋯| y | z |0|1|2|3|4|5|6|7|8|9)C5|ε 综上正规文法为: S—〉I1|I2|I3|A4|A5 I1—〉0|A1 A1—〉B1C1|ε C1—〉E1D1|ε D1—〉E1C1|ε

E1—〉0|1|2|3|4|5|6|7|8|9 B1—〉1|2|3|4|5|6|7|8|9 I2—〉0A2 A2—〉0|B2 B2—〉C2D2 D2—〉F2E2|ε E2—〉F2D2|ε

C2—〉1|2|3|4|5|6|7 F2—〉0|1|2|3|4|5|6|7 I3—〉0xA3 A3—〉B3C3 B3—〉0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f C3—〉(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)|C3|ε

A4—〉+ |-| * | / | > | < | = |(|)| <=|>=|==; A5—〉 B5C5 B5—〉a | b |⋯⋯| y | z C5—〉(a | b |⋯⋯| y | z |0|1|2|3|4|5|6|7|8|9)C5|ε

状态图

流程图:

词法分析程序的主要数据结构与算法

考虑到报告的整洁性和整体观感,此处我们仅展示主要的程序代码和算法,具体的全部代码将在整体的压缩包中一并呈现

另外我们考虑到后续实验中,如果在bison语法树生成的时候推不出目标的产生式时,我们设计了报错提示,在这个词的位置出现错误提示,将记录切割出来的词在code.txt中保存,并记录他们的位置。

以下是我们的主要代码:

进制的识别:

结果展示:

二、语法分析子系统

根据选择的语法分析方法进行描述

我们使用了递归子程序发,并且对原有的产生式进行了改写,改写后的结果如下: P→LP1|L L→S

S→id=E|{P}|if C then S | if C then S

1else S2 | while C do S1 C→E1C’

C’→>E2|

E→int8E’| int10E’| int16E’| idE’|T E’→+T|-T||+TE’|-TE’

T→int8T’| int10T’| int16T’| idT’|F T’→*F|/F|*FT’|/FT’

F→(E)|int8|int10|int16|id

简化的语法图: S的语法图:

C的语法图:

E的语法图:

T的语法图:

F的语法图:

流程图:

语法分析子系统的主要数据结构与算法

我们采用了自动生成技术,同样在这里也是展示主要的核心功能代码,全部的代码展示在压缩包中:

我们在设计时,实现了产生式对应的字符串同时标识产生式定义的int值 辅助程序:

生成语法树的程序:

1.树节点:

2.创建新节点

3.创建实数类型新节点

4.创建标识符类型新节点

5.输出语法树 三、三地址码生成器

算法的基本思想:

我们增加了声明变量类型、类型赋值判定和声明的变量被引用时作用域的判断。从而使得我们的实验结果呈现的更加清晰和易懂。

在报错的时候,我们会呈现类型、作用域和赋值三种的问题的报错信息。

流程图:

算法展示:

四、实验体会

这次实验其实总的来说是让我们更加清晰的理解到了我们所学的内容。有时候我们上课听讲,课下复习写作业的时候,其实看似掌握了所学内容,但实际上并没有亲身体会的操作很难让我们深刻的理解其中的相关意义。通过这次实验,我们能够从根源处了解到了我们所学的内容,并且基于我们理解之后的输出。比如词法分析不能采用空格来区分单词,因为存在加减乘除等运算符和分隔符,使用空格来区分可能会造成错误的分解。又比如我们再在程序设计中,常常体会到效率的重要性。影响词法分析的效率的主要因素是各个状态的分支如何规划。如果每个进来的单词都能在最短的时间和最少的匹配次数内找到其入口,则效率将得到很大程度上的提高。所以由此我们产生了声明变量类型、赋值和作用域的想法,将其放在最后来进行判断,这样可以提高整体的执行效率。

另外,这次小组成员彼此不在一个班级,这样从某一方面来说,也加强了我们互相快速熟识并团结协作的能力,有了这种体验,我想我们在今后的生活中,面对这种情况的时候,将会变得更加有经验。

五、源程序

词法分析器: 输入结果:

输出结果:

语义分析结果:

输入:

第二组数据的输入:

输出:

三地址码的输入:

第二组数据的输入:

输出:

编译原理实用论文 篇2

编译原理是高等院校计算机专业继“数据结构”、“计算机原理”等专业基础课之后的又一门重要的专业基础课, 以形式语言与自动机理论为基础, 讨论编译程序构造的基本原理[1]、基本设计方法和主要实现技术。通过本课程的学习, 能深化学生对计算机信息处理本质与计算机工作过程的认识, 加深对程序设计语言的理解, 为后继专业课程的学习奠定坚实的理论基础, 并将编译程序构造的基本原理和技术应用于一般软件的设计。因此, 努力提高这门课的教学效果, 使学生真正掌握这门课的精髓, 并应用到实践中去, 具有非常重要的现实意义。

1 编译原理课程现状与问题

编译原理课程由于理论性强, 具有严密的逻辑性, 应用其他课程的知识较多, 学生在学习过程中感到内容抽象、算法复杂、难于理解, 学习起来有一定的难度, 因此, 编译原理被普遍看做是计算机专业本科教学中最难讲解、最难学习的课程之一, 在教学上不同程度的存在以下几个问题。

1.1 理论知识抽象难懂, 学生有畏惧心理

这门课程主要讨论编译的基本理论和编译器构造的基本方法, 涉及的理论知识抽象、难懂, 如形式语言与自动机理论、语法制导翻译以及各种算法, 又综合运用到前面所学的相关课程的知识, 确实具有相当的难度, 使得学生产生了畏惧心理。此外, 不少学生认为学习这门课将来只能用于编译器的设计上, 而大多同学将来都不太可能去从事编译器的设计工作, 因此普遍认为这门课没有用, 学习热情不高。

1.2 理论课教学方式陈旧单一

目前, 编译原理的理论课大多以老师讲解为主, 很少辅之以其他形象生动的教学手段, 教学内容又大多是抽象的概念和复杂的算法, 老师和学生之间的互动很难形成, 学生觉得枯燥乏味, 慢慢就失去了学习的兴趣, 难以达到良好的教学效果[2]。

1.3 实验内容脱离实际, 不够合理

这门课程的实践环节大多要求实现一个小型语言的编译程序, 而实现一个编译程序不仅要有相关的理论知识, 更需要丰富的实践经验, 熟悉硬件系统和操作系统的功能, 对于大多数同学来说, 编程能力都相对欠缺, 实现编译程序基本是不可能完成的任务。因此, 大多同学在实验时碰到的困难太多, 无从下手, 干脆放弃努力, 也就失去了实验的意义。

2 教学探讨

2.1 帮助学生克服畏惧心理, 培养学习兴趣

根据这门课程抽象难懂的特点, 首先要帮助学生克服畏惧心理, 才能发挥他们的学习主动性。这门课的先行课程如“数据结构”、“离散数学”、“高级程序设计语言”等都是学生已经学习过的课程, 学生实际已经具有相应的能力, 老师需要的是帮助学生分析他们已经掌握的知识, 让学生对自己有足够的了解, 明白以他们已掌握的知识为基础, 有足够的能力学习掌握编译原理这门课程, 在学习之前首先消除畏惧心理。

编译程序涉及的算法、思想和实现技术除了设计编译器以外也可广泛应用于一般软件的设计实现[3], 如文本编辑器、信息检索系统、模式识别器等, 对提高学生程序设计能力和开发大型软件的能力是十分有益的。教师可以鼓励学生尝试将编译程序中的各种算法和技术应用到各个领域, 以培养学习兴趣, 激发学生的创造性思维, 培养学生的创新能力。

2.2 采用案例式教学, 把抽象问题具体化

编译原理中涉及的大量概念和算法都过于抽象, 学生理解起来非常困难, 要想获得良好的教学效果, 必须借助实例, 使抽象问题具体化。例如, 词法分析部分主要阐述词法分析器的工作原理和构造方法, 相关概念和算法较多, 可以通过一个具体的程序范例进行教学。通过编写一个读单词过程, 从输入的源程序中, 识别出各个具有独立意义的单词, 即基本保留字、标识符、常数、运算符、分隔符五大类, 并依次输出各个单词的内部编码及单词符号自身值。在课堂上通过程序的运行来展示词法分析器的工作过程。通过实例教学, 学生既加深了对理论知识的理解, 也提高了学习的积极性。

2.3 注重启发式教学, 培养学生独立思维能力

传统的教学注重教师的讲解, 学生被动的接受知识, 不利于学生思维能力的培养[4]。我们在教学中, 特别注重启发式教学, 引导学生去思考探讨。启发式教学需要教师有目的的设计问题, 有意义的提出问题, 通过问题把知识点引导出来, 学生通过思考回答问题, 寻找解决问题的途径和方法, 加深对知识点的理解。例如, LR分析法是语法分析中较难的部分, 其中包含了四种不同的分析表构造方法, 学生不好理解。在讲解时先给出LR (0) 分析表的构造方法, 引导学生发现其中的不足并进行改进, 从而引出SLR分析法, 再进一步引导学生发现SLR方法的不足, 引出LR (1) 分析法, 同样的方法引出LALR分析法。通过这样的启发式教学, 不仅破解了教学难点, 也引发了学生探究的兴趣。

通过启发式教学, 培养了学生独立思考问题、发现问题、解决问题的习惯和自主能力。学生也在这个过程中通过自己的学习活动获取知识, 发展能力。

2.4 现代化教学手段和板书相结合, 提高学习效果

编译原理课程内容抽象, 知识点多, 要想取得良好的教学效果, 必须借助形象化的教学手段, 构建多媒体环境下的教学环境。利用多媒体设施、电子教案、教学网站等多种途径把知识化静为动, 寓教于乐。为此, 我们精心编制了多媒体课件, 用Flash技术制作了动画, 可以生动形象的演示抽象概念和复杂算法。这样不仅激发了学生的学习兴趣, 也加深了学生对理论知识的理解。但是采用多媒体教学也不能完全抛弃板书, 因为板书灵活, 可以随时补充。所以在教学中应做到多媒体教学和传统的板书教学相结合。

2.5 精心设计课程实验, 加强学生实际应用能力

编译原理是一个理论和实践并重的课程, 但是如何组织实验内容始终是教学中的一个难题[5]。目前普遍的做法是实现一个小型语言的编译程序, 而这并非一件容易的事情, 对于编程能力都还欠缺的学生来说, 实现完整的编译程序基本是不可能完成的任务。因此, 大多同学在实验时碰到的困难太多, 无从下手。对此, 我们的做法是提供给学生程序源代码但是空出关键模块, 学生只需完成关键模块的编写, 大大降低了实验的难度, 也使学生可以集中精力解决关键问题。在实践环节中, 根据学生的能力、性别, 采用互补的搭配方式把学生分为若干小组, 每组设小组长负责实验的学习讨论并对各成员进行分工。每一次实验结束后, 各个小组以小组长为代表汇报自己的作业, 由其他小组自由提问, 实现各个小组之间的交流, 分享各组的实践成果, 互相借鉴, 很好的激发了大家的学习兴趣。

3 结语

编译原理课程作为计算机专业的一门重要专业基础课, 对于提高学生的计算机专业素养具有重要的作用。本文分析了目前教学中存在的问题, 并从教学实践出发, 对如何调动学生积极性从而真正提高教学效果总结出了一些有效的教学方法, 在实际教学中也取得了良好的效果。由于课程的复杂性和抽象性, 还需要不断地探索更合理的教学方法, 提高教学质量。

参考文献

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

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

[3]莫雷.教育心理学[M].广州:广东高等教育出版社, 2003.

[4]何炎祥.现代教学理论指导下的“编译原理”教学综合改革[J].计算机教育, 2005 (03) .

《编译原理》教学方法初探 篇3

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

TP314-4

编译原理是计算机相关专业的核心课程,是一门公认比较难学的课程。通过学习编译知识,有助于学生从宏观上把握编程语言;编译技术涉及到计算机的系统结构、指令集结构以及相关的操作系统,掌握编译技术有助于更进一步地理解计算机系统;从软件工程的角度来看,编译器是一个很好的系统软件,它所涉及的算法和技术可直接复用于软件开发的实践[1]。

一、教学现状

编译原理课程的理论性和实践性较强,在该课程的学习过程中涉及到大量抽象的理论知识,而实践动手环节的教学效果受制于对理论的理解程度。教学过程中,存在的问题有以下几个。

首先,学生对编译原理课程不够重视,缺乏学习动力。大多数的同学认为,编译原理课程的学习,与今后的就业没有多大的联系。而且就目前计算机领域的发展现状而言,并不需要重复编写构造编译器;课程本身的难度较大,有同学反应,课堂上老师讲授的知识可以理解,但是下课后往往想不起来;从而导致学生在学生过程中,学习积极性不够,动力不足。

其次,编译原理课程综合性较强,难度较大。涉及到的先修课程包括离散数学、程序设计基础、算法与数据结构、汇编语言、操作系统等,学生对这些先修课的基础知识的掌握程度参差不齐,甚至于有些学生根本没有掌握必要的基础知识;另外,该课程涉及的理论知识抽象,难以理解,如自动机理论等,涉及到的算法复杂,不容易实现,如语法分析阶段的自下而上的分析算法等,对于编译程序这个系统软件,各模块之间接口复杂,学生从整体上理解编译程序也存在一定困难。

第三,实践效果不理想。该课程的实践涉及许多其他相关课程的知识,因此,需要学生有较高的综合运用知识的能力,对于大多数同学,实践具有较大难度,对于基础知识较差的同学来说,很难达到课程的要求。

二、教学思路

(一)明确课程学习目标及其重要性

编译原理课程理论性较强,在讲授过程中,理论性的知识是授课的重点和难点。因此,整个上课过程中要让同学们明确学习该课程的意义,以及为什么要开设该课程,即学习编译原理的重要性,在整个课程的讲授过程中,可以多采用启发式教学方法,以期提高学生的学习兴趣。编译原理课程能够提高学生计算机思维能力。所谓计算机思维能力指的是具有抽象化与形式化思维的能力,编译器在设计过程中就运用了计算机思维的思想与方法,对学生进行计算机思维能力培养将有助于其更好地把握编译原理的目标[2]。另外,编译技术应用广泛,如软件系统安全、现有程序理解和软件工程的逆向工程等方面。

(二)精選教学内容

我们可以借鉴国内外知名大学在编译原理教学方面积累的宝贵的经验,如教学内容、教学方式以及教学手段等。但是,对于应用型普通本科院校而言,我们需要从自身的实际出发,根据我们的学生水平、课时的多少以及学校的办学特点,对编译原理的教学内容适当的选择,突出重点,是学生能够把握编译技术的核心内容。现在多数同学的注意力集中在一些细节的算法上,因此教学内容的选取原则是让学生宏观把握编译原理和技术。

编译原理主要包括五个阶段的讲解,即:词法分析阶段、语法分析阶段、语义分析与中间代码产生、代码优化和目标代码产生。

词法分析阶段,这部分内容的主线是正规式与有限自动机的相互转换,以及将有限自动机最小化。通过介绍正规式和有限自动机的概念,为什么需要转换,以及如何转换,让学生对有限自动机的识别功能,有个更深刻的理解。

语法分析阶段,该内容包括自上而下语法分析和自下而上语法分析两种。根据两类分析方法的特点,指出每种分析方法面临的问题或者说所需解决的关键问题,每种分析方法适用的文法环境,然后讲解如何实现每种分析方法。这一部分主要讲解两种具体的分析方法,即LL(1)分析方法和LR(0)分析方法。

自上而下的分析方法关键的问题是,非终结符有多个候选时,如何选择的问题,因此相关知识点较多,如消除递归(包括直接和间接)、消除回溯和求FIRST集FOLLOW集。对于这部分知识,学生容易把注意力集中在以上的具体算法上,所以,我们在教学中,需要重点讲述LL(1)分析方法的判别和预测分析表的构造,预测分析程序的构造和实现过程。可以采用案例教学法,以一个具体的小程序为例,讲解预测分析程序的实现过程,增强学生的直观感。

自下而上的分析方法关键的问题是,寻找句柄。对于上下文无关文法的分析,LR分析方法是一种高效的方法,包括:LR(0)、SLR、规范LR和LALR方法。LR分析表的生成算法较为复杂,因此讲解时重点应放在LR实现的关键问题,即如何确定栈顶符号是否构成句柄。对于这部分内容,重点让学生掌握LR(0)的分析方法。因为SLR(1)已经能够适应大多数的文法,所以规范LR和LALR方法部分,只需要让学生了解即可。

(三)加强实践环节

编译原理是一门理论性和实践性较强的课程。理论知识抽象难懂,我们可以通过实践,使学生加深对理论知识的理解。在实践教学中,我们可以从基本的验证试验开始,让学生循序渐进的学习,避免一开始就要求学生完成很难的任务,打击学生的信息和积极性。试验内容方面,比如对于词法分析,让学生先练习LEX的使用,之后设计编制调试一个具体的语法分析程序,要求功能简单,能把源程序中的关键字、标识符、运算符、常量和分隔符等识别出来即可,旨在加深学生对词法分析基本原理的理解。最后可以交给学生一个综合性的试验任务,让学生将零散的知识点串接起来,形成一个整体概念。

三、结束语

《编译原理》课程是计算机专业的核心课程之一,针对当前编译原理教学中存在的问题,就如何提高学生学习兴趣、合理安排教学内容等方面作了一些研究和探索。

参考文献:

[1]何炎祥,伍春香.计算机专业不需要开设编译原理课程吗?[J].计算机教育,2009,(4):61-62

编译原理学习论文(推荐) 篇4

班级:09应用(2)班姓名:彭文阳学号:2009081215

大学课程为什么要开设编译原理呢?这门课程关注的是编译器方面的产生原理和技术问题,似乎和计算机的基础领域不沾边,可是编译原理却一直作为大学本科的必修课程,同时也成为了研究生入学考试的必考内容。编译原理及技术从本质上来讲就是一个算法问题而已,当然由于这个问题十分复杂,其解决算法也相对复杂。我们学的数据结构与算法分析也是讲算法的,不过讲的基础算法,换句话说讲的是算法导论,而编译原理这门课程讲的就是比较专注解决一种的算法了。在20世纪50年代,编译器的编写一直被认为是十分困难的事情,第一Fortran的编译器据说花了18年的时间才完成。在人们尝试编写编译器的同时,诞生了许多跟编译相关的理论和技术,而这些理论和技术比一个实际的编译器本身价值更大。就犹如数学家们在解决著名的哥德巴赫猜想一样,虽然没有最终解决问题,但是其间诞生不少名著的相关数论。

推荐参考书

虽然编译理论发展到今天,已经有了比较成熟的部分,但是作为一个大学生来说,要自己写出一个像Turboc C,Java那样的编译器来说还是太难了。不仅写编译器困难,学习编译原理这门课程也比较困难。

正是因为编译原理学习相对困难,那么就要求有好的教师和好的教材。教师方面不是我们能自己更改的,而在教材方面我们却可以按自己的意愿来阅读。我下面推荐几本好的编译原理的教材。我推荐的书籍都是国外的经典教材,因为在国内的教材中,确实还没发现什么让人满意的。

第一本书的原名叫《Compilers Principles,Techniques,and Tools》,另外一个响亮的名字就是龙书。原因是这本书的封面上有条红色的龙,也因为獗臼樵诒嘁朐?砘?×煊蛉肥堤?忻???所以很多国外的学者都直接取名为龙书。最近机械工业出版社已经出版了此书的中文版,名字就叫《编译原理》。该书出的比较早,大概是在85或86年编写完成的,作者之一还是著名的贝尔实验室的科学家。里面讲解的核心编译原理至今都没有变过,所以一直到今天,它的价值都非凡。这本书最大的特点就是一开始就通过一个实际的小例子,把编译原理的大致内容罗列出来,让很多编译原理的初学者很快心里有了个底,也知道为什么会有这些理论,怎么运用这些理论。而这一点是我感觉国内的教材缺乏的东西,所以国内的教材都不是写给愿意自学的读者,总之让人看了半天,却不知道里面的东西有什么用。第二本书的原名叫《Modern Compiler Design》,中文名字叫做《现代编译程序设计》。该书由人民邮电出版社所出。此书比较关注的是编译原理的实践,书中给出了不少的实际程序代码,还有很多实际的编译技术问题等等。此书另外一个特点就是其“现代”而字。在传统的编译原理教材中,你是不可能看到如同Java中的“垃圾回收”等算法的。因为Java这样的解释执行语言是在近几年才流行起来的东西。如果你想深入学习编译原理的理论知识,那

么你肯定得看前面那本龙书,如果你想自己动手做一个先进的编译器,那么你得看这本《现代编译程序设计》。

第三本书就是很多国内的编译原理学者都推荐的那本《编译原理及实践》。或许是这本书引入国内比较早吧,我记得我是在高中就买了这本书,不过也是在前段时间才把整本书看完。此书作为入门教程也的确是个不错的选择。书中给出的编译原理讲解也相当细致,虽然不如前面的龙书那么深入,但是很多地方都是点到为止,作为大学本科教学已经是十分深入了。该书的特点就是注重实践,不过感觉还不如前面那本《现代编译程序设计》的实践味道更重。此书的重点还是在原理上的实践,而非前面那本那样的技术实践。《编译原理及实践》在讲解编译原理的各个部分的同时,也在逐步实践一个现代的编译器Tiny C.等你把整本书看完,差不多自己也可以写一个Tiny C了。作者还对Lex和Yacc这两个常用的编译相关的工具进行了很详细的说明,这一点也是很难在国内的教材中看到的。

推荐了这三本教材,都有英文版和中文版的。很多英文好的同学只喜欢看原版的书,不我的感觉是这三本书的翻译都很不错,没有必要特别去买英文版的。理解理论的实质比理解表面的文字更为重要。

编译原理的实质

前面已经说过,学习编译原理其实也就是学习算法而已,没什么特别的。只不过这些算法的产生已经形成了一套理论。下面我来看看编译原理里面到底有什么高深的理论吧。

几乎每本编译原理的教材都是分成词法分析,语法分析(LL算法,递归下降算法,LR算法),语义分析,运行时环境,中间代码,代码生成,代码优化这些部分。其实现在很多编译原理的教材都是按照85,86出版的那本龙书来安排教学内容的,所以那本龙书的内容格式几乎成了现在编译原理教材的定式,包括国内的教材也是如此。一般来说,大学里面的本科教学是不可能把上面的所有部分都认真讲完的,而是比较偏重于前面几个部分。像代码优化那部分东西,就像个无底洞一样,如果要认真讲,就是单独开一个学期的课也不可能讲得清楚。所以,一般对于本科生,对词法分析和语法分析掌握要求就相对要高一点了。

词法分析相对来说比较简单。可能是词法分析程序本身实现起来很简单吧,很多没有学过编译原理的人也同样可以写出各种各样的词法分析程序。不过编译原理在讲解词法分析的时候,重点把正则表达式和自动机原理加了进来,然后以一种十分标准的方式来讲解词法分析程序的产生。这样的做法道理很明显,就是要让词法分析从程序上升到理论的地步。

语法分析部分就比较麻烦一点了。现在一般有两种语法分析算法,LL自顶向下算法和LR自底向上算法。LL算法还好说,到了LR算法的时候,困难就来了。很多自学编译原理的都是遇到LR算法的理解成问题后就放弃了自学。其实这些东西都是只要大家理解就可以了,又不是像词法分析那样非得自己写出来才算真正的会。像LR算法的语法分析器,一般都是用工具Yacc来生成,实践中完全没有比较自己来实现。对于LL算法中特殊的递归下降算法,因为其实践十分简单,那么就应该要求每个学生都能自己写。当然,现在也有不少

好的LL算法的语法分析器,不过要是换在非C平台,比如Java,Delphi,你不能运用YACC工具了,那么你就只有自己来写语法分析器。

等学到词法分析和语法分析时候,你可能会出现这样的疑问:“词法分析和语法分析到底有什么?”就从编译器的角度来讲,编译器需要把程序员写的源程序转换成一种方便处理的数据结构(抽象语法树或语法树),那么这个转换的过程就是通过词法分析和语法分析的。其实词法分析并非一开始就被列入编译器的必备部分,只是我们为了简化语法分析的过程,就把词法分析这种繁琐的工作单独提取出来,就成了现在的词法分析部分。除了编译器部分,在其它地方,词法分析和语法分析也是有用的。比如我们在DOS,Unix,Linux下输入命令的时候,程序如何分析你输入的命令形式,这也是简单的应用。总之,这两部分的工作就是把不“规则”的文本信息转换成一种比较好分析好处理的数据结构。那么为什么编译原理的教程都最终把要分析的源分析转换成“树”这种数据结构呢?数据结构中有Stack, Line,List…这么多数据结构,各自都有各自的特点。但是Tree这种结构有很强的递归性,也就是说我们可以把Tree的任何结点Node提取出来后,它依旧是一颗完整的Tree。这一点符合我们现在编译原理分析的形式语言,比如我们在函数里面使用函树,循环中使用循环,条件中使用条件等等,那么就可以很直观地表示在Tree这种数据结构上。同样,我们在执行形式语言的程序的时候也是如此的递归性。在编译原理后面的代码生成的部分,就会介绍一种堆栈式的中间代码,我们可以根据分析出来的抽象语法树,很容易,很机械地运用递归遍历抽象语法树就可以生成这种指令代码。而这种代码其实也被广泛运用在其它的解释型语言中。像现在流行的Java,.NET,其底层的字节码bytecode,可以说就是这中基于堆栈的指令代码的。

关于语义分析,语法制导翻译,类型检查等等部分,其实都是一种完善前面得到的抽象语法树的过程。比如说,我们写C语言程序的时候,都知道,如果把一个浮点数直接赋值给一个整数,就会出现类型不匹配,那么C语言的编译器是怎么知道的呢?就是通过这一步的类型检查。像C++语言这中支持多态函数的语言,这部分要处理的问题就更多更复杂了。大部编译原理的教材在这部分都是讲解一些比较好的处理策略而已。因为新的问题总是在发生,旧的办法不见得足够解决。

本来说,作为一个编译器,起作用的部分就是用户输入的源程序到最终的代码生成。但是在讲解最终代码生成的时候,又不得不讲解机器运行环境等内容。因为如果你不知道机器是怎么执行最终代码的,那么你当然无法知道如何生成合适的最终代码。这部分内容我自我感觉其意义甚至超过了编译原理本身。因为它会把一个计算机的程序的运行过程都通通排在你面前,你将来可能不会从事编译器的开发工作,但是只要是和计算机软件开发相关的领域,都会涉及到程序的执行过程。运行时环境的讲解会让你更清楚一个计算机程序是怎么存储,怎么装载,怎么执行的。关于部分的内容,我强烈建议大家看看龙书上的讲解,作者从最基本的存储组织,存储分配策略,非局部名字的访问,参数传递,符号表到动态存储分配(malloc,new)都作了十分详细的说明。这些东西都是我们编写平常程序的时候经常要做的事情,但是我们却少去探求其内部是如何完成。

关于中间代码生成,代码生成,代码优化部分的内容就实在不好说了。国内很多教材到了这部分都会很简单地走马观花讲过去,学生听了也只是作为了解,不知道如何运用。不过这部分内容的东西如果要认真讲,单独开一学期的课程都讲不完。在《编译原理及实践》的书上,对于这部分的讲解就恰到好处。作者主要讲解的还是一种以堆栈为基础的指令代码,十分通俗易懂,让人看了后,很容易模仿,自己下来后就可以写自己的代码生成。当然,对于其它代码生成技术,代码优化技术的讲解就十分简单了。如果要仔细研究代码生成技术,其实另外还有本叫做《Advance Compiler Desgin and Implement》,那本书现在由机械工业出版社引进的,十分厚重,而且是英文原版。不过这本书我没有把它列为推荐书给大家,毕竟能把龙书的内容搞清楚,在中国已经就算很不错的高手了,到那个时候再看这本《Advance Compiler Desgin and Implement》也不迟。代码优化部分在大学本科教学中还是一个不太重要的部分,就是算是实践过程中,相信大家也不太运用得到。毕竟,自己做的编译器能正确生成执行代码已经很不错了,还谈什么优化呢?

关于实践

编译原理的课程毕竟还只是讲解原理的课程,不是专门的编译技术课程。这两门课程是有很大的区别的。编译技术更关注实际的编写编译器过程中运用到的技术,而原理的课关注讲解其基本理论。但是计算机科学本身就是一门实践性很强的课程,如果能够学以致用,那才叫真正的学会。李阳在讲解疯狂英语的时候就说到,只要当你会实际中运用一个单词一个词组的时候你才能叫学会了这个单词或者词组,而不是只是知道了它的拼写和意思。其实任何学习都是一样的,如果缺少了实践的结合,你不能算学会。

编译原理的课程主要就是讲解编译器产生的理论和原理,那么很简单,自己写个编译器就是最好的实践过程了。不过你得小心,编译系统可能是所有软件系统中最复杂的系统之一,不然为什么大学里面还会把编译器的编写开成一门叫做编译原理的课程来讲?我很佩服那些学了操作系统原理就开始自己写操作系统,学了编译原理就开始自己写编译器的人们,确实,在中国,敢这么做的学生太少了。且不管你这样做能不能做成功,至少有了这个尝试,会让你的程序设计,系统规划安排的功底增进不少。我下面给出一些关于实践过程中可能会遇到的困难,希望能够在你陷入困境的前帮你一把。

1.Lex和Yacc.这两工具是作为词法分析很语法分析的工具。如果你自己写一个编译器,我十分不建议你连词法分析这种事情都亲手来写。Lex和Yacc应该是作为每本编译原理的教材的必备内容,可是在国内的教材中缺很少看到。这两个工具是Unix系统下的小东西,如果你要在Windows中运用,那么你最好去下在cygwin这个软件。它是个在Windows下模拟Unix的东东,里面就包含了flex.exe和bison.exe(yacc)这两个工具.这两个工具使用起来还挺麻烦的(其实unix 下的很多十分有用的工具都是这样), 不过在《编译原理与实践》这本书上对于这两个工具的讲解十分详细,还列举了不少实际的例子。

2.做解释型语言比做生成机器代码的编译器简单。虽然说,做解释型的编译器,像Java那样的,你还得自己去写解释器,不过这样你就不必去查找机器代码的资料了。如果你做生

成的最终机器代码编译器可能会遇到问题还有就是寄存器为基础的代码生成方法。前面说过,如果你生成的是以堆栈为基础的代码,那么其代码生成过程十分简单,需要考虑的东西也不多,如果你考虑最终的机器代码生成的话,你必须考虑机器的寄存器如何分配等麻烦的问题。

编译原理概念期末总结复习 篇5

解释程序:边解释边执行源程序的程序。区别:编译程序有中间代码,而解释程序没有。编译过程的五个阶段:

1、词法分析 任务:对构成源程序的字符串进行扫描和分解,识别出一个个单词。

2、语法分析 任务:在词法分析的基础上,根据语言规则,把单词符号串分解成各类语法单位。

3、语义分析和中间代码产生 任务:对语法分析所识别出的各类语法范畴,分析其含义,并进行初步翻译。

4、优化 任务:对前段产生的中间代码进行加工变换,以期在最后阶段能产生出更为高效的目标代码。

5、目标代码生成 任务:把中间代码变换成特定机器上的低级语言代码。

编译程序的七个部分词法分析器,语法分析器、语义分析与中间代码产生器、优化器、目标代码生成器、表格管理和出错处理。

编译程序生成的五个办法:机器语言、高级语言、移植、自编译方式和使用工具自动生成。词法规则:指单词符号的形成规则。(也就是正规式)

语法规则:规定了如何从单词符号形成更大的结构。就是语法单位的形成规则。空字:不包含任何符号的序列。闭包:中所有的符号组成的集合。

上下文无关文法是指:所定义的语法范畴是完全独立于这种范畴可能出现的环境的文法。上下文无关文法的四个组成部分:一组终结符号、一组非终结符号、一个开始符号和一组产生式。

终结符号也就是不可再分的基本符号。

非终结符号是用来代表语法范畴,表示一定符号串的集合。开始符号是语言中我们最感兴趣的语法范畴。产生式是定义语法范畴的书写规则。

句子:文法中从开始符号推导的终结符号串。句型:从开始符号推导的符号串。语言:文法中所有句子的集合。

程序语言的单词符号分为五种:关键字、标识符、常数、运算符和界符。二元式表示:(种类,属性)

正规式的运算符有三种:或,连接和闭包。优先顺序是:闭包,连接,或。

DFA怎么识别字:若存在一条从初态结点到某一终态结点的通路,且这条通路上所有弧的标记符连接成的字是a,则称a可为DFA所识别。

DFA怎么识别空字:若DFA的初态结点同时又是终态结点,则空字可为DFA所识别。NFA怎么识别字:若存在一条从某一初态结点到终态结点的通路,且这条通路上所有弧的标记字依序连接成的字等于a,则称a可为NFA识别。

NFA怎么识别空字:若M的某些结点即是初态又是终态结点,或者存在一条从某个初态结点到某个终态结点的空通路,那么,空字可为M所识别。语言的语法结构是用上下文无关文法描述的。

语法分析分为两类:自上而下分析法,自下而上分析法。

自上而下分析法面临的问题:1.文法的左递归问题。2.回溯3.成功可能是暂时的,产生虚假匹配。4.难于知道输入串中出错的确切位置。5.效率低,代价高。为什么消除左递归?因为含有左递归的文法将自上而下分析的过程陷入无限循环。为什么消除回溯?因为回溯统一做一大堆无效的工作。

自下而上分析法:从输入串开始,逐步进行归约,知道归约到文法的开始符号。短语:符号串推导过程中某非终结符推导的部分。

直接短语:符号串推导过程中某非终结符一步推导的部分。句柄:一个句型的最左直接短语。最左归约是最有推导的逆过程。

编译原理实用论文 篇6

计算机基础实验教学中心编制

姓名,学号:胡智超,53070108;陈玉娟,53070130;程明,53070109;张宇航,53070110

2007 级1班 实验室:A209成绩指导教师(签字)(存档)

—————————————————————————————————————————————— ★ 实验课程名称:

★ 实验 项 目:

★ 实验 仪 器:

★ 实验 要 求:

《编译原理》课程教学改革探索 篇7

但是,编译程序是一个庞大和复杂的系统软件。它所包含的算法和思想理论性强且抽象度高,计算机专业学生普遍反映,编译原理课程是一门比较难于理解和掌握的课程。如何让这门课程的教学效果达到令人满意的程度,是《编译原理》教师普遍关注的问题。该文通过分析目前《编译原理》教学过程中存在的问题,对《编译原理》课程教学改革提出了一些新的方法和见解。

1“编译原理”课程教学现状

《编译原理》课程在目前教学中出现的主要问题有:

1)课程内容抽象难懂,采用传统的灌输式的授课方式,教学手段单一,无法激发学生学习兴趣。编译原理课程中的概念和算法大都以符号、自动机、上下文无关文法、属性文法等抽象程度较高的复杂形式描述,教材内容显得比较枯燥。如果教师在教学中又以传统的灌输式教学为主,那么因为理论知识较抽象,在整个的教学过程中学生被动地接受知识,教师很少考虑学生的需要和态度,就会让学生觉得授课内容枯燥乏味,学习缺乏主动性,影响教学效果,造成理解难度大和教学难度大的情况。

2)学生觉得编译技术在一般的软件开发中应用不多,学习积极性不高,难以让学生对这门课程的学习形成主动性。编译原理这门课包含许多理论知识和算法,这些理论的学习和理解都存在着一定的难度。同时,学生感觉教材中理论知识很难又不实用,所以学习积极性不高。但是和数据结构课程做比较,数据结构课程的很多内容也比较复杂和抽象,但是学生的学习积极性明显很高,看来内容的抽象并不是造成这门课程难讲、难学的唯一原因,造成这种现象的还有一个重要因素是,课程内容实用性的广度不同。数据结构课程中的很多内容如:栈、队列、图、排序和查找算法,学生在一般的软件开发中都会经常用到,即使用频率很高,学生觉得有必要学习即使课程内容难,学习积极性高,自然老师也容易教,也愿意教,学生也愿意学,教学效果就自然好。而编译原理中的很多技术,比如形式语言理论,LL和LR语法分析算法,属性文法,代码优化技术等,学生觉得这些技术只有在翻译器的开发中用到,而自己一般也不会从事这方面的软件开发,加上这些技术的理解难度和上机转换成程序的难度明显比先前学过的课程难度大,所以学习主动性不高。

3)先修课程知识掌握不牢,增加学习本课程的难度。编译原理课程一般是在大三开设,它的先修课程在大一和大二学习,如果学生在之前的课程学得知识不太好,那么对这门课程的学习过程中就会觉得难度很大,影响学习效果,比如数据结构的“栈”,如果学习不好,就直接影响学生语法分析器的理解和上机实现。

4)课程的课时有限,有的高校上机实践环节无法有效实施。由于教学改革,很多高校对包括本课程在内的许多专业课的授课课时进行了压缩,在一定程度上给教学增加了难度。有的高校对本课程没有开设实验课,仅仅学习了一些编译理论与算法,只有理论没有实践,使得学生无法将抽象的编译理论知识具体化和形象化,就难以对基本概念和方法正确地理解和运用,也无法全面系统地掌握了编译器的构造过程,缺乏上机实践,就会影响教学效果。

2“编译原理”课程教学现状

针对以上在课程教学中出现的问题,该文提出了以下一些教学改革措施:

2.1 合理选用教材和参考书,保持教学内容的时代性和先进性

从教材建设方面看,教材坚持“基本概念严谨,基本方法灵活”的论述方法,既注重科学性也注重通俗性,文笔平实、通顺,易于理解。同时教材应该符合《中国计算机科学与技术学科教程》最新版的要求,真实反映当前程序设计语言翻译领域的核心知识,摒弃了部分陈旧内容及过时技术,并在此基础上增加适应新发展方向的内容;或对现有教材进行改版以满足新的教学要求。著名计算机科学家和教育家Alfred V.Aho所著的《编译器:原理、技术与工具》英文原版教材和翻译本可以作为主要参考书。增加配套实验教材,实验题目应该难度适中。合理选用教材和参考书,保持教学内容的时代性和先进性科学授课,可以充分调动学生的积极性和创造性。

2.2 科学授课

2.2.1 类比教学

使抽象内容形象化。事物之间存在着普遍联系,知识之间也存在联系,因而在教学过程中教师应该注意到这种联系,可以行之有效地运用这种联系的方法就是类比教学法。为提高课堂教学的效果,类比教学方法和值得推广。比如在讲高级程序设计语言的语法分析器的时候,涉及一个非常重要的内容:上下文无关文法。在讲的时候,可以先以自然语言文法为话题来引入。

以一个简化的自然语言文法为例:

句子→主语谓语宾语

主语→你

主语→我

谓语→是

宾语→定语宾语

定语→可爱的

宾语→男孩

宾语→女孩

以上文法描述了一个简化的语言模型,该文法可以用来验证某个句子是否属于该语言模型。比如,验证“你是可爱的男孩”是否为合法的句子,实际上就是从“句子”出发,反复把上述规则中的“→”左边的符号替换成右边的符号的过程,如下:

句子=>主语谓语宾语

=>你谓语宾语

=>你是宾语

=>你是定语宾语

=>你是可爱的宾语

=>你是可爱的男孩

则表明这个句子符合该文法描述的语言模型,即为合法的句子,否则为不合法的句子。这个例子中,文法G(VN,VT,S,P)可很容易地被学生理解。每个规则是文法的一条产生式P,而“句子”,“谓语”,“宾语”,“定语”就是非终结符VN,其中,“句子”是文法开始符号S,该文法的所有的句子都是由它推出的,“你”,“我”,“可爱的”,“男孩”,“女孩”就是终结符VT。由此例再引出“直接推导”的定义。“直接推导”,就是将产生式左部的非终结符替换为合适的产生式右部的过程,可以用“=>”来表示“直接推导”。同时,“语言”的定义也可以很容易地理解,就是从文法开始符S出发,通过推导得到的所有句子构成的集合,就是这个文法所描述的语言L(G)。经过以上分析,授课内容过渡到高级程序设计语言的语法分析器的开发途径,就是,需要对高级程序设计语言构建一个工具来描述这种语言的语法结构,这个工具就是上下文无关文法,上面的例子清楚地说明了文法G的主要概念。通过采用类比教学法,学生也容易理解和接受抽象理论。

2.2.2 温故而知新

编译原理是许多课程的一个综合性的实践。在课程讲授中,应注意将教授的课程内容与先修课程相关联,一方面起到温故而知新的作用,提高对程序设计语言、算法、软件开发理论的理解,另一方面也促进学生考虑问题层次的迁移,可以使学生体验到这些先修课在系统软件开发中的作用。比如在讲整个编译器符号表管理时,会涉及到散列表;讲自上而下语法分析器和自下而上语法分析器时候,会涉及到语法树和栈;在讲属性文法和中间代码优化的时候,会涉及到图,这些都是数据结构知识在系统软件开发中的实际应用;还有如运行时存储空间分配,会涉及操作系统的知识;目标代码生成部分的内容会涉及汇编语言以及计算机组成原理等课程的内容,这些内容在编译原理中再次学习并应用,会起到温故知新的作用。

2.2.3 变“填鸭式”为“启发式”

“填鸭式”教学方式是教师为主体,学生被动学习的一种传统教学模式。而启发式教学是利用有限课时讲授重点内容,给出重要结论之前先提出一些问题,让学生思考。比如在讲词法分析器的设计这一节时,教师可以先提一个问题,即考虑在给定输入是高级语言源程序,输出是该程序的单词二元组(Token)形式的前提下,怎么去设计词法分析器,也就是怎么把源程序的字符流转换成单词流,可以让学生先思考,然后鼓励他们发表自己的见解,而不是由老师直接讲出该部分涉及到的知识:预处理、正则表达式、超前搜索识别、状态转换图、确定有限自动机(DFA)、非确定有限自动机(NFA)等非常抽象的理论。这种方法激发了学生的思维,由以往的老师直接讲,直接灌输的填鸭式教育,变成学生主动去思考、去实现的启发式教育,能够收到更好地教学效果。

2.2.4 多媒体与传统板书相互补充

板书和PPT各有优势,通过合理分工,可以使学生更好地理解讲授的内容。对于在授课过程中需要长时间对照参考的内容、复杂的推导步骤、难以在一张PPT中展示的内容,可以采用板书的方式讲解。而对于课本的核心内容、扩展内容、抽象内容的图形化或动画演示可以采用PPT的方式讲解。如在讲授程序句子递归下降法语法程序执行过程时,可以运用ppt的动画效果,直观地描述文法符号对应的程序递归调用的变化过程,抓住学生的注意力,增强了学生学习的兴趣,如图1所示。这和手工分析相比,即清晰又避免了长时间的手工书写过程;同时,PPT页面容量有限,有时候无法同时将某些显示给学生,影响教学,这些内容是可以板书出来,配合PPT演示,这样会取得更好地教学效果。

2.2.5 开发多媒体辅助教学软件

讲课时,采用文字、动画、图形等多种媒体,可以使内容充实,形象生动。对书本中死板的知识赋予活力,使学生在轻松的学习环境中掌握更多的要领。软件以多媒体动画的形式生动形象地描述了编译器的各个阶段的工作过程。借助现代化的教学手段和工具,将抽象的知识具体化、形象化,便于学生理解复杂的原理,极大地调动了学生的学习积极性,学习效果有了明显的提高。比如:LL(1)分析法、移进归约分析法就可以采用FLASH动画演示,模拟语法分析过程,实现分析表和分析栈的状态跟踪。

2.2.6 将学科发展新内容引入教学中

在课堂授课上,首先注意将学科发展新内容反映到教学中,以丰富同学们的知识结构和拓展同学们的思路。很多学生在学习的时候,只是就编译技术学习编译技术,只知道在开发编译程序的时候会用到哪些理论,但是并不了解这些理论在编译技术之外的广泛应用。新的教学方式不能只是枯燥地讲解编译理论,而是应该在介绍编译技术的同时,介绍一些所学内容的学术前沿,使学生有强烈的学习和研究的冲动。编译技术在当前已经广泛应用于编译器构造之外的其他领域,比如:常用的文本编辑工具的实现;浏览器对HTML、XML的解析;网络检索;网络协议解析、信息安全领域;软件测试领域;中文叙词表的有效性检验程序;虚拟机、多核编程、嵌入式程序设计领域。这些新信息、新内容的引入,将有助于让学生对所学内容产生兴趣,同时加深对所学知识的正确认识,对于今后从事系统软件和应用软件的开发以及计算机的相关工作都是非常有好处的。

2.3 注重实践环节,强调能力培养

实践性教学是课程教学体系中一个不可缺少的重要环节,对学生创新能力的培养,综合素质的提高,具有不可替代的作用。编译原理实践性教学的设计思想是使学生通过课堂学习,理解编译原理的同时,注重学生实践能力的培养,进一步巩固对知识的理解,通过实际的锻炼,掌握编译技术,进而能够独立的进行编译器的设计。

由于本课程在本科阶段的学习重点是编译的前端技术:文法、正则表达式、语法分析器以及语法制导翻译器,而后端的目标代码生成及优化技术在本科并不是教学重点,而是后继研究生的课程,再加上该课程的实验的课内学时一般都较少,时间非常有限,所以应该开展短学时编译原理实践教学设计,所以可以要求学生实现一个受限语言的词法分析、语法分析、语义分析和中间代码生成功能的基本编译器即可。实验课实施策略,采用在课程理论课的进行中,加以适当引导,同时让学生在课下前做好设计,根据课程教学内容的开展,让学生在有限的上机时间内完成了实践。编译程序实验课,前一个实验的输出结果要为下一个实验所用,所以前一个实验的完成好坏直接影响下一个实验的开展,所以教师要对学生每节实验课的完成情况进行有力监督和指导,同时进行随堂评分,以激励和督促学生完成上机作业。

2.4 建设编译原理资源网站,辅助学生自主学习

由于编译原理课程内容抽象难懂,学生难以在有限的课时里掌握讲授的全部内容。建立课程的网络教学环境,将课程的多媒体课件、课堂授课视频、编译原理实例库、习题库、编译源程序、实验所需编译工具等放在课程网站上,供学生在课后使用,极大地方便了各类学生的不同需求,使教师的课堂在课后得到了有效的延伸。同时,还可以通过网络平台提供的多媒体交互手段让师生进行有效的沟通,答疑解惑,同时也可以缓解目前学生人数增多,教学资源不足,学生质量参差不齐,教学质量和效率得不到保证的情况,为该课程的教学提供强有力的支持。

2.5 教师队伍培养

教师应该承担过实际编译程序或相关系统软件的研制,具有丰富的教学经验和科研能力。紧密跟踪与编译原理相关的学科国际学术前沿,不断更新教学内容,以保证教学内容的先进性,并将科研中遇到的问题作为教学的典型案例在课堂中进行讲解,将科学研究的最新成果不断充实到教学过程之中,并且将科研项目进行必要的分解,组织部分优秀的学生参与项目开发,使学生切实体会到理论成果在技术实践中的完美应用,深刻理解理论与实践相结合的意义和具体途径。

2.6 学校与公司合作,共建课程

学校可以和国内外和编译工具软件等相关的计算机公司签订培训协议,推荐学生到其公司进行专业实习和暑期实践,为学生提供到公司进行实践的机会,使学生能够更深刻了解课程知识的发展应用,同时培养学生的问题求解能力和软件开发水平;另一方面,聘请公司的资深开发人员、高级技术专家等人员到学校做讲座,讨论编译原理课程内容及其应用的热点问题等。学校和公司联合教学,共同提高学生的课程学习效果,多方面提升学生的能力和素质。

3 总结

编译原理是计算机专业的核心课程,它对培养高水平的计算机专业人才有重要作用,同时可以培养学生计算机思维和问题求解能力,因此是需要学生认真学习、教师认真教学的一门课程。为了使该门课程取得高效的教学成果,该文针对该课程目前的教学现状,从多方面对现有编译课程的教学提出了自己的一些改革措施。实践证明,这些措施的实施,使得学生不仅可以学习到课程的核心内容,同时还可以学习到结合现代信息发展的新的教学内容以及国外优秀教材的精华;通过在已有的教学手段的基础上,实施新的教学手段,能充分提高学生学习兴趣,有利于抽象内容的理解;通过上机实践,学生能有效提高自己的动手能力;通过构建网站,辅助学生课外学习;通过培养师资,为教育质量提供有力保障;通过校企合作,给学生提供更多实践学习的机会、并为将来的就业打下良好基础。总之,采用合适的教学措施,将使编译原理课程的教学效果提升到一个新的高度。

参考文献

[1]陈火旺,刘春林.程序设计语言编译原理[M].长沙:国防工业出版社,2004.

[2]Alfred V.Aho.编译原理技术与工具[M].北京:人民邮电出版社,2008.

[3]Alfred V.Aho.编译原理[M].北京:机械工业出版社,2009.

[4]Alfred Aho,Ravi Sethi,Jeffrey D.Ullman.译原理[M].北京:机械工业出版社,2003.

[5]Francisco Ortin,Daniel Zapico,Juan Manuel Cueva.Design patterns for teaching type checking in a compiler.construction course[J].IEEE Transactions on Education,2007,50(3):273-283.

[6]裘巍.编译器设计之路[M].北京:机械工业出版社,2011.

[7]Thomax Pittman James Peters.编译程序设计艺术[M].北京:机械工业出版社,2010.

编译原理课程和助教工作总结 篇8

时间如流水般,转眼,一学期将至,每个人为了能交上一份满意的答卷,无时无刻不在倾注着汗水,挥洒着热泪。掩卷长思,细细品味,这学期的点点滴滴不禁又浮上心头,现在让我们一起回顾一下,希望可以对今后的教学工作有所帮助。

编译原理是我们北京师范大学信息科学与技术学院计算机专业本科生的专业必修课,它旨在介绍编译程序构造的一般原理和基本方法,其内容主要包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成等。这门课程关注的是编译器方面的产生原理和技术问题,似乎和计算机的基础领域不沾边,但是编译原理课程是所有计算机专业学生应该习得的一门重要课程,因为虽然在将来并不是所有人都会从事编译方面的工作,但是通过编译原理的学习之后,可从许多不同的角度来观察编译器的结构,编译器的物理结构、操作的顺序等等,会涉及到数据结构、计算机组成原理等课程,所以同学们在理论、技术和方法上都能得到系统而有效的训练,而且有利于将来希望从事软件开发的学生的相关素质和能力的进一步提高,更能够让每个学生更清楚的了解和熟悉一段程序从源代码到可执行文件之间具体的转换过程,这样能够更好的理解代码的编译和计算机内部的工作原理,对学生以后计算机相关的学习乃至工作从业都会有非常大的帮助。

编译原理这门课程是计算机专业课程中偏难的一门课,不管是在平时的课堂教学上,还是在上机实验的过程中,学生都会产生很多困惑之处,在这些方面我们的编译原理助教就承担了相当重要的工作和任务:

每周课堂随堂听课,跟进教学进度,并且上课之前做好复习工作,对每节课同学们可能会产生的问题提前做好归纳,以便更好的在课余时间跟同学们讨论,给同学们提供答疑解惑的机会;

能动手编写代码完成变异原理实验是本课程技能培养的重要一环,在每周的上机实验时,助教帮助同学们进行分组,以小组合作的方式来完成每次的实验任务,依照课程进度循序渐进的给同学们分派布置实验任务,在实验课上跟同学们随时交流,一同调试代码,一对一的解答实验疑惑等,并且协助同学们理解实验原理和内容,辅助同学们能够顺利完成上机实验,通过上机实验的手动操作,同学们也可以更直接、更具体的理解编译程序代码过程中一些具体的原理和方法;实验课我选取的是基于C++或者是基于flex和bison的实验,助教会主动和实验课本的作者老师联系沟通,获得更多实验相关的资料,比如书上给出代码的电子版和用例测试等。

助教在课后会主动收集同学们课堂上课或者实验过程中遇到的问题向我反映,这样可以及时发现同学们在课堂中理解较为模糊甚至有偏差的地方,并在课堂或者实验课上进行一个集中的讲解,更利于同学们的学习;

每次课结束之后,我会布置课后作业来让同学们对课堂教学内容进行巩固和查漏补缺,助教认真批改同学们的课后作业、所交的实验报告和运行的代码,做好每位同学的评分与登记,对课后作业、实验报告和代码中关键性的错误做出标记,并要求学生改正。登记课后成绩时,按10分制来决定,登记实验成绩时按照20分制来决定。在每次批改作业结束后,助教会及时整理,汇总学生的成绩和作业实验中出现的问题,助教通过批改课后作业和实验来了解同学们真实的学习情况,从而能够更好的辅助教学工作的进行。

平时为了同学们能获得更好的学习体验,会进行一些与国外教授的视频课程或者相关活动等,助教会组织同学们进行视频授课前的预习工作,同大家一起讨论上课形式,提出可能遇到的问题等等,在课前会负责批教室,布置桌椅场地,设置视频授课环境,调试摄像头、话筒和音响等相关的设备,为进行正常的视频授课或其他活动做准备。

对自己的要求:

一、师德方面:加强修养,塑造“师德”,我始终认为作为一名教师应把“师德”放在一个极其重要的位置上,因为这是教师的立身之本。“学高为师,身正为范”,这个道理古今皆然。从踏上讲台的第一天,我就时刻严格要求自己,力争做一个有崇高师德的人,为每一个学生“传道授业解惑”。

二、认真备课,不但备学生而且备教材备教法,根据教材内容及学生的实际,设计课的类型,拟定采用的教学方法,并对教学过程的程序及时间安排都作了详细的安排,认真写好教案。每一课都做到“有备而来”,每堂课都在课前做好充分的准备,并制作各种有利于吸引学生注意力的有趣教具,课后及时对该课作出总结,并认真搜集每课书的知识要点,归纳总结。

三、增强上课技能,提高教学质量,使讲解清晰化,条理化,准确化,生动化,做到线索清晰,言简意赅,深入浅出。在课堂上特别注意调动学生的积极性,让学生多动手,从而加深理解掌握知识。加强师生交流,充分体现学生的主动作用,让学生学得容易,学得轻松,学得愉快;注意精讲精练,在课堂上老师讲得尽量少,学生动口动手动脑尽量多;同时在每一堂课上都充分考虑每一个层次的学生学习需求和学习能力,让各个层次的学生都得到提高。

四、认真批改作业:布置作业做到精读精练。有针对性,有层次性。同时对学生的作业批改及时、认真,分析并记录学生的作业情况,将他们在作业过程中出现的问题作出分类总结,进行透切的评讲,并针对有关情况及时改进教学方法,做到有的放矢。对学生:

上一篇:湖北高考零分作文:你们乡下人话真多下一篇:税务分局内务管理规定