7 Intermediate Representation

Slides:



Advertisements
Similar presentations
邱锡鹏 复旦大学计算机科学技术学院 Text Books  “Dragon book”  Compilers: Principles, Techniques, and Tools (2nd Edition)  Alfred V. Aho;Monica S.
Advertisements

電腦與問題解決 5-1 電腦解題概論 5-2 電腦解題程序 5-3 演算法概論.
a simplified C to Java Compiler
Ch02物件導向程式設計 物件導向系統分析與設計.
编译原理第二次习题课 王静.
Memory Pool ACM Yanqing Peng.
第14章 預存程序 14-1 預存程序的基礎 14-2 建立與執行預存程序 14-3 預存程序的參數傳遞 14-4 預存程序的傳回值
Performance Evaluation
第4章 VHDL设计初步.
第六章 中间代码生成 赵建华 南京大学计算机系.
新世代計算機概論 第14章 程式語言.
第9章 运行时的存储组织 重点:符号表的内容、组织,过程调用实现, 难点:参数传递,过程说明语句代码结构,
Leftmost Longest Regular Expression Matching in Reconfigurable Logic
Operators and Expressions
Chapter 3: Stack.
编译原理与技术 中间代码生成 2018/9/17 《编译原理与技术》讲义.
FC OB1 FB SFC 操作系统 SFB OBs 结构化编程 其它
第七章 中间代码生成 静态 中间 分析 检查 代码 记号流 器 生成 本章内容 介绍几种常用的中间表示:后缀表示、图形表示和三地址代码
第八章 符号表 符号表的作用: 一致性检查和作用域分析; 辅助代码生成..
Introduction to the C Programming Language
第一章 C语言概述.
陳維魁 博士 儒林圖書公司 第七章 參數的傳遞 陳維魁 博士 儒林圖書公司.
编译原理与技术 第7章 中间代码生成 3学时.
Chap 3 堆疊與佇列 Stack and Queue.
结构化编程 FC OB1 FB SFC 操作系统 SFB OBs 其它
Chapter 6 Graph Chang Chi-Chung
單元3:軟體設計 3-2 順序圖(Sequence Diagrams)
Transact-SQL 語言設計教學.
助教:胡光能,解定宝 编译原理讲师:戴新宇
Last Lecture Revisited
C 程式設計— 指標 台大資訊工程學系 資訊系統訓練班.
第六章 运行时存储空间的组织和管理 术语 本章内容 讨论一个活动记录中的数据布局 程序执行过程中,所有活动记录的组织方式 过程的活动
Data Structure(資料結構) 授課老師: 蕭志明 助理教授 Ext:6779
6 下标变量的中间代码生成 下标:数组;变量: 下标变量:即数组分量: 简单变量:id,其地址可查到;
创建型设计模式.
講師:戴志華 國立台灣大學電機工程研究所 Visual Basic 程式設計 講師:戴志華 國立台灣大學電機工程研究所.
Function.
C 語言簡介 - 2.
编译原理课程设计.
第3章 變數、常數與資料型態 3-1 C語言的識別字 3-2 變數的宣告與初值 3-3 指定敘述 3-4 C語言的資料型態
第2次课 上下文无关文法
資料庫管理(Access 2003) 第五章 利用查詢來 統計與分析資料 許欽嘉 老師.
重點 資料結構之選定會影響演算法 選擇對的資料結構讓您上天堂 程式.
7.4 布尔表达式和控制流语句 布尔表达式有两个基本目的 计算逻辑值 c = (a > b) && a > 1
邏輯設計 Logic Design 顧叔財, Room 9703, (037)381864,
中间代码生成.
第2章 PL/0编译程序 2.1 PL/0语言和类pcode的描述 2.2 PL/0编译程序的结构 2.3 PL/0编译程序的语法语义分析
第3章 認識處理元.
樹 2 Michael Tsai 2013/3/26.
Programming Languages
语义分析概述 符号表 第六章 语义分析.
Introduction to lisp lisp.
資料結構 Data Structures Fall 2006, 95學年第一學期 Instructor : 陳宗正.
Answering aggregation question over knowledge base
编译原理实践 11.语义分析与代码生成.
第七章 语义分析和中间代码生成 本章内容 介绍几种常用的中间表示:后缀表示、图形表示和三地址代码
Chapter 2 & Chapter 3.
Speaker: Liu Yu-Jiun Date: 2009/4/29
软件设计任务 从工程管理的角度来看,软件设计分两步完成。 概要设计,将软件需求转化为数据结构和软件的系统结构。
中国科学技术大学计算机系 陈香兰 2013Fall 第七讲 存储器管理 中国科学技术大学计算机系 陈香兰 2013Fall.
第六章 语法制导的翻译 本章内容 介绍一种语义描述方法:语法制导的翻译,介绍语法制导的翻译的实现方法。
Linked Lists Prof. Michael Tsai 2013/3/12.
陳維魁 博士 儒林圖書公司 第三章 變數與繫結 陳維魁 博士 儒林圖書公司.
Chap2 Stack & Queue.
习题课 编译原理与技术 计算机科学与技术学院 李诚.
第九章 运行时存储空间组织 网上教学系统: : 编译原理
编译原理课程设计 2017年4月.
编译原理 第一章 引 论 南京大学计算机科学与技术系 戴新宇.
劉庠宏、林合治編著 國立高雄大學應用數學系 2005年3月1日
陳維魁 博士 儒林圖書公司 第六章 領域與範圍 陳維魁 博士 儒林圖書公司.
Presentation transcript:

7 Intermediate Representation Between the source code and the target code. Simpler than the source code, more complex than the target code Boundary between the front-end and the back-end,convenient for porting to new platforms Possible to design optimizer for IR Parser Static checker IR generator IR Token Code generator 1/34

Return value and parameters Code Static Ex: compiling phases    procedure sort var a: array[0..9] of integer; x:integer; Begin x:= a[3]; End; Lexical Syntactic Token stream Syntax tree Type checking IR generation Construct/ query symbol table Return value and parameters Control link Access link & status 5 a[0] a[1] a[2] … a[9] 15 x 运行栈 sort Query the symbol table, whether a variable is declared Null Head “a” Array 5 “x” Integer 15 Symbol table for sort ↑15= ↑8+3

Ex: After compilation, before execution 。。。。 ↑15= ↑8+3 There’s only executable code, no symbol table or run-time stack 。。。。 Executable code

Return value and parameters Ex: Run-time 。。。。 Execution sequence ↑15= ↑8+3 load 。。。。 Code Static Executable code    Return value and parameters Control link Access link and status 5 a[0] a[1] a[2] … a[9] 15 x Run-time stack

7 Intermediate Representation Topics Introduce several common IR design: postfix representation, graph representation, and three address code Use syntax directed definition and translation scheme to explain how the structures of programming languages are translated to IRs 5/34

7.1 Intermediate language Postfix Graph Three address 7.1.1 Postfix Representation Postfix representation of expression E could be defined recursively: If E is constant or variable, E's postfix representation is E If E is an expression E1 op E2, E’s postfix representation is E1 E2 op, where E1 and E2 are the postfix representations of E1 and E2, respectively If E is represented by (E1), then the postfix representation of E1 is E’s postfix representation Brackets are not necessary (8  4) + 2 => 8 4 2 +

7.1 Intermediate language 后缀表示 图形表示 三地址代码 7.1.1 Postfix Representation Convenient for computer processing (8  4) + 2 => 8 4 2 + 返回值和参数 控制链 访问链和机器状态 局部数据临时数据    top_sp base_sp 栈 运行时!注意区分运行与编译的区别。 8

7.1 Intermediate language 后缀表示 图形表示 三地址代码 7.1.1 Postfix Representation Convenient for computer processing (8  4) + 2 => 8 4 2 + 返回值和参数 控制链 访问链和机器状态 局部数据临时数据    top_sp base_sp 栈 8 4

7.1 Intermediate language 后缀表示 图形表示 三地址代码 7.1.1 Postfix Representation Convenient for computer processing (8  4) + 2 => 8 4 2 + 返回值和参数 控制链 访问链和机器状态 局部数据临时数据    top_sp base_sp 栈 84- 即 8-4=4 8 4 4

7.1 Intermediate language 后缀表示 图形表示 三地址代码 7.1.1 Postfix Representation Convenient for computer processing (8  4) + 2 => 8 4 2 + 返回值和参数 控制链 访问链和机器状态 局部数据临时数据    top_sp base_sp 栈 4 10/34 2

7.1 Intermediate language 后缀表示 图形表示 三地址代码 7.1.1 Postfix Representation Convenient for computer processing (8  4) + 2 => 8 4 2 + 返回值和参数 控制链 访问链和机器状态 局部数据临时数据    top_sp base_sp 栈 84-2+ 即 8-4+2=6 4 6 2

7.1 Intermediate language 后缀表示 图形表示 三地址代码 7.1.2 Graph Representation Syntax Tree assign a +  b c d uminus (a) Syntax Tree a := (b + cd ) + cd’s graph representation

7.1 Intermediate language 后缀表示 图形表示 三地址代码 7.1.2 Graph Representation Syntax tree is a graph representation Directed Acyclic Graph (DAG) is as well assign a +  b c d uminus (a) Syntax Tree (b) dag a := (b + cd ) + cd’s graph representation

7.1 Intermediate language 后缀表示 图形表示 三地址代码 Syntax directed definition to generate declaration statement’s syntax tree Production Semantic Rules S  id :=E S.nptr := mknode(‘assign’, mkleaf (id, id.entry), E.nptr) E  E1 +E2 E.nptr := mknode( ‘+’, E1.nptr, E2.nptr) E  E1 E2 E.nptr := mknode( ‘’, E1.nptr, E2.nptr) E  E1 E.nptr := mkunode( ‘uminus’, E1.nptr) E  (E1) E.nptr := E1.nptr F  id E.nptr := mkleaf (id, id.entry)

7.1 Intermediate language 后缀表示 图形表示 三地址代码 7.1.3 Three address code General form:x := y op z Translate x + y  z into three address code: t1 := y  z t2 := x + t1 Ret and params Local and temp    Control link Access link and status stack Temporary variable After the local variables in the activation records 15/34

7.1 Intermediate language 后缀表示 图形表示 三地址代码 Three address Code is a linear representation of syntax tree or dag a := (b + cd ) + cd Syntax tree’s code dag’s code t1 := b t1 := b t2 := c  d t2 := c  d t3 := t1 + t2 t3 := t1 + t2 t4 := c  d t4 := t3 + t2 t5 := t3 + t4 a := t4 a := t5 assign a +  b c d uminus (a) Syntax tree assign a +  b c d uminus (b) dag

7.1 Intermediate language Examples of three address code Declaration x := y op z, x := op y, x := y Goto goto L If if x relop y goto L Procedural call param x call p , n Return return y Access via index x := y[i] x[i] := y Assign with address x := &y,x := y x := y

7.2 Declaration Statements Generate symbol table entry for local names Assign storage units The symbol table contains the information of the type and the address of the storage units

7.2 Declaration Statements 7.2.1 Declaration inside procedures Compute the type and address of the declared names P  {offset := 0} D S D  D ; D D  id : T {enter ( id.name, T.type, offset); offset := offset + T.width } T  integer {T.type := integer; T.width := 4 } T real {T.type := real; T.width := 8 } T array [ num ] of T1 {T.type := array (num.val, T1.type); T.width := num.val  T1.width} T T1 {T.type := pointer (T1.type); T.width := 4 }

7.2 Declaration Statements 7.2.2 Storage of the scope information If procedural declaration could be recursive, the processing of the declaration statements is different: P  D S D  D ; D | id : T | proc id ; D ; S 20/34

7.2 Declaration Statements 7.2.2 Storage of the scope information program sort(input,output) var a:array[0..10] of integer; x:integer; prcedure readarray; var i:integer; begin …a … end{readarray}; procedure exchange(i,j:integer); begin x:=a[i]; a[i]:=a[j];a[j]:=x;end{exchange}; procedure quicksort(m,n:integer) var k,v:integer; function partition(y,z:integer):integer; begin …a… …v… …exchange(i,j)… end{partition}; begin…end{quicksort}; begin … end{sort}.

7.2 Declaration Statements program sort(input,output) var a:array[0..10] of integer; x:integer; “a”, type info,address in the frame sort Null Head a x readarray exchange quicksort Symbol table of sort

7.2 Declaration Statements program sort(input,output) var a:array[0..10] of integer; x:integer; prcedure readarray; var i:integer; begin …a … end{readarray}; exchange readarray x a Head Null sort quicksort readarrary i

7.2 Declaration Statements program sort(input,output) …… prcedure readarray;…. procedure exchange(i,j:integer); begin x:=a[i]; a[i]:=a[j];a[j]:=x; end{exchange}; sort Null Head a x readarray Point to readarray exchange Point to exchange quicksort readarrary exchange Head Head i

7.2 Declaration Statements program sort(input,output) var a:array[0..10] of integer; x:integer; prcedure readarray; procedure exchange(i,j:integer); procedure quicksort(m,n:integer) var k,v:integer; sort Null Head a x readarray To readarray exchange To exchange quicksort readarrary quicksort exchange Head Head Head i k v partition 25/34 partition

7.2 Declaration Statements exchange readarray x a Head Null sort quicksort To readarray partition v k readarrary i To exchange program sort(input,output) prcedure readarray; procedure exchange(i,j:integer); procedure quicksort(m,n:integer) function partition(…. var k,v:integer; begin …a… …v… … end{partition};

7.2 Declaration Statements 7.2.2 Storage of the scope information The grammar P  D S D  D ; D | id : T | proc id ; D ; S Functions in the semantic rules mktable(previous) enter(table, name, type, offset) addwidth(table, width) enterproc(table, name, newtable) exchange readarray x a Head Null sort quicksort readarrary i enterproc(↑sort,readarray,↑readarray) mktable(↑sort) enter(table, name, type, offset)

7.2 Declaration Statements P  M D S {addwidth (top (tblptr), top (offset) ); pop(tblptr); pop (offset) } M   {t := mktable (nil); push(t, tblprt); push (0, offset) } D  D1 ; D2 D  proc id ; N D1; S {t := top(tblptr); addwidth(t, top(offset) ); pop(tblptr); pop(offset); enterproc(top(tblptr), id.name, t) } Did : T {enter(top(tblptr), id.name, T.type, top(offset)); top(offset) := top(offset) + T.width } N   {t := mktable(top(tblptr) ); push(t, tblptr); push(0, offset) }

7.3 Assignment Statements 7.3.1 Names in the symbol table S  id := E {p := lookup(id.name); if p  nil then emit ( p, ‘:=’, E.place) else error } E  E1 + E2 {E.place := newtemp; emit (E.place, ‘:=’, E1.place, ‘+’, E2.place) } Generate a new temporary name, put the name into the symbol table, and return the address of the entry Output the three address code, similar to printf

7.3 Assignment Statements 7.3.1 Names in the symbol table (cont) E  E1 {E.place := newtemp; emit (E.place, ‘:=’, ‘uminus’, E1.place) } E  (E1) {E.place := E1.place } E  id {p := lookup(id.name); if p  nil then E.place := p else error } 30/34

7.3 Assignment Statements 7.3.2 Reuse of temporary names Suitable for optimization Expansion of the symbol table Larger activation record

7.3 Assignment Statements 7.3.2 Reuse of temporary names Suitable for optimization Expansion of the symbol table Larger activation record E  E1 + E2 generate code like Calculate E1 as t1 Calculate E2 as t2 t3 := t1 + t2 ( ( ) ) ( ( ( ) ( ) ) ( ) ) The lifespan of temporary variables is similar as matched brackets

7.3 Assignment Statements Number of temp names x := a  b + c  d  e  f Statement C value $0 := a  b 1 $1 := c  d 2 $0 := $0 + $1 $1 := e  f $0 := $0  $1 x := $0

Exercise 7.1 34/34