当前位置:文档之家› 编译原理王生原(第二章)

编译原理王生原(第二章)


assign varref i intconst 0
les varref i varref numTimes
varref powerbook
newobj Mac
assign print
varref powerbook
varref i add
stringconst "sad\n"
varref i intconst 1
program class Computer <empty> vardecl cpu inttype func Crash voidtype formals vardecl numTimes inttype stmtblock vardecl i inttype for ……
05 级至今 Decaf / Mind 项目
以 Mind 项目为基础,开发语言由 C++ 改为 Java
项目回顾
《编译原理》
清华 Decaf / Mind 项目
参与项目开发的部分同学
杨俊峰(Stanford 助教) 张迎辉(计99-计00助教) 毛雁华(计00-计01助教,X86后端) 刘天淼(计01助教,Windows环境) 唐 硕(计02助教,TOOL) 梁英毅(计03-计05助教,Java 版,Mind,RA) 张 铎(计05-计07助教,改 Mind 至 Java 版) 蒋 波(参与 Decaf 语言规范的翻译 ) (还有许多同学没有一一列举)
实验内容
《编译原理》
四个阶段
Decaf/Mind 程序
语义分析
字符串
词法分析
单词序列
语法分析
抽象语法树
阶段一
(1)构建符号表; (2)非上下文无关
语法检查; (3)类型检查
三地
生成 汇编代码 址码
中间代码优化
(1)划分基本块; (2)数据流分析;
带标注的抽
阶段二
象语法树 三地
址码
中间代码生成
MIPS汇编代码
阶段四
阶段三Βιβλιοθήκη 实验内容《编译原理》 四个阶段
Phase 1 词法和语法分析
借助 Lex 和 Yacc 实现词法和语法分析 一遍扫描后产生一种高级中间表示 (实验指定的抽象语法树 AST)
Phase 2 语义分析
遍历抽象语法树构造符号表、实现静态语 义分析,产生带标注的抽象语法树
Phase 3 生成三地址码 TAC
}
string-constant
实验内容
《编译原理》
Phase 2
遍历 AST 构造符号表、实现静态语义分析
GLOBAL SCOPE: (1,1) -> class Computer (10,1) -> class Mac : Computer (17,1) -> class Main CLASS SCOPE OF 'Computer': (2,9) -> variable cpu : int (3,10) -> function Crash : class : Computer->int->void FORMAL SCOPE OF 'Crash': (3,10) -> variable @this : class : Computer (3,20) -> variable @numTimes : int LOCAL SCOPE: (4,13) -> variable i : int CLASS SCOPE OF 'Mac': (11,9) -> variable mouse : int (12,10) -> function Crash : class : Mac->int->void FORMAL SCOPE OF 'Crash': (12,10) -> variable @this : class : Mac (12,20) -> variable @numTimes : int LOCAL SCOPE: CLASS SCOPE OF 'Main': (18,17) -> static function main : void FORMAL SCOPE OF 'main': LOCAL SCOPE: (19,19) -> variable powerbook : class : Mac
}
class Mac extends Computer { int mouse; void Crash(int numTimes) { Print("ack!"); }
}
class Main { static void main() { class Mac powerbook; powerbook = new Mac(); powerbook.Crash(2); }
定义 Decaf 语法的一个 可能的上下 文无关文法 G[Program]
(片断)
实验内容
《编译原理》
Phase 1
借助 Lex 和 Yacc 实现词法和语法分析
class
Program ClassList
生成一种高级中间表示
program
(抽象语法树 AST) class Main <empty>
Stanford University Massachusetts Institute of Technology University of Tennessee Brown University Texas A&M University Southern Adventist University ……
ClassDefn
static func main voidtype
identifier ExtendsClause‘{’FieldList ‘}’
<empty> FieldList
FunctionDefn
formals
<empty> static Type identifier ‘(’Farmals ‘)’ StmBlock
第二讲
《编译原理》
Decaf / Mind 编译实验项目
Decaf / Mind 编译实验项目 《编译原理》
项目回顾 项目框架的总体结构
实验内容 实验环境 实验安排 考核方案
项目回顾
《编译原理》
Decaf 语言
一种强类型的、单继承的简单面向对象语言 许多大学用作教学语言
| Type identifier '(' Formals ')' StmtBlock StmtBlock ® '{' StmtList '}' StmtList ® StmtList Stmt | <empty> Stmt ® VariableDecl | IfStmt | WhileStmt | … | PrintStmt ';' | StmtBlock Expr ® Constant | Expr '+' Expr | … Constant ® int_const | string_const | … ExprList ® ExprList ',' Expr Expr WhileStmt ® while '(' Expr ')' Stmt PrintStmt ® print '(' ExprList ')' ……
项目回顾
《编译原理》
清华 Decaf / Mind 项目
始于计算机系98级本科生《编译原理》课 基于 Stanford University 课程 CS143
/class/cs143/
根据实际需要进行了一定的修改和简化
如:适应 Windows 平台 增加目标代码在 X86 上的执行 02 级的 TOOL 项目
Phase 4 基于 TAC 实现一些简单的数据流分析
实验内容
《编译原理》
Phase 1
借助 Lex 和 Yacc 实现词法和语法分析
class Computer { int cpu; void Crash(int numTimes) { int i; for (i = 0; i < numTimes; i = i + 1) Print("sad\n"); }
项目框架的总体结构
《编译原理》
当前项目中编译器的逻辑结构
Decaf/Mind 程序
字符串
词法分析
单词序列
抽象语法树
语法分析
语义分析
带标注的抽象语法树
三地址码
三地址码
生成 汇编代码
中间代码优化
中间代码生成
MIPS汇编代码
项目框架的总体结构
《编译原理》
当前项目中编译器的逻辑结构
Decaf/Mind 程序
void
<empty> ‘{’ StmtList ‘}’
stmtblock print
stringconst "hello world"
比较:语法分析结果 (具体语法树 CST)
PrintStmt
‘;’
print ‘(’ ExprList ‘)’
Expr
Constant
class Main { static void main() { print("hello world"); }
03 级之后经历了3 次较大改动
项目回顾
《编译原理》
相关主题