论文导读:针对编译原理课程的特点及要求,共设置了五个实验项目。
关键词:编译原理,教学内容,实验教学
1教学内容的选取
针对我校刚升本的一般本科院校,教材采用[2],教学内容的选取应强调对编译原理和技术的宏观理解及全局把握,而不要把学生的注意力分散到一些细节的算法上,在讲述各章的理论的同时要有一些C语言小程序作为例题或习题。免费论文参考网。结合编译的各个阶段,对教学内容的选取如下:
1.1词法分析
本部分主要以正规式、NFA(不确定的有限自动机)、DFA(确定的有限自动机)及其最小化为主线来讲解,同时对词法分析器进行介绍,演示用C语言写的一个简单语言的词法分析器,并要求学生上机实现。
1.2语法分析
这一部分中,上下文无关文法是必备基础知识。语法分析包括自上而下与自下而上的语法分析二种。自上而下的语法分析包括二种:LL文法和递归下降分析方法,这两种方法比较简单进行可进行详细介绍,用一个简单语言的递归下降分析程序作为例子进行讲解效果更佳。自下而上的语法分析出包括二种:算符优先与LR分析方法,由于目前编译器的语法分析中已不再采用算符优先方法,因些可只作简单的介绍就可以了。LR分析方法是比较重要的语法分析方法,但由于SLR分析、规范LR分析和向前看LR分析非常复杂,讲解时需要占用较多的课时,不介绍这几种LR分析表的生成算法可直接介绍LR分析表的使用较好。因此,在介绍自下而上分析的一般概念和使用LR分析表进行移进归约分析后,可以直接介绍分析器的自动生成器,并介绍归约时的语义动作,为下面阶段语义工作的描述奠定基础。
1.3语义分析和中间代码的产生
静态语义检查通常包括:类型检查、控制流检查、一致性检查、相关名字检查,重点应放在类型检查上,类型系统在编程语言的设计中占据重要位置,讲解时先介绍类型系统在编程语言中的作用,然后用语义动作来表达类型检查算法。
中间代码生成主要介绍各种形式的中间语言,把赋值语句和各种控制流语句翻译成中间代码的语义动作。对于类型和变量声明语句,重点关注怎样按语言的作用域规则组织符号表。符号表中符号的插入和查找方法在数据结构中已经阐述过,只需稍作提及就可以了。
1.4属性文法与语法制导翻译
语法制导的定义和语法制导的翻译方案是描述编程语言翻译的两种常用形式方法。它们描述严格并便于理解,因此大部分有一定深度的教材都用它们来描述静态语义检查和中间代码生成等。这一部分内容较难,简单加以介绍,让学生有所了解即可。
1.5运行时存储空间的组织和管理
这是最需要搞明白部分。尤其在用C这样比较低级的语言时,掌握这部分内容对编写程序和程序排错都很有帮助。具体应该介绍局部存储分配策略(即一个活动记录中各类数据的组织),静态分配、栈式分配和堆式分配等三种全局存储分配策略,非局部名字的访问方式和各种参数传递方式的实现。
1.6代码生成
选择一种采用简单的寄存器分配策略的代码生成算法加以介绍,让学生对代码生成有所了解即可。
1.7代码优化
用实例来介绍各类优化,让学生明白编译器能完成哪些优化,而不要给学生介绍各种优化算法。这对编程有用处,例如,在可读性好的源代码和优化的源代码两者之间做选择时,若知道那些优化可以由优化编译完成,则宁可选择可读性好的代码。
2.实验内容的选取
设计一组适宜实验内容:首先,要将编译理论和方法在实验中得以概括,使学生不仅掌握它们本身具体应用,而且掌握由这些理论和方法所构造编译程序的各个部件是如何在整个系统中协调运行,这是实验最重要目的之一。其次,必须合理地简化,使学生比较容易完成。针对编译原理课程的特点及要求,共设置了五个实验项目。这组实验既和理论课内容相辅相承,同时相互之间又互相关联,构成了一个实验整体。
实验一:消去C、C++程序中的注释(2学时,必做)实验目的: 掌握C语言文件的基本操作,消除源C语言程序中的注释,为以后的编译提供方便。实验要求:对给定的带注释的C语言源程序,利用该程序去掉注释,输出去除注释的源程序。
实验二:词法分析(必做,4学时)目的:通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。免费论文参考网。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。要求:编写程序对输入的源程序字符串进行词法分析,对符合下述文法描述的字符串,建立单词符号表,不符合的字符串给出错误信息。
实验三:递归下降分析法(4学时,选做)目的:根据给定的文法编制调试递归下降分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对递归下降分析法的理解。要求:对给定的文法,利用递归下降分析法对任意输入的符号串进行分析语法分析,对符合下述文法描述的字符串(表达式或赋值语句),给出中间代码,不符合的字符串给出错误信息
实验四:语法分析程序LL(4学时,必做)目的:通过该实验使学生掌握描述语法规则的文法,以及加深对语法分析中自顶向下分析法中的预测分析法的理解。免费论文参考网。要求:对给定的文法建立预测分析表,利用预分析法对实验一中词法分析产生的符号进行语法分析,对符合下述文法描述的字符串(表达式或赋值语句),给出中间代码,不符合的字符串给出错误信息。
内容:用扩充的BNF表示(同实验三)。
实验五:语法分析程序LR(4学时,必做)目的:通过该实验使学生加深对语法分析中自下而上分析法中的LR分析法的理解。要求:对给定的文法手工建立LR分析表;利用LR分析法对实验二中词法分析产生的符号进行语法分析,对符合实验中文法描述的字符串(表达式或赋值语句)给出中间代码;不符合的字符串给出错误信息。内容:用扩充的BNF表示(同实验三)
3.小结
编译原理课程在计算机课程体系中的重要地位,决定了其课程建设和改革的长期性,对培养计算机专业的人才也有着重要的作用,探索该课程的教学方法,提高教学质量是从事计算机教育工作者的必须重视的问题,也是一个永远值得探讨的问题,我们根据我系的实际情况合理的运用现代手段,综合考虑多种因素,将该课程的教学改革推向更科学的发展道路。
【参考文献】
[1]张昱,陈意云,郭宇,李兆鹏. “编译原理”课程的教学内容选择的探讨. Computer Education,vol18,no 4,2009.
[2]程序设计语言编译原理(第三版)[M].陈火旺,刘春林等.国防工业出版社2008.9.
|