[Modern Compiler] Introduction

目录

本标签讲述将程序设计语言转换成可执行代码时使用的技术、数据结构、算法

1 模块与接口

Phases&Interfaces

图中展示了一个典型编译器的各个阶段,每个阶段由一至多个软件模块来实现。分成多个阶段为了能够重用它的各种构件

“思考-实现-重新设计”

各个阶段描述

Description

章号阶段描述
2词法分析源文件 -> 一个个独立的单词符号
3语法分析分析程序的短语结构
4语义动作建立每个短语对应的抽象语法树
5语义分析确定短语含义,建立变量和其声明的关联,检查表达式类型,翻译短语
6栈帧布局按机器要求将变量、函数参数等分配于栈帧内
7翻译生成中间表示树(IR-tree),一种与语言和目标机体系结构无关的表示
8规范化提取表达式中的副作用,整理条件分支,便于下阶段处理
9指令选择将IR-tree结点组合成与目标机指令相对于的块
10控制流分析分析指令顺序,建立控制流图
10数据流分析收集程序变量的数据流信息
11寄存器分配为程序中变量和临时数据选择寄存器
12代码流出用机器寄存器替代每一条机器指令中出现的临时变量名

2 工具和软件

Context-free grammar用于语法分析&Regular expression用于词法分析。

在Linux系统中使用Lex和Yacc工具(Flex & Bison)。

3 树语言的数据结构

直线式程序(straight-line program):

文法:
文法

一段程序在编译器内部表示方式

  1. 源代码表示
  2. 树表示,例如:

树表示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值