编译原理 4 - 语义分析、中间代码生成、代码优化、代码生成


第7章 语义分析与中间代码生成

7.1 中间代码

  • 作用:经语义分析翻译成中间代码序列
  • 优点:形式简单、语义明确、独立于目标语言;便于编译系统的实现、移植、代码优化
  • 中间代码的形式抽象语法树逆波兰表示三地址码DAG图表示

逆波兰表示

  • 后缀表示法:表达式的运算顺序就是运算符出现的顺序
    在这里插入图片描述

三地址码

  • 每条指令最多只能包含三个地址,即两个操作数地址和一个结果地址
    在这里插入图片描述

四元式

在这里插入图片描述

三元式

在这里插入图片描述

DAG 有向无环图

在这里插入图片描述

7.2 声明语句的翻译

在这里插入图片描述

7.4 类型检查(略)

语法分析(syntax analysis) 是编译程序的核心部分,其任务是检查词法分析器输出的单词序列是否是源语言中的句子

第10章 代码优化

重点:代码优化的任务,局部优化、循环优化、全局优化的基本方法

  • 代码优化:对程序进行等价变换,提高目标程序的效率,通常只对中间代码进行优化

优化的种类

  • 机器相关性 划分:
    • 机器相关优化
      寄存器优化、多处理器优化、特殊指令优化、无用指令消除等
    • 机器无关优化
  • 优化语言级 划分:
    • 针对中间代码
    • 针对机器语言

代码优化方法

  • 公共子表达式删除
  • 复制传播
  • 无用代码删除
  • 代码外提
  • 强度削弱

局部优化

局部优化:以程序的基本块为基础,基本块内的优化

  • 利用DAG(有向无环图)进行基本块变换
    ① 局部公共子表达式删除
    ② 无用代码删除
    ③ 交换两个独立的相邻语句的次序,以便减少某个临时值需要保存在寄存器中的时间
    ④ 使用代数规则重新排列三地址码的运算对象的顺序,以便简化计算过程

  • 循环优化
    • 循环不变计算的检测
    • 代码外提
    • 归纳变量删除 和 强度削弱

  • 全局优化:跨基本块的优化
    • 全局公共子表达式的删除
    • 复制传播

第11章 代码生成 略

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
词法分析、语法分析、语义分析中间代码生成编译原理中的重要概念。 词法分析是编译过程的第一步,它将输入的源代码分割成一系列的单词(也称为词法单元),并生成对应的词法单元流。词法分析器根据预先定义的词法规则来识别各个单词,并将其转化为相应的词法单元。这一过程中,识别出的单词可能会被舍弃,而只保留有意义的词法单元。 语法分析是编译过程的第二步,它将词法单元流转化为语法分析树或语法分析图。语法分析器使用一种称为文法的形式化规则来描述源代码的结构,然后根据这些规则来确定源代码是否符合定义的文法规则。如果源代码符合文法规则,则进行语法分析;否则,报告语法错误。 语义分析是编译过程的第三步,它通过对语法树或语法图进行分析,确定源代码中的语义结构是否合法。语义分析器会检查语法分析结果中的各种语义规则,如变量的声明和使用规则、函数调用规则等。如果发现违反语义规则的情况,报告语义错误。 中间代码生成是编译过程的第四步,它将经过语义分析的源代码转化为一种中间表示形式,通常是一种与源代码和目标代码无关的高级语言形式。中间代码生成器根据语法树或语法图,将源代码转化为中间代码。这些中间代码可以方便后续阶段进行代码优化和目标代码生成。 总之,词法分析、语法分析、语义分析中间代码生成是编译器的核心组成部分。词法分析将源代码转化为词法单元流,语法分析确定源代码的语法结构,语义分析检查源代码的语义结构是否合法,中间代码生成将经过语义分析的源代码转化为中间表示形式。这些步骤协同工作,最终将源代码转化为可执行的目标代码

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值