编译原理--编译器

编译器的核心功能:就是把源代码翻译成目标代码

实现这个功能要经历什么步骤呢?

理解源代码:词法分析,语法分析,语义分析

转化为等价的目标代码:中间代码生成,目标代码生成

优化:优化方法

编译器的结构:

每个阶段源程序从一种表示转换成另一种表示。

  • 词法分析器:字符流->单词流
  • 语法分析器:单词流->语法树
  • 语义分析器:
    • 收集标识符的属性信息:
      • 类型
      • 种属
      • 存储位置、占用内存
      • 作用域
      • 参数和返回值
    • 语义检查:
      • 变量或者过程未经声明就使用
      • 变量或过程名重复声明
      • 运算分量类型不匹配
      • 操作符与操作数的类型不匹配
  • 中间代码生成器:抽象语法树->中间表示(与平台无关的抽象程序)
  • 代码优化器:改进中间代码,产生执行速度较快的机器码,如:xx=r+q;yy=w+xx;zz=yy;----->xx=r+q;zz=w+xx;
  • 代码生成器:生成可重定位(编译的时候不是变成物理地址而是用标识符表示的逻辑地址)的机器代码或汇编代码
  • 符号管理器:
    • 基本功能是记录源程序中使用的标识符
    • 收集与每个标识符相关的各种属性信息
    • 将收集到的信息记录到符号表中
  • 错误处理器:
    • 处理方式:报告错误,应继续编译
    • 大部分错误在语法分析和语义分析阶段检测出来
    • 词法分析:字符无法构成合法单词
    • 语法分析:单词流违反语法结构规则
    • 语义分析:语法结构正确但无实际意义

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值