210 likes | 394 Views
《 编译原理 》 实验教学探索及实验教程编写规划. 李文军、舒忠梅 {lnslwj,issszm}@mail.sysu.edu.cn 中山大学计算机科学系. Outline. 前言 编译原理教学新思路 传统教学思路的存在问题 语言是求解问题的一种有效途径 新思路对编译原理教学的指导作用 《 编译原理实验教程 》 编写规划. 1 前言. 编译原理课程专门学习与研究程序设计语言的实现技术,是计算机科学与技术专业的一门主干课程。 通过学习该课程,学生应该能熟练掌握利用程序实现一种计算机语言的原理、方法、技术和工具,并能深入了解程序设计语言的内部机制。
E N D
《编译原理》实验教学探索及实验教程编写规划《编译原理》实验教学探索及实验教程编写规划 李文军、舒忠梅 {lnslwj,issszm}@mail.sysu.edu.cn 中山大学计算机科学系
Outline • 前言 • 编译原理教学新思路 • 传统教学思路的存在问题 • 语言是求解问题的一种有效途径 • 新思路对编译原理教学的指导作用 • 《编译原理实验教程》编写规划
1前言 • 编译原理课程专门学习与研究程序设计语言的实现技术,是计算机科学与技术专业的一门主干课程。 • 通过学习该课程,学生应该能熟练掌握利用程序实现一种计算机语言的原理、方法、技术和工具,并能深入了解程序设计语言的内部机制。 • 编译原理课程是计算机科学与技术专业众多专业课程中理论与实践相结合的典范。
1前言(续) • 然而,在学生眼中编译原理课程的学习内容与实验内容均已十分陈旧。 • 由于本课程的“有用性”不像工具课程那样能很快体现出来,再加上其难度比较大,造成学生对课程的认识有一定的偏差。 • 试图为编译原理教学引入一种新的指导思想,并基于这种新思路设计了若干新型的、实用性强的课程实验内容,在此基础上整理实验教程。
2编译原理教学新思路 • 传统教学思路的存在问题 • 语言是求解问题的一种有效途径 • 新思路对编译原理教学的指导作用
2.1 传统教学思路的存在问题 • 以A. Aho 等人编写的经典教材为代表,当前主流的编译原理教学方案强调该课程向学生讲授高级程序设计语言的实现技术[1] 。 • 国内编写的大多数教材基本上都遵循这一教学思路[2,3] 。 • 然而,如果仅仅将课程的指导思想侧重于高级语言的实现技术,将给本课程的教学带来一些障碍。 • 例如:… [1]A. Aho, R. Sethi and J. Ullman. Compilers Principles, Techniques and Tools. Addison-Wesley, 1986 [2] 杜淑敏、王永宁,《编译程序设计原理》,北京:北京大学出版社,1990 [3] 吕映芝、张素琴、蒋维杜,《编译原理》,北京:清华大学出版社,1998
2.1 传统教学思路的存在问题(续) • 许多师生将编译原理这门课程理解为只是向学生讲授一个编译器是如何设计与实现的。 • 而目前软件产业界的编译器研究与开发早已高度专业化,全球主流产品被为数不多的几间国外企业垄断,在系统软件领域更落后的国内软件企业极少有机会开发一个全新的编译器或改造一个已有的编译器。 • 从而降低了学生学习本课程的兴趣和动力,甚至在部分院校中还出现了编译原理无用论的观点。
2.2 语言是求解问题的一种有效途径 • 实际上,尽管编译原理主要介绍高级程序设计语言的实现技术,但这些技术也同样适用于其他类型的语言; • 因而,编译技术是一门针对语言的处理技术,而不仅仅是一门针对高级程序设计语言的处理技术。 • 在计算机科学与技术的众多分支领域中,语言被公认为一种重要的、有效的问题求解途径。
2.2 语言是求解问题的一种有效途径(续) • 除高级程序设计语言外,计算机软件领域还大量使用其他不同类型的语言。 • 常见的以语言求解问题的经典实例包括: • 排版语言(LaTeX 、Postscript 、PDF、RTF 等)、 • 数据库操纵与查询语言(SQL)、 • 标注语言(HTML、XML)、 • 用户自定义语言(自定义报表、乐谱描述、场景定义等)。 • 即使在近年的软件技术进展中,也不难看出语言作为求解问题的一种有效途径。 • 例如在企业应用集成中扮演重要角色的Web 服务技术就采用语言来定义服务的合成(Web 服务合成语言BPEL)和服务的查询(Web 服务查询语言Xpath)。
2.2 语言是求解问题的一种有效途径(续) • 注意即使对编程语言的处理也不局限于编译,还可开发自动排版、静态分析、结构化编辑等功能。 图1、计算机软件领域中常用语言及其处理的分类
2.2 语言是求解问题的一种有效途径(续) • 面向对象设计模式的奠基者E. Gamma 等人也很注重语言在求解问题中重要性,他们将解释器模式(Interpreter pattern)列为23 个经典设计模式之一[4] 。 • 该设计模式用于指导如何有效地构建一个解释器,通过解释这些句子来解决该问题。 • 在他们的书中主要介绍解释器的设计思想、结构、效果等。 • 并未十分强调语言作为一种通用的问题求解途径的重要性,并且该设计模式相对于编译原理中的编译技术而言,还只能算是一种初级的简单设计。 [4]E. Gamma, R. Helm, R. Johnson and J. Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley, 1995
2.3 新思路对编译原理教学的指导作用 • 通过近年的教学实践发现,在编译原理教学活动中贯穿“语言也是求解问题的有效途径之一”这种新思路,有助于开拓学生的研究、开发与应用的视野,理解编译技术在日后学习与工作中的重要作用,可大大提 • 从编译器普遍采用的“管道/过滤器”软件体系结构风格看[5] ,越在前端的技术具有越广阔的应用面。 • 例如,编译过程前端的词法分析技术和语法分析技术的应用面非常广,而后端的代码优化、目标代码生成等技术的应用面则越来越窄。 [5]M. Shaw and D. Garlan. Software Architecture: Perspective on an Emerging Discipline. Prentice-Hall International, 1996
2.3 新思路对编译原理教学的指导作用(续) • 从技术应用面看,编译过程各阶段的应用面呈现一种逐渐缩窄的喇叭型,如图2所示。 图2、编译过程各阶段技术的应用面
2.3 新思路对编译原理教学的指导作用(续) • 基于新的教学思路,编译原理课程的重点放在词法分析、语法分析和语法制导翻译等前端技术。 • 在安排课程实验时,强调实验的设计必须以语言为核心。 • 即首先确定如何以语言为手段去解决一些实际问题,然后再考虑如何运用编译原理课程所学技术对这门语言进行处理。
2.3 新思路对编译原理教学的指导作用(续) • 注意实验环节中的内容设计与有效控制 • 根据本课程的教学指导思想,教学重点内容应为一门语言的词法分析、语法分析和语法制导翻译三部分,本课程实验环节也应针对这三部分设计。 • 围绕一门简单的程序设计语言安排以下5个实验内容: • 给定该语言的BNF语法定义,由学生书写语法正确或错误的源程序,并分析该语法定义是否具有二义性; • 学生使用lex族工具(例如GNU Flex、JLex、JFlex等),编写正确的输入文件,自动生成一个词法分析器; • 学生采用手工方式,依据从词法规则定义得到的状态转换图作为程序设计蓝图,手工编写一个词法分析器; • 学生使用yacc族工具(例如GNU Bison、Byacc、JavaCup等),设计正确的翻译模式并编写输入文件,自动生成一个语法分析器; • 学生采用递归下降预测分析技术,依据翻译模式手工编写一个语法分析器。
2.3 新思路对编译原理教学的指导作用(续) • 为促进学生在实验环节中真正学到东西,宜对学生施加必要的压力,以保证学生独立地完成实验报告。 • 为避免不同班级学生之间抄袭实验, • 可为不同班级选择不同的程序设计语言, • 诸如PL/0、SP、Wren、GCL、Lua、SMALL/Pawn、Io等简单语言或玩具语言, • 或提出不同的语义处理需求, • 诸如源程序排版工具、静态分析工具、复杂性度量工具、翻译为其他高级语言等。
3《编译原理实验教程》编写规划 • PartⅠ实验基础 • PartⅡ 专题实验 • PartⅢ 综合实验 • PartⅣ 研究与开发式实验
3《编译原理实验教程》编写规划(续) • PartⅠ基础 • Java语言简介 • Java概述 • I/O流 • 异常处理 • 编译原理概述 • 语言处理工具 • Jflex • Jcup • ANTLR
3《编译原理实验教程》编写规划(续) • PartⅡ 专题实验 • 专题实验1—正则表达式的处理 • 专题实验2—台式计算器(表达式求值) • PartⅢ 综合实验 • 综合实验1—编辑排版 • 综合实验2—程序复杂性度量 • PartⅣ 研究与开发式实验