编译原理1 绪论

0 绪论

编译器:将高级语言程序翻译成可以在机器上运行的目标语言

编译器是一个程序:核心功能是把源代码翻译成目标代码

编译器设计的原则

  • 语义相同
  • 以某种可察觉的方式改进输入程序

编译器结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ypl9LW0S-1641899844247)(…/picture/63.png)]

前端:词法分析,语法分析,将输入的代码映射到IR

后端:指令生成,指令优化,将IR映射到目标机的指令集和有限的资源上

IR:中间表示,编译器使用一些数据结构来表示它处理的代码,这种形式称为IR

两阶段结构:简化编译器重定目标的过程(改变编译器是只针对新处理器生成代码的任务,通常称为该编译器重定目标)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s4C5vAcM-1641899844248)(…/picture/64.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-taobUZcJ-1641899844250)(…/picture/65.png)]

编译器构造和具体的编译器目标相关,目前结构之上需要再增加一个

代码优化阶段

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3gVdAbMA-1641899844250)(…/picture/66.png)]

另一个实例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sd6d3MLV-1641899844251)(…/picture/67.png)]

词法分析器:将字符构成的串转换为单词构成的流

通常基于词类来引用单词,标识输入程序中的各个单词,并将每个单词归入对应的词类。

**语法分析器:**判断输入流是否是源语言的一个句子

**类型检查:**检查输入程序中对名字的使用在类型方面是否一致

**中间表示:**前端处理的最后一个问题是生成代码的IR形式

**优化器:**分析+转换

指令选择:将每个IR操作在各自的上下文中映射为一个或多个目标机操作

寄存器分配:将虚拟寄存器映射到实际的目标机寄存器

**指令调度:**为产生执行快速的代码,代码生成器可能需要重排操作

编译器的性质
  1. 编译的效率,即编译一个程序的速度和代价

  2. 编译生成代码的效率,即编译器生成可执行程序的运行效率

  3. 编译生成代码的质量,即和源代码语义等价性

  4. 编译的效率,即编译一个程序的速度和代价

  5. 编译生成代码的效率,即编译器生成可执行程序的运行效率

  6. 编译生成代码的质量,即和源代码语义等价性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值