张昱 计算机科学与技术学院 中国科学技术大学 合肥

Slides:



Advertisements
Similar presentations
联系方式 课程学习平台网址: 用户名:学号 ; 密码:身份证后 6 位.
Advertisements

《程序设计实践》 孙辉 理工配楼104A
计算机网络教程 任课教师:孙颖楷.
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
项目四 组建跨地区网络 授课教师:肖颖.
基于解释性语言的手机跨平台架构 Sloan Yi. Qt MTK.
《数据结构》课程简介 李武军 南京大学计算机科学与技术系 2016年秋季.
《数据库原理及应用》课程介绍 信息工程学院 孙俊国
Android快速开发入门 巫文杰、Android工程师 讲师的CSDN博客地址
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
嵌入式系统课程简介 宋健建 南京大学软件学院 2004/02/10.
张昱 中国科学技术大学 计算机科学技术系 合肥
第二讲 搭建Java Web开发环境 主讲人:孙娜
编译原理与技术 2018/11/30 《编译原理与技术》讲义.
SOA – Experiment 3: Web Services Composition Challenge
SVN服务器的搭建(Windows) 柳峰
第11章:一些著名开源软件介绍 第12章:服务安装和配置 本章教学目标: 了解当前一些应用最广泛的开源软件项目 搭建一个网站服务器
DM81X 视频采集处理 ——简单采集显示例程讲解 广州创龙电子科技有限公司
SPI驱动 广州创龙电子科技有限公司 Guangzhou Tronlong Electronic Technology Co., Ltd.
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第五讲 四则运算计算器(一) 精品教程《C#程序设计与应用(第2版)清华大学出版社 谭恒松 主编
Java手机游戏设计实验指导. Java手机游戏设计实验指导 概述 实验的重要性 分析问题 解决问题 动手实践 实验要求 独立完成 开放性.
逆向工程-汇编语言
单元测试工具XUnit 任课老师:黄武 下午2时20分 25.
中国科学技术大学计算机系 陈香兰(0551- ) Spring 2009
《编译原理与技术》 期末复习 计算机科学与技术学院 郑启龙 李 诚 25/12/2018.
分布式程序设计 姚斌 计算机科学与工程系 上海交通大学.
Gzip编译及调试 曹益华
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
三:基于Eclipse的集成开发环境搭建与使用
程序设计工具实习 Software Program Tool
SOA – Experiment 2: Query Classification Web Service
张昱 计算机科学与技术学院 中国科学技术大学 合肥
一个RDF数据自然语言生成器的设计与实现
编程作业3:网页正文抽取 (10分).
录制回放工具使用说明 鲁晓宇
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C语言程序设计 主讲教师:陆幼利.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
学习目标 1、什么是字符集 2、字符集四个级别 3、如何选择字符集.
作业情况 已交作业人数:140人 凡是自己没有交过作业的同学,课后留下,有话要说。 2. 文件名范例: 姓名:王树武 wshw_1.c
计算机及办公软件应用 ©2013 苏州工业园区职业技术学院
第1章 c++概述 1.1 C++语言的简史及特点 1.2 简单的C++程序 1.3 C++语言的基本组成
VisComposer 2019/4/17.
网页设计与制作 —— 学习情境二:网页模板设计
Platform Builder使用介绍 WINCE系统应用开发流程说明 ACTION RDC 杨 涛 2005.Dec.3th
姚金宇 MIT SCHEME 使用说明 姚金宇
实验七 安全FTP服务器实验 2019/4/28.
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
项目二:HTML语言基础.
JSP实用教程 清华大学出版社 第2章 JSP运行环境和开发环境 教学目标 教学重点 教学过程 2019年5月7日.
iSIGHT 基本培训 使用 Excel的栅栏问题
<编程达人入门课程> 本节内容 计算机编程语言 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
魏新宇 MATLAB/Simulink 与控制系统仿真 魏新宇
Touch Github = Touch the World
Parallel Programming Xuanhua Shi/Pingpeng Yuan
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Python 环境搭建 基于Anaconda和VSCode.
主讲教师 欧阳丹彤 吉林大学计算机科学与技术学院
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
任课教师:戴开宇 TA:时均帅、谭肖、王安华 程序设计B班 :20-16:50(90分钟)
《NIOS II那些事儿》视频教程(三) -- NIOS II开发初探
实验六、COM类型病毒分析实验 实验开发教师: 刘乃琦 谌黔燕.
FPGA系统设计与实践 本章小结(第5章).
软件工程课程设计 分组信息说明
Presentation transcript:

张昱 计算机科学与技术学院 中国科学技术大学 合肥 2010.4.26 编译原理实验指导 张昱 计算机科学与技术学院 中国科学技术大学 合肥 2010.4.26

资源 编译原理实验教程及实验软件包 开发环境与工具(参见实验教程1.3节) 目标代码的运行:GCC( MinGW),SPIM http://staff.ustc.edu.cn/~yuzhang/compiler 张昱,陈意云.编译原理实验教程.高等教育出版社,2009.5 开发环境与工具(参见实验教程1.3节) Java语言规范(第3版)--JLS3 http://java.sun.com/docs/books/jls/ Java 1.5的文法规范文件:java15.cup,java15.jj 抽象语法树:Eclipse AST JDT Plug-in Developer Guide ReferenceAPI Reference org.eclipse.jdt.core.dom Java开发运行环境:JDK+Ant Eclipse IDE 编译器的自动生成工具:JFlex,Java CUP(LALR)/JavaCC(LL(k)) 目标代码的运行:GCC( MinGW),SPIM 编译原理实验指导

编译器实现框架 编译原理实验指导

实验入门指南—初步了解 开发基础 实验语言 中间表示 Eclipse IDE + JDK + ant(实验教程第1章) 汇编码的运行:GCC、SPIM 自主研发的实验平台及支持库(实验教程第2章及后续章节) 实验语言 从SimpleMiniJOOL语言(见实验教程2.1节)及其实现入手 最终要求实现SkipOOMiniJOOL语言的编译器 词法:实验教程3.2节;语法:4.1节;语义:5.1节 中间表示 Eclipse AST:(见实验教程2.4,2.5节) LIR:(见实验教程6.2节) 编译原理实验指导

实验入门指南—初步了解 目标机 汇编码的内部表示 X86 CISC 生成的汇编码能由GCC编译生成可执行文件 MIPS RISC 生成的汇编码能由SPIM模拟器解释执行 汇编码简介:实验教程7.2和7.3节 汇编码的内部表示 AIR:实验教程7.4节 编译原理实验指导

实验软件包:课程设计开发包目录 课程设计开发包目录 编译原理实验指导

实验软件包:实验支持库的构成 编译原理实验指导

实验运行平台 参见实验教程2.3节 目的 提供各类编译器组件及组件间信息访问的接口,简称实验平台接口。 提供一个实验运行平台,它能够将若干个编译器组件连接装配成一个完整的编译器或解释器并控制它们的运行。 用户可以通过平台配置文件灵活地定制待装配的各个编译器组件以及待编译或解释执行的源程序文件等。 编译原理实验指导

实验平台接口 编译原理实验指导

实验任务(1) 每一学生可选的待开发组件 合作伙伴的组合方式 组件1:带语义检查的分析器(生成AST) 组件2:带语义检查的分析器(生成LIR) 组件3:基于AST的x86汇编代码生成器 组件4:基于AST的MIPS汇编代码生成器 组件5:基于LIR的x86汇编代码生成器 组件6:基于LIR的MIPS汇编代码生成器 合作伙伴的组合方式 组件1+组件3+GCC     组件1+组件4+SPIM 组件2+组件5+GCC     组件2+组件6+SPIM 编译原理实验指导

实验任务(2) 前端任务:组件1或组件2 后端任务:组件3~组件6之一 词法分析、语法分析、静态语义分析、中间表示的生成 其中涉及符号表的设计与实现 后端任务:组件3~组件6之一 需要考虑动态语义检查(如数组下标越界)、短路计算、寄存器分配等,但是对代码优化不作要求。 独立开发后端时,需要设计和实现符号表 生成的x86汇编代码应能直接用gcc汇编连接得到可执行文件,生成的MIPS汇编代码则应能在SPIM上执行 若需要使用其他目标平台,必须在6月13日前与张昱老师联系并确认是否可以使用。 编译原理实验指导

实验任务(3) 最终的编译器 自行选择前后端 每个同学只负责自己提交的编译器的质量。 定义好接口,不开放源代码,只提供jar文件和接口说明,运行时应能输出作者名 你的前端(后端)被采用得越多,则得分越高 每个同学只负责自己提交的编译器的质量。 组件发布人不必考虑其发布的版本被使用的所有编译器的质量。 编译原理实验指导

提交和发布时间节点 提交节点 发布节点 5月16 提交系统设计书,包括进度表和拟开发的组件 5月22前 经老师认可学生可调整拟开发的组件 5月16 提交系统设计书,包括进度表和拟开发的组件 5月22前 经老师认可学生可调整拟开发的组件 5月30 提交已完成源代码和前后端接口描述 6月13 再次提交已完成源代码和进度报告 6月20 提交源文件、类库文件、测试程序、设计文档等 6月22 提交课程实践的收获、体会和建议(发邮件给张昱老师) 发布节点 6月13 发布测试程序 6月15 发布测试环境,对最终提交文档的规定 每次提交时需要说明当前的执行进度与计划中的出入与原因,以及对计划的调整(如果有的话)! 编译原理实验指导

课程设计成绩评定(1) 评分方式和过程 1012个学生一组,大家参与,公开评分 评委:1个教师、助教、同组所有同学 教师主导测试过程、学生自己动手按老师要求操作,并用投影机当众显示测试过程 老师提问,同组同学也可以提问,当众回答 问题主要围绕完成的设计和编程,以及测试中暴露出的设计或编程错误 编译原理实验指导

课程设计成绩评定(2) 评分依据 工程的规范性 编译器的正确性 错误定位与恢复能力 所生成的目标代码的质量 回答问题时所表现出的对本课程设计所涉及的编译知识的掌握程度 对自己设计和编码的编译器和解释器的熟悉程度 操作的熟练程度 所提交文档的完整性、条理性及其中反映的分析和设计的思想 编译原理实验指导

课程设计成绩评定(3) 成绩确定 每个评委给该组同学排名次,同学评委的排名要包括自己 由助教根据所有有效排名表,给出最终的排名 由老师根据本组的情况,确定本组的最高分和最低分,依据排名,按等间隔确定每个同学的分数 被老师、助教和过半数同学认为所提交文档不是自己课程设计成果时,则0分 未按时交也是0分 编译原理实验指导

课程设计成绩评定(4) 奖惩 备注 若所开发的前端(或后端)被多个同学(开发的合作伙伴除外)采用,则在分组评分的基础上加分,加分原则是: 1、每增加两个采用者加1分; 2、课程设计和平时作业合计不超过50分。 独自完成整个编译器,分组评定成绩后降10分 前后端人数比例严重失调,抬高少数人一端分数 备注 成绩评定可能有考虑不周的地方,解释权在老师 系统地发现所提供的参考源代码中的错误,给予表彰和奖励 编译原理实验指导

实验入门指南—深入学习1 开发基础 写一个简单的Java程序 mydir/src/test.java 或者直接利用lab1中的代码lab1/src/… 用Eclipse编译和调试 尝试按实验教程中1.3.3节介绍的各种方法来建立工程 学习在Eclipse下调试和运行 在命令控制台下编译和调试 用javac编译Java源程序,得到Java字节码 用java运行Java字节码 写一个ant编译文件(参见实验教程中1.3.4节),用ant来编译和运行Java程序 用实验平台运行,熟悉配置文件 编译原理实验指导

实验入门指南—深入学习2 SkipOOMiniJOOL语言及其AST 编写SkipOOMiniJOOL程序 目的:了解语言特点,所写程序可以作为测试程序 查看SkipOOMiniJOOL程序的AST 方法:参见lab3 目的:通过AST图形化输出了解一个SkipOOMiniJOOL程序与其AST的对应关系 手工构造SimpleMiniJOOL程序的AST 方法:参见实验教程第2章, TestCase.java等 从小语言入手来学习AST的构造 构造AST的一些注意事项 关于List类型的实例:可以用java.util.LinkedList(或ArrayList) 一个AST节点不能被多棵AST(子树)所引用 编译原理实验指导

实验入门指南—深入学习3 前端:词法分析+语法分析+语义分析 做法 先支持SimpleMiniJOOL,再扩展到SkipOO… 使用JFlex+CUP来生成分析器的源码: 参见ch4和ch5 使用JavaCC来生成分析器的源码: 参见ch5 手工编写分析器 先支持SimpleMiniJOOL,再扩展到SkipOO… 语言中的注意点: 变量的作用域,同名问题的处理,等等 了解AST访问者类、管理符号的一些容器类(如HashMap)、List等等 各类符号的描述信息定义符号类、符号表类 编译原理实验指导

实验入门指南—深入学习4 前端:词法分析+语法分析+语义分析 利用分析器的生成工具构造分析器时, 先构造简单的语法分析器:不构造AST、不进行错误处理 重点:熟悉分析器的生成工具及其使用方法 再构造能输出AST的语法分析器,它只能分析正确的源程序 重点:熟悉在产生式的语义动作中添加构造AST的代码 再构造能处理语法错误并产生AST的语法分析器 重点:识别哪些错误?如何处理错误?如何恢复错误?错误信息? 以AST Visitor的实现类为基础实现语义检查 重点:符号表的设计,语义检查 修改文法规范文件,增加符号表的维护与语义检查动作 重点:注意了解语法和语义分析之间的相互影响 编译原理实验指导

实验入门指南—深入学习5 前端:词法分析+语法分析+语义分析 AST->LIR 了解LIR AST中的结构到LIR的映射关系 编译原理实验指导

实验入门指南—深入学习6 后端:由LIR/AST生成x86或MIPS汇编码 了解x86/MIPS汇编码及其相关工具(gcc/spim) 总结语言的语法结构与汇编码之间的映射关系 写出对应的C程序,用gcc编译得到x86汇编码或spim汇编码 AST和LIR的表示与使用(见实验教程的第2,6章) 了解汇编语言特征配置文件及汇编码的内部表示(见实验教程的第7章) 不考虑寄存器分配的代码生成(lab6或lab7中的Generator1.java) 考虑寄存器分配的代码生成(lab6或lab7中的Generator2.java/Generator3.java ) 编译原理实验指导