[Modern Compiler] Introduction

来源:互联网 发布:js 手机 输入法弹出 编辑:程序博客网 时间:2024/04/27 21:07

目录

  • 目录
  • 模块与接口
    • 各个阶段描述
  • 工具和软件
  • 树语言的数据结构

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

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. 树表示,例如:

树表示

0 0
原创粉丝点击