编译原理-中间代码生成

 

1.概述

1.1 定义

    源程序的一种内部表示,不依赖目标机的结构,易于机械生成目标代码的中间表示。如果不生成中间代码而是直接生成机器语言或者汇编语言形式的目标代码,优点是编译时间短,缺点是目标代码执行效率和质量都比较低,移植性差。

1.2 表示形式

    逆波兰式(后缀式)、三地址码(三元式、四元式)、抽象语法树、有向无环图。

1.3 地位

    如下所示:

 

2.逆波兰式

2.1 定义

      把运算量(操作数)写在前面,把运算符写在后面,因此又称为后缀表示法

2.2 案例

      如下所示:

表达式语句逆波兰式
a+bab+
(a+b)*cab+c*
a+b*cabc*+
a=b*c+b*dabc*bd*+=

 

3.三元地址

3.1 定义

    指每条代码包含一个运算和三个地址,两个地址用于存放运算对象,一个地址用于存放运算结果。其一般形式为

x=y op z。

3.2 四元式

3.2.1 定义

    一个四元式具有四个域的记录结构,表示为:(op,arg1,arg2,result)。op为运算符;result存放运算结果;arg为运算对象,如果为空,则使用空格,留出位置。

3.2.2 案例

例:将 a=b*c+b*d用四元式形式
写成三地址码的赋值语句形式如下:
    1) t1 = b*c
    2) t2 = b*d
    3) t3 =t1+t2
    4) a = t3
写成四元形式如下:
    1) (*,b,c,t1)
    2) (*,b,d,t2)
    3) (+,t1,t2,t3)
    4) (=,t3, ,a)

3.3 三元式

3.3.1 定义

       一个三元式具有三个域的记录结构,表示为:(op,arg1,arg2)。

3.3.2 案例

例:将 a=b*c+b*d用三元形式
(1) (*,b,c)
(2) (*,b,d)
(3) (+,(1),(2))
(4) (=,(3),a)

3.4 抽象语法树

3.4.1 定义

     抽象语法树(Abstract Syntax Code,AST)是语法树的一种简化形式,是源程序的抽象语法结构的树状表示,树的每个节点都表示源代码中的一种结构。

3.5 有向无环图

3.5.1 定义

   有向无环图(Directed Acyclic Graph,简称DAG)对表达式中的每个子表达式都有一个结点,内部结点表示运算符,它的孩子代表运算分量。DAG中代表公共子表达式的结点只出现一次,具有多个父结点。

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luckyliuqs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值