中国科学技术大学编译原理第1讲 编译原理概述

更新时间:2023-09-02 18:36:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

中国科技大学研究生编译原理课程

编译原理概述

中国科技大学研究生编译原理课程

第一章 引论 什么是编译程序? 翻译程序、解释程序和汇编程序 编译程序的组成结构 编译程序的生成 相关话题

国家高性能计算中心(合肥)

2015/11/19

中国科技大学研究生编译原理课程

语言翻译过程 算法描述,求某整数n的阶乘fact(n), n≥0 1 // n == 0 fact(n) = n * fact( n-1 ) // n! == n * (n-1)! 伪语言描述 fact(n) = if n ≤ 0 then 1 else n*fact(n-1)

国家高性能计算中心(合肥)

2015/11/19

中国科技大学研究生编译原理课程

语言翻译过程 高级程序设计语言描述,(如C语言) int fact( int n ) { if (n<= 0) return 1; else return ( n*fact(n-1)); }

国家高性能计算中心(合肥)

2015/11/19

中国科技大学研究生编译原理课程

语言翻译过程 输入命令 cc foo.cc 程序 foo.c Ansi C compiler cc Object file

库函数或 其它 object文 件

Linker/连接程序

a.out/可执行程序

国家高性能计算中心(合肥)

2015/11/19

中国科技大学研究生编译原理课程

语言翻译过程a.out/可执行程序 loader/装入程序 输入数据 计算机 计算结果

国家高性能计算中心(合肥)

2015/11/19

中国科技大学研究生编译原理课程

语言翻译过程 为何不设计直接运行高级语言的机器? 机器本身的指令系统(二进制) 语言本身扩展

国家高性能计算中心(合肥)

2015/11/19

中国科技大学研究生编译原理课程

什么是编译程序?源程序 S(高级语言)

编译程序 C

目标程序 T(机器语言)

目标程序 T 初始数据

运行系统计算机

计算结果

国家高性能计算中心(合肥)

2015/11/19

中国科技大学研究生编译原理课程

什么是编译程序? 源语言(程序)到目标语言(程序)的映射转换或者翻 译过程 系列转换(翻译)过程

源语言S

T1

Tn

目标语言T

中间语言

国家高性能计算中心(合肥)

2015/11/19

中国科技大学研究生编译原理课程

解释程序与汇编程序 均属于翻译程序源程序 S 初始数据 Interpreter/解释程序 计算结果

汇编程序 S’ 汇编语言

assembler/汇编程序

目标程序 T

国家高性能计算中心(合肥)

2015/11/19

中国科技大学研究生编译原理课程

.file"foo.c" .text .globl fact .type fact,@function fact: pushl %ebp movl %esp, %ebp subl $4, %esp cmpl $0, 8(%ebp) jg .L2 movl $1, -4(%ebp) jmp .L1 .L2: subl $12, %esp movl 8(%ebp), %eax decl %eax

C函数fact的汇编语言形式pushl call addl imull movl .L1: movl leave ret .Lfe1: .size fact,.Lfe1-fact .ident "GCC: (GNU) 3.2.2 20030222 (Red Hat Linux 3.2.2-5)" -4(%ebp), %eax %eax fact $16, %esp 8(%ebp), %eax %eax, -4(%ebp)

国家高性能计算中心(合肥)

2015/11/19

中国科技大学研究生编译原理课程

编译程序的组成结构 词法分析阶段 语法分析阶段 语义分析、中间代码生成 优化阶段 目标代码生成

国家高性能计算中心(合肥)

2015/11/19

中国科技大学研究生编译原理课程

编译程序的组成结构program 前端 front end 与源语言有关 scanner parser semantics

后端 back end 与目标机相关

middle end optimizer

code generator

国家高性能计算中心(合肥)

2015/11/19

中国科技大学研究生编译原理课程

编译程序的组成结构 例子,

hoo.c: main() { float position, initial, rate;position = initial + rate * 60;

}

国家高性能计算中心(合肥)

2015/11/19

中国科技大学研究生编译原理课程

编译程序的组成结构 词法分析阶段-scanner 字符流 -> 记号流position = initial + rate * 60 scanner 字符流

id1 = id2 +标识符

id3

*

60

记号流

赋值运算符 标识符 加运算符 标识符 乘运算符 整型常量

国家高性能计算中心(合肥)

2015/11/19

中国科技大学研究生编译原理课程

编译程序的组成结构 语法分析阶段-parser 记号流 -> 分析树(语法树)id1 = id2 + id3 * 60 parser = id1 id2 id3国家高性能计算中心(合肥) 2015/11/19

记号流

+ *

语法树

6016

中国科技大学研究生编译原理课程

编译程序的组成结构 语义分析 语义树-带有语义信息的分析树(语法树) =id1 id2 id3 + *int float 进行类型 转换

60国家高性能计算中心(合肥) 2015/11/19 17

中国科技大学研究生编译原理课程

编译程序的组成结构 中间代码生成 形式多样 - 三地址码,p-code等 t1 := int_to_float( 60 ) t2 := id3 * t1 t3 := id2 + t2 id1 := t3

国家高性能计算中心(合肥)

2015/11/19

中国科技大学研究生编译原理课程

编译程序的组成结构 代码优化 得到“优化”后的中间代码;也可以在最后的代码生成 阶段实施“优化”t1 := rate * 60.0 position := initial + t1 // 直接用浮点数60.0 // 去除多余的 // 临时变量 较优化前,减少2条中间代码

国家高性能计算中心(合肥)

2015/11/19

本文来源:https://www.bwwdw.com/article/qq8i.html

Top