【编译原理复习笔记】(1)编译器结构简介

什么是编译

机器语言-汇编语言-高级语言

机器语言

  1. 机器语言编写的程序可以直接被计算机理解,但是与人类理解相去甚远
  2. 容易写错,难以编写
  3. C706 0000 0002

汇编语言

  1. 引入助记符
  2. 编写起来仍然有困难
  3. MOV X,2

高级语言

  1. 方便理解与编写
  2. x = 2
    从汇编到机器语言的过程称为汇编
    从高级语言(源语言)转为汇编语言/机器语言(目标语言)的过程则称为red:编译

(源程序)-预处理器-(预处理源程序)-编译器-(汇编语言程序)-汇编器-(可重定位的机器代码)-加载器-(目标代码)

编译器过程

字符流
词法分析器
语法分析器
语义分析器
中间代码生成器
机器无关代码优化器
目标代码生成器
机器相关代码优化器
目标机器语言

词法分析

主要任务

从左向右逐行扫描字符,识别单词,确定类型,并将它们转换为统一的机内表示 token

token

<种别码,属性码>
种别码包括:关键字(一次一码),标识符(多词一码),常量(一类型一码),运算符(一词一码/一型一码),界符(一词一码)

  类型     |                   例子                   |     种别码  
关键字   |                 if,else                 |   一词一码
标识符   |         变量名,数组名         |   多词一码
  常量     |   整型,浮点型,布尔型   |   一型一码
运算符   |       算术,逻辑,关系       |   一型一码
  界符     |               (),;               |   一词一码

语法分析

  1. 识别词法分析中各类词语,并构造语法分析树
  2. e.g.声明语句的分析树
<D>-><T><IDS>;
<T>->int | real | char | bool
<IDS>->id|<IDS>,id

D stands for destination;
T stands for type;
IDS stands for strings of Identifier;

(1)int a,b,c;
(2)int a;

语义分析

收集标识符的属性信息

种属Kind

简单变量,复合变量,过程

类型Type

整型,实型,字符型,布尔型

储存位置/长度

e.g.

begin
  real x[8];
  int i,j;
end

假设一个实型变量占用字节为8字节
x[0]起始为0,x[7]终点为63
则i的起点为64
作用域
参数和返回值

将所有信息存于符号表中

语义检查

中间代码生成

常用的中间表示形式

三地址码:由类似汇编语言的指令序列组成,每个指令最多三个操作数

三地址指令的表示:

  1. 四元式:(op,entity1,entity2,entity3)
    e.g.
    三地址图片

  2. 三元式

  3. 间接三元式

语法树

目标代码生成

  1. 目标代码生成器以中间形式作为输入,并映射到目标语言
  2. 为程序中的变量分配寄存器

代码优化器

  1. 为了改进代码而做的等价程序变换
  2. 机器无关代码负责优化中间代码,机器有关代码负责优化目标机器语言
  • 21
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值