编译原理第一章绪论by SixInNight


~~ 上一篇文章点击跳转 ~~ 数据库系统概念第一章
~~ 下一篇文章点击跳转 ~~ 编译原理第四章语法分析

计算机程序设计语言及编译


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

编译: 将高级语言源语言)翻译成汇编语言机器语言目标语言)的过程

编译器在语言处理系统中的位置源程序—>预处理器—>经过预处理的源程序—>编译器—>汇编语言程序—>汇编器—>可重定位的机器代码—>链接器Linker/加载器Loader—>目标机器代码

预处理器的作用:

  • 把存储在不同文件中的源程序聚合在一起
  • 把成为宏的缩写语句转换为原始语句

加载器的作用:

  • 修改可重定位地址
  • 将修改后的指令和数据放到内存中适当的位置

可重定位: 在内存中存放的起始位置L不是固定的

绝对地址 = 起始位置 + 相对地址

链接器的作用:

  • 将多个可重定位的机器代码文件(包括库文件)连接到一起
  • 解决外部内存地址问题



编译器的结构


分析部分/前端: 与源语言相关

词法单元流
语法树
语法树
中间表示形式
字符流
词法分析器
语法分析器
语义分析器
中间代码生成器
机器无关代码优化器

综合部分/后端: 与目标语言相关

中间表示形式
目标机器语言
机器无关代码优化器
目标代码生成器
机器相关代码优化器
目标机器语言

词法分析: 从左到右逐行扫描源程序的字符,识别出各个单词,确定单词的类型。将识别出的单词转换成统一的机内表示——词法单元(token)形式 (token: <种别码,属性值>)

语法分析: 语法分析器(parser)从词法分析器输出的token序列中识别出各类短语,并构造语法分析树(parse tree)

语义分析

  • 收集标识符的属性信息
    • 种属(Kind): 简单变量、符合变量(数组、记录、…)、过程、…
    • 类型(Type): 整型、实型、字符型、布尔型、指针型、…
    • 存储位置、长度
    • 作用域
    • 参数和返回值信息: 参数个数、参数类型、参数传递方式、返回值类型、…
  • 语义检查
    • 变量或过程未经声明就使用
    • 变量或过程名重复声明
    • 运算分量类型不匹配
    • 操作符与操作数之间的类型不匹配
      • 数组下标不是整数
      • 对非数组变量使用数组访问操作符
      • 对非过程名使用过程调用操作符
      • 过程调用的参数类型或数目不匹配
      • 函数返回类型有误

常用的中间表示形式: 三地址码、语法树/语法结构树

目标代码生成器: 为程序中使用的变量合理分配寄存器

优化器: 为改进代码所进行的等价程序变换,使其运行得更快、占用空间越少,或二者兼顾




~~ 上一篇文章点击跳转 ~~数据库系统概念第一章
~~ 下一篇文章点击跳转 ~~编译原理第四章语法分析

查看更多文章

计算机组成原理课程设计—硬连线、流水

Win10系统虚拟机(VMware14Pro)及Ubuntu16.04安装教程

数据库实验——表/视图的创建

Python练习题(一)

Flask笔记(一)

JS学习第一天

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值