编译原理#简介

编译器概述

什么是编译器?

  • 编译器是一个程序
  • 核心功能是把源代码翻译成目标代码
    • 源代码:C/C++、Java、C#、html、SQL…
    • 目标代码:x86、IA64、ARM、MIPS…

编译器的核心功能

编译器的核心功能

编译器和解释器

  • 解释器也是处理程序的一种程序
  • 不会翻译成可执行程序,直接得到结果
  • 编译器是离线(offline)的方式,解释器是在线(online)的方式
  • 但两者在理论、技术、方法上有很大的相似之处

编译器简史

  • 第一个编译器是Fortran语言的编译器
    • 1954-1957年,Jonn Backus

编译器结构

编译器的高层结构

  • 编译器具有非常模块化的高层结构
    • 前端:处理和输入相关,源程序的语法规则,满足的约束条件
      • 词法分析
      • 语法分析
    • 后端:处理和输出相关,目标机器有什么指令集,有什么约束,前端的语法结构如何映射到指令集上
      • 指令生成
      • 指令优化
  • 编译器可看成多个阶段构成的“流水线”结构,使抽象一层一层向下降低,每一个模块相对容易实现和维护

一种没有优化的编译器结构

这里写图片描述

更复杂的一种编译器结构

这里写图片描述
- 编译器设计中的重要问题是如何合理的划分组织各个阶段

编译器实例

源语言:加法表达式语言Sum

  • 两种语法形式:
    • 整形数字n
    • 加法e1+e2

目标机器:栈式计算机Stack

  • 两条指令:
    • push n
    • add
      • 相当于x=pop(); y=pop(); z=x+y; push z

任务:编译程序1+2+3到栈式计算机

这里写图片描述

任务:增加一个代码优化的阶段,常量折叠

这里写图片描述
在扔给后端之前,多一个优化阶段

来源:
1. 华保健网易云课堂授课,如有侵权请联系本人删除
2. 虎书

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值