2、教学内容
(以2009年秋季学期为例)
第1讲课程概述
基础概念;逻辑结构;组织方式;伙伴程序;生成环境
第2讲实验项目介绍
项目框架的总体结构;实验内容;实验环境;实验安排;考核方案
第3讲文法/正规式/有限自动机─基础知识
形式语言概念;上下文无关文法及语言;正规语言及其描述
第4讲词法分析
词法分析概述;词法分析程序的设计与实现;词法分析程序的自动构造
第5讲符号表
符号表的作用;符号表的常见属性;符号表上的操作;符号表的组织;符号表与作用域
第6讲自顶向下语法分析
自顶向下分析思想;自顶向下预测分析;LL(1)分析;几种文法变换;LL(1)分析的出错处理第7讲自底向上语法分析
自底向上分析思想;移进 归约分析;LR分析基础;LR(0)、SLR(1)、LR(1)、LALR(1)等系列分析方法;二义文法在LR 分析中的应用;LR 分析的出错处理;几类分析文法之间的关系
第8讲语法制导的语义处理基础
属性文法;基于属性文法的语义处理;翻译模式;基于翻译模式的语义处理
第9讲语义分析与中间代码生成
语义分析与中间代码生成概述;常规处理介绍(类型检查、说明语句、赋值语句及算数表达式、数组说明和数组元素引用、布尔表达式、控制语句、拉链与代码回填技术、过程调用)第10讲运行时存储组织
运行时存储组织概述;程序运行时存储空间的布局;存储分配策略;活动记录;过程调用与参数传递;面向对象程序运行时组织
第11讲目标代码生成及代码优化
基本块、流图和循环;数据流分析基础(数据流方程,典型数据流分析举例,UD链,DU链);基于 DAG 表示的局部优化;目标代码生成技术(代码生成基础,一个简单的代码生成算法,图着色物理寄存器分配算法);代码优化技术简述
3、课程实验
实验名称:一个简单面向对象语言编译程序的实现
实验目的:经历开发一个小型编译程序的主要阶段,掌握编译程序设计的基本方法、常用语言机制的实现技术,具有学习和使用特定编译构造工具的能力,培养综合运用
所学知识开发具有一定规模的软件系统的能力。
实验内容:在给定实验框架基础上实现一个简单的强类型单继承面向对象语言的编译程序。
实验框架分5个阶段,目前课程的实验内容包括前4个阶段:
1)借助 Lex 和 Yacc 实现词法和语法分析,经过一遍扫描产生一种高级中间表
示(实验框架指定的抽象语法树)。
2)遍历抽象语法树构造符号表、实现静态语义分析,产生带标注的抽象语法树。
3)从带标注的抽象语法树生成 TAC 中间表示,后者可由实验框架转成MIPS 汇
编码在SPIM 模拟器上运行。
4)基于 TAC 实现一些简单的数据流分析。
创新或扩展实验:对于有余力的同学,可以自行选择在已有实验框架基础上进行有意义的改进工作,通常需要与教师或助教沟通后方可确定创新或扩展实验的选题。
实验环境:普通PC机,Windows或Linux操作系统,Java编程环境,Lex & YACC 工具,MIPS SPIM (Wisconsin大学)。
实验评测:各阶段15~25个测试程序(5~10不公开);检查与标准输出的一致程度;实验报告的质量占20%成绩;必要时个别抽查。
创新或扩展实验的评价需综合考虑创新
性、实用性、合理性、难度、工作量等因素。