编译实习 王 千 祥 北京大学信息学院
如何与老师联系? 理科一号楼1803 电话:62759074(O) Email:wqx@pku.edu.cn 高级软工、操作系统
同教: 郭耀 参与 辅导环节 与 成绩计算环节 联系方式:略 助教: 邵津 shaojin07 梁广泰 lianggt08 参与 辅导环节 与 成绩计算环节 联系方式:略 助教: 邵津 shaojin07 梁广泰 lianggt08 刘海文 liuhw08 石奎 shikui08 @sei.pku.edu.cn 理科1号楼1726
课 程 介 绍 一、为什么要进行编译实习 二、如何组织实习 三、如何辅导与检查 四、成绩如何计算 五、其它信息
一、为什么要进行编译实习 宋·陆游 古人学问无遗力 少壮工夫老始成 纸上得来终觉浅 绝知此事要躬行
Learning by doing
任何人 想 仅仅通过单纯的阅读 而 不把所学到的知识应用于特定问题 并 强迫自己反复进行思考 就 掌握一门学问 如果说 不是不可能的 那也是困难的 凡是 人们自己亲身探索、体会到的东西 学得最好
课程目的 巩固所学习的编译知识 深入理解编程语言:新语言? 深入理解处理器:多核编程? 学习典型开发工具:新工具? 体会大项目流程:软件工程?
学、做、说、写 做: 开发 解释器、编译器 非常收获! 非常投入 学: 学习 编译知识、开发工具、开发流程 说: 讲解 自己的工作 学: 学习 编译知识、开发工具、开发流程 做: 开发 解释器、编译器 说: 讲解 自己的工作 写: 撰写 基于 自己工作 的 报告 非常收获! 非常投入 非常投入 非常投入 非常投入
主要挑战是什么 警示数据 为什么? 08年未获得成绩率:15/122! 难!必修--->限选;教务 目标不清楚 时间投入不足 缓考 笔试分数低 未交作业 作弊 为什么? 难!必修--->限选;教务 目标不清楚 时间投入不足
二、如何组织实习 与以往有较大不同 从 老教师 到 新教师 从 指定到 指定 + 自选 教材 从 C 到 Java 给同学更多的选择 教材 从无到有 参考 国内其他学校 从 C 到 Java 实用性更强 从 2 次检查 到 4 次检查 更多的过程控制点
指定题目(多数) 开发一个 miniJava 的编译器 1-2人 1人为主:完整体验 允许2人:极限编程 Vs. 滥竽充数 便于辅导、检查
MiniJava 编译器描述 输入 输出 符合 MiniJava 语言规范的源程序 P 对 P 进行编译 生成能在 SPIM 上运行的目标码
怎么做? 热身:直线程序解释器(第一月) 实战:MiniJava 编译器(第二、三月) 语言简单 不借助任何工具(直接在JDK上运行) 体会编译涉及的基本环节 熟悉工作环境: JDK, (Eclipse) 实战:MiniJava 编译器(第二、三月) 复杂,但比完整的 Java 语言简单 借助工具 JavaCC 完成词法分析器 与 语法分析器 生成目标码
编译器的基本内部流程 前端(分析) 后端(综合) 内 部 表 示 词法 分析 语法 扫描 指令 选择 分配 寄存器 出错信息 源程序 目标程序 出错信息
MiniJava 编译器 词法 分析器 语法 分析器 语义 分析器 寄存器 分配 代码 生成 扫描器 编译器内部模块 JavaCC SPIM MiniJava Grammer SPIM Eclipse 开发环境 Java 语言 课堂介绍内容
自选题目(少数) 面向实际项目 探索课程间协作 鼓励创新 总共4个左右 2-3人 一个项目
自选题目(少数) 题目来源 与《体系结构实习》联合 软件分析 多核相关 自己设计 例如: 不同方式界面的转换
时间安排 明确任务 规划题目 词法分析 语法分析 抽象语法 语义分析 中间代码 目标代码 最终集成 9.17 课程介绍,题目介绍 9.17 课程介绍,题目介绍 9.24 Java、Eclipse 介绍 10.15 MiniJava 语法、题目筛选 10.22 JavaCC 介绍 10.29 答疑 11.5 点评 11.12 答疑 11.19 答疑 11.26 点评,SPIM 介绍 12.3 答疑 12.10 答疑 12.17 演示、点评 词法分析 语法分析 抽象语法 语义分析 (数据流分析) 中间代码 目标代码 最终集成 实习报告
三、如何辅导与检查 4位助教为主 每位助教负责:1 + 1 + 1 1个班 1个自选题目 1次点评
辅导与检查方式 辅导方式 检查方式 作业批注 上课点评 电子方式提交 约定时间到院软件实验室检查 北大教学网(course.pku.edu.cn) 约定时间到院软件实验室检查 集中、顺序 现场 询问、检查
集中检查时间安排 明确任务 规划题目 词法分析 语法分析 抽象语法 语义分析 中间代码 目标代码 最终集成 9.17 课程介绍,题目介绍 9.17 课程介绍,题目介绍 9.24 Java、Eclipse 介绍 10.15 MiniJava 语法、题目筛选 10.22 JavaCC 介绍 10.29 答疑 11.5 点评 11.12 答疑 11.19 答疑 11.26 点评,SPIM 介绍 12.3 答疑 12.10 答疑 12.17 演示、点评 10月13日 词法分析 语法分析 抽象语法 11月3日 语义分析 (数据流分析) 中间代码 11月24日 目标代码 最终集成 实习报告 12月15日
四、成绩如何计算:4+1 4次 平时作业:程序 4 * 20 = 80% 1个 实习报告:文档+体会+建议 1 * 20 = 20% 总体上:按学校要求的正态分布 85(含)以上:1-45 人 60(不含)以下:1-5 人
五、其它信息 主要参考文献: Modern Compiler Implementation in Java , 2nd edition. Andrew Appel with Jens Palsberg, Cambridge University Press, 2002 现代编译器的 Java 实现(第二版),电子工业出版社,2004年9月 http://www.cs.ucla.edu/~palsberg/course/cs132/S09/index.html 课程网站:http://sei.pku.edu.cn/~wqx/cl/2009 基本信息 北大教学网:course.pku.edu.cn 交作业、讨论
作业(都要做!) 编写一个 Java 程序:一个直线程序语言的 解释器 直线程序语言特点: 没有 循环语句 与 分支语句 只有 一种数据类型:整数 只有 4 种基本运算:+ - * / 检查时间:10月15日以前(13日) 直接在 JDK 上运行!
Stm → Stm ; Stm CompoundStm Stm → id := Exp AssignStm Stm → print (Exp) PrintStm Exp → id IdExp Exp → num NumExp Exp → Exp Binop Exp OpExp Binop → + Plus Binop → - Minus Binop → * Times Binop → / Divide 缺省:不带优先级 高级:带优先级 输入:a := 5+3; print(a);b :=10*a; print(b) 输出:8 80
非常收获! 非常投入 非常投入 非常投入 非常投入 问 题 ?