编译原理课程实践改革探索.ppt

上传人:创****公 文档编号:4075180 上传时间:2021-01-25 格式:PPT 页数:35 大小:367.50KB
返回 下载 相关 举报
编译原理课程实践改革探索.ppt_第1页
第1页 / 共35页
编译原理课程实践改革探索.ppt_第2页
第2页 / 共35页
点击查看更多>>
资源描述

《编译原理课程实践改革探索.ppt》由会员分享,可在线阅读,更多相关《编译原理课程实践改革探索.ppt(35页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、编译原理课程实践改革探索,中国科学技术大学 计算机科学技术系 张昱 陈意云 0551-3603804,yuzhang, 第二届中国计算机教育与发展学术研讨会 2008年5月9日 济南 山东大学,编译原理课程实践改革探索,2/35,提纲,引言 课程实践方案 规划与历程 课程实验的组成要素 实验平台与相关工具 课程设计软件包的特点 实验改革实践与经验教训 课堂教学中与实际的联系,2,编译原理课程实践改革探索,3/35,计算机科学与技术学科的本科教学目标,计算机科学与技术学科的毕业生除了要掌握该学科的各个知识领域的基本知识和技术之外,还必须具有较扎实的数学功底,掌握科学的研究方法,熟悉计算机如何得以

2、实际应用,并具有有效的沟通技能和良好的团队工作能力。 中国计算机科学与技术教程2002(CCC2002),编译原理课程实践改革探索,4/35,专业实践及其意义,专业实践的形式 课程实践、实习、毕业设计、竞赛、 专业实践的意义 激发学生的学习兴趣 巩固和消化课堂知识 提高实践技能 培养创新能力 增强交流能力,编译原理课程实践改革探索,5/35,存在问题,毕业生在就业中暴露出的一些问题 动手能力较差 分析问题、解决问题能力较薄弱 岗前技术培训:其中有些是学校可以做而没有做的 岗前工程意识、质量意识和团队精神的教育:学校也可以逐步培养的 课程实践中存在的问题 各课程的课程实践各自独立 内容陈旧、覆盖

3、面窄、综合性不高、难度低、规模小 不注重对学生工程、质量、团队等意识的培养 学生数增加,检查力度和深度不够 学生对课程实践的热情未调动起来,拷贝风气增长,编译原理课程实践改革探索,6/35,专业实践改革,指导思想 首先抓课程实践改革,课程实践要整体规划 像讨论教学计划那样来讨论技术水平的培养:语言、工具、平台的覆盖范围和相互之间的衔接。 其覆盖程度依赖于 制度的保证、学科机构的资源、教职人员的利益 软件类的课程实践 学生至少参与完成一个有一定规模的软件项目的设计与开发, 涉及对多门课程所学原理的综合运用 遵循由小到大、循序渐进的原则 整体规划课程实践涉及的语言、工具和环境 注意培养工程意识、质

4、量意识和团队意识,编译原理课程实践改革探索,7/35,专业实践改革,软件类的课程实践 低年级的课程实践(如C语言、数据结构) 以巩固课程知识的小实验为主 训练学生基本的程序设计技能 高年级的课程实践(如编译原理、操作系统等) 以综合运用的课程设计为主 训练学生软件工程的能力,编译原理课程实践改革探索,8/35,提纲,引言 课程实践方案 规划与历程 课程实验的组成要素 实验平台与相关工具 课程设计软件包的特点 实验改革实践与经验教训 课堂教学中与实际的联系,8,编译原理课程实践改革探索,9/35,课程实践的规划,定位:综合运用的课程设计 (通过合作)为某个语言设计开发一个可运行的编译器 为适应个

5、性化学习,布局多个小型课程设计学生可针对自己的基础选择适合自己的课程设计,当然不同难度系数的课程设计的得分不一样。 历程 调研做UC Berkeley的编译课程设计设计适合国情的课程设计及其支持软件与文档 2007/2008年春:在04/05级本科生中开展编译实验 目前仍在进一步改进和完善中,编译原理课程实践改革探索,10/35,课程实验的组成要素(1),源语言 SimpleMiniJOOL语言(仅有一个main函数、整型) SkipOOMiniJOOL语言(非面向对象,有整型、布尔型、一维数组类型) MiniJOOL语言(面向对象) 中间表示 高级中间表示:Eclipse JDT中的AST

6、低级中间表示:降低汇编代码生成的难度,开展优化 目标机的选择 X86: CISCMIPS: RISC 编译器组件:分析器、解释器、优化器、汇编代码生成器 汇编代码的内部表示 统一表示,以此为基础设计实现寄存器分配器,编译原理课程实践改革探索,11/35,课程实验的组成要素(2),MiniJOOL程序,转换器,优化器,低级中间表示 (三地址码),X86汇编代码 生成器,MIPS汇编代码 生成器,寄存器分配器,分析器,编译原理课程实践改革探索,12/35,实验平台与相关软件(1),编译器开发所使用的语言:Java Java SDK 1.5以上 Eclipse IDE 分析器的生成工具 词法分析器的

7、生成工具:JFlex LALR分析器的生成工具:CUP LL(k)分析器的生成工具:Java CC 目标机 X86汇编代码:GCC(MinGW), GDB MIPS汇编代码:SPIM模拟器 编译工具:ant,编译原理课程实践改革探索,13/35,实验平台与相关软件(2),实验平台软件(当前的版本) 实验平台接口:组件接口、异常类、中间表示访问接口 实验运行平台 配置文件 根据配置加载、运行各编译器组件 一些有用的工具包 AST的图形显示 低级中间表示 汇编代码的内部表示 寄存器分配器 一些语言的分析器 ,编译原理课程实践改革探索,14/35,实验平台与相关软件(3),课程设计软件包(现有版本)

8、 Lab1:一个SimpleMiniJOOL程序的解释器 Lab2: 词法分析 用JFlex为MiniJOOL语言生成一个词法分析器 手工编写一个简单的词法分析器 编写一个NFA生成器 编写一个词法分析器的生成器 Lab3: 语法分析 手工编写一个语法分析器 用CUP编写一个语法分析器 用JavaCC编写一个语法分析器 编写一个语法分析器的生成器,编译原理课程实践改革探索,15/35,实验平台与相关软件(4),课程设计软件包(现有版本) Lab4: 语义分析 为AST构造符号表 对AST进行语义分析 在语法分析的同时构造符号表 在语法分析的同时做语义分析 Lab5: MIPS汇编代码生成 利用

9、现有的寄存器分配器生成MIPS汇编代码 独立实现完整的MIPS汇编代码生成器 Lab6: x86汇编代码生成 利用现有的寄存器分配器生成x86汇编代码 独立实现完整的x86汇编代码生成器,编译原理课程实践改革探索,16/35,实验平台与相关软件(5),课程设计软件包(现有版本) PB05011:综合性实验 以SkipOOMiniJOOL语言作为要实现的源语言 每个学生独立完成编译器的前端或后端 每个学生自行选择完成后端或前端的合作伙伴 前端要求: 词法分析、语法分析、语义检查并生成AST 后端要求: 由AST生成x86汇编代码或MIPS汇编代码,不要求代码优化,但要求考虑寄存器分配等问题 提交

10、要求: 一个完整的编译器,编译原理课程实践改革探索,17/35,实验平台与相关软件(6),课程设计软件包(未来版本) Lab1:一个SimpleMiniJOOL程序的解释器 Lab2: 词法分析 Lab3: 语法分析(增强对错误处理的指导) Lab4: 语义检查(补充样例和指导说明) Lab5: 低级中间代码生成 Lab6: 优化器 Lab7: MIPS汇编代码生成 Lab8: x86汇编代码生成 Lab9: 面向对象程序的编译,编译原理课程实践改革探索,18/35,课程设计软件包的特点(1),规范性 目录结构 编译运行 批处理脚本、配置文件 Eclipse IDE工程文件 指导性 提供样例及

11、其说明 如:以赋值语句序列语言示意语法分析的实现 提供一般性的处理规则 如:语法结构与汇编代码的映射规则 提供框架代码,编译原理课程实践改革探索,19/35,课程设计软件包的特点(2),整体性 每个课程设计的实验内容着眼于局部点,但是课程设计的运行完成一个相对完整的功能,例如一个编译器、一个分析器的生成器,等等。 灵活性 对课程设计的选择,可根据实际情况灵活确定 与课堂教学同步进行:选择各个独立的课程设计 综合性课程实验:前端/后端 对编译、调试、运行方法的灵活选择 Eclipse工程、命令控制台脚本、实验平台脚本 组件实现方法的灵活选择 编译器实现方法的灵活选择,编译原理课程实践改革探索,2

12、0/35,提纲,引言 课程实践方案 规划与历程 课程实验的组成要素 实验平台与相关工具 课程设计软件包的特点 实验改革实践与经验教训 课堂教学中与实际的联系,20,编译原理课程实践改革探索,21/35,实验改革实践(1),课程实践及其任务 去年春季,在04级编译原理教学中实施。 每个学生独立完成SkipOOMiniJOOL语言编译器的前端或后端,并自行选择完成后端或前端的合作伙伴。 时间节点 3月底印发编译原理实验教程 安排两次课堂辅导:4月下旬和5月10日左右 5月份开始上机 6月下旬通过网络提交课程设计 源代码、类库文件、测试程序、设计文档等 6月下旬考评,编译原理课程实践改革探索,22/

13、35,实验改革实践(2),考评方法 学生分成若干组,每组约10人 各组用一个上午、下午或晚上的时间进行现场测试、答辩和公开评分 评委:教师、研究生助教、同组的所有同学 教师主导测试过程,学生自己动手按老师要求操作,并用投影机当众显示测试过程 老师和同学均可以提问,学生需当众回答 所提问题主要围绕完成的设计和编程,以及测试中暴露出的设计或编程错误等展开,编译原理课程实践改革探索,23/35,实验改革实践(3),评分依据 工程的规范性 编译器的正确性 错误定位与恢复能力 所生成的目标代码质量 回答问题时所表现出的对本课程设计所涉及知识的掌握程度 对自己设计和编码的前端(后端)的熟悉程度 操作的熟练

14、程度 提交物的完整性、条理性及其中反映的分析和设计的思想,编译原理课程实践改革探索,24/35,实验改革实践(4),评分方法 每个评委当场给该组的全部同学排名次 由助教根据所有有效排名表,给出最终的排名 由老师根据本组的情况确定本组的最高分和最低分,并依据排名,主要按等间隔确定每个同学的分数,编译原理课程实践改革探索,25/35,实验改革实践(5),其他评分细则 如被老师、助教和过半数同学认为所提交的不是自己的课程设计成果时,为0分; 未按时提交也是0分; 独自完成整个编译器,分组评定成绩后降10分; 当前后端人数比例严重失调,则抬高少数人一端分数 若所开发的前端(或后端)被多个同学(开发的合

15、作伙伴除外)采用,则在分组评分的基础上加分,加分原则是: 每增加两个采用者加1分 课程设计和平时作业合计不超过50分,编译原理课程实践改革探索,26/35,实践效果,反响 BBS CompilerTech版: 07.5.10(978) 07.6(+300) 学生1(张昊中) 收益 加深了对LALR分析的理解; 大概了解了一个编译器(特别是前端)的结构和工作流程 积累了一些做工程的经验。 存在问题 对实验中要处理的语言的定义不清晰; 实验指导不足。,编译原理课程实践改革探索,27/35,实践效果,学生2(李勋浩) 收益 了解了编译器的基本运行方式,以及经典程序语言运行的基本方式 一些一直以来未能

16、理解的概念和疑问,在自己的摸索中明朗了 在这样相对较为开放的实验环境中,一定程度上激发了我创造的热情。实现中我会不断假想,假如用另一种方法去实现,会怎么样?假如增加某种功能,是否容易?如果不容易,需要加入什么样的内容? 不足之处 大三下课程较紧,实验周期不长,学生不易在已完成结果上扩展 实验中能够找到的非常相关的阅读材料不足,能找到的也大多是英文的,这对大多数学生来说是个障碍; 抄袭现象较严重,这也是跟本次实验相对其它课程实验来说更难入门有关。,编译原理课程实践改革探索,28/35,经验教训,经验 提供程序框架和文档说明:既有挑战性又有好的效果 以中间表示作为编译器组件间信息传递的接口:既控制

17、了学生开发的规模又允许有自行设计的空间 提供AST图形显示并要求生成汇编码,便于测试和考评 合作开发、自主推销和选择、整体评测,既培养了团队精神,又增强了质量意识 规定了统一的版本提交截止时间,既有公平性和工程性,又易于评测 教师主导的集体公开评分方式,既有公平性又易评测 由学生参与评分,既能弥补教师对学生实际情况了解的局限性,又能调动学生的参与热情,编译原理课程实践改革探索,29/35,经验教训,教训及改进之处 多种开发工具和环境加宽了学生的技术层面,但导致学生不能集中精力到和编译有关的技术上来。前导软件课程实践中逐步熟悉掌握其中的部分工具,提供对这些工具的文档说明和样例。 对要实现的语言描

18、述不够=形式化语言规范 对提交环境目录和编写能编译运行编译器的批处理文件等要求发布太迟。增加相关的要求与指南,平时注意对学生强调它们。 只有提交截止时间=多时间节点和多次提交的过程管理与控制 需要配备技术水平高的软件实验师,研究生助教承担不好这样的实验指导,编译原理课程实践改革探索,30/35,提纲,引言 课程实践方案 规划与历程 课程实验的组成要素 实验平台与相关工具 课程设计软件包的特点 实验改革实践与经验教训 课堂教学中与实际的联系,30,编译原理课程实践改革探索,31/35,课堂教学策略,总体策略 涉及的基本理论必须了解 对编译原理和技术的宏观理解及全局把握比了解一些局部的算法重要得多

19、 准备了很多从实际程序编译和运行时碰到的问题中抽象出来例子 选择 C 语言作为实例语言 引导用所学知识去分析、解决、理解实际编程中遇到的问题 规模较大的课程设计:两个合作完成一个Java小子集的编译器,编译原理课程实践改革探索,32/35,例题1:类型系统,在X86/Linux机器上,编译器报告最后一行有 错误:incompatible types in return typedef int A110;| A2 *fun1( ) typedef int A210;| return( C语言对除结构类型以外的所有类型都使用结构等价,而对结构类型使用名字等价。,编译原理课程实践改革探索,33/35

20、,例题2:局部存储分配,在SPARC/Solaris工作站上,下面两个结构 的size分别是24和16,为什么不一样? typedef struct _a typedef struct _b char c1; char c1; long i; char c2; charc2; long i; double f; double f; a; b;,编译原理课程实践改革探索,34/35,例题2:局部存储分配,在SPARC/Solaris工作站上,下面两个结构 的size分别是24和16,为什么不一样? typedef struct _a typedef struct _b char c1;0 char c1;0 long i;4 char c2; 1 charc2;8 long i; 4 double f;16 double f; 8 a; b; 数据在存储分配时有对齐问题,编译原理课程实践改革探索,35/35,35,谢 谢 !,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 管理文献 > 事务文书

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com