中间代码生成 语法 静态检 中间代码L中间 代码 分析器 查程序 生成器 代码 生成器 前端 后端
中间代码生成
本章内容 ·介绍几种常用的中间代码表示 抽象语法树(上一章已介绍) 有向无环图 三地址代码 ·用语法制导定义和翻译方案来说明源语言的各种 构造怎样被翻译成中间表示 声明(和类型) 表达式和赋值 类型检查和类型转换 控制流 过程
本章内容 • 介绍几种常用的中间代码表示 • 抽象语法树(上一章已介绍) • 有向无环图 • 三地址代码 • 用语法制导定义和翻译方案来说明源语言的各种 构造怎样被翻译成中间表示 • 声明(和类型) • 表达式和赋值 • 类型检查和类型转换 • 控制流 • 过程
编译器的前端 前端是对源语言进行分析并产生中间表示 处理与源语言相关的细节,与目标机器无关 ·前端后端分开的好处:不同的源语言、不同的机 器可以得到不同的编译器组合 语法 静态检 中间代码[中间 代码 分析器 查程序 生成器 代码 生成器 前端 后端 图6-1一个编译器前端的逻辑结构
编译器的前端 • 前端是对源语言进行分析并产生中间表示 • 处理与源语言相关的细节,与目标机器无关 • 前端后端分开的好处:不同的源语言、不同的机 器可以得到不同的编译器组合
建立组合编译的做法 Source program Source program in Language-1 in Language-2 Language -1 front end Language-2 Front End Non- optimized Intermediate code Intermediate-code optimizer Optimized Intermediate code Target-1 Code Generator Target-2 Code Generator arget-1 machine code Target-2 machine code
建立组合编译的做法 Target-1 Code Generator Target-2 Code Generator Intermediate-code Optimizer Language-1 Front End Source program in Language-1 Language-2 Front End Source program in Language-2 Non-optimized Intermediate Code Optimized Intermediate Code Target-1 machine code Target-2 machine code
中间代码表示及其好处 ·形式 多种中间表示,不同层次 抽象语法树 三地址代码 ·重定位 为新的机器建编译器,只需要做从中间代码到新的目 标代码的翻译器(前端独立) 抽象”的编译优化 优化与源语言和目标机器都无关
中间代码表示及其好处 • 形式 • 多种中间表示,不同层次 • 抽象语法树 • 三地址代码 • 重定位 • 为新的机器建编译器,只需要做从中间代码到新的目 标代码的翻译器(前端独立) • “抽象”的编译优化 • 优化与源语言和目标机器都无关