【软考】中间代码

1. 说明
  • 1.从原理上讲,对源程序进行语义分析之后就可以直接生成目标代码,但由于源程序与目标代码的结构往往差别很大,特别是考虑到具体机器指令系统的特点,要使翻译一次到位很困难,而且用语法制导方式机械生成的目标代码往往是烦琐和低效的,因此有必要设计一种中间代码,将源程序首先翻译成中间代码表示形式,以利于进行与机器无关的优化处理。
  • 2.由于中间代码实际上也起着编译器前端和后端分水岭的作用,所以使用中间代码也有助于提高编译程序的可移植性
  • 3.常用的中间代码有后缀式三元式四元式等形式。
2. 后缀式
  • 1.后缀式(逆波兰式)。
  • 2.逆波兰式是波兰逻辑学家卢卡西维奇发明的一种表示表达式的方法。
  • 3.这种表示方式把运算符写在运算对象的后面,例如,把a+b 写成 ab+,所以也称为后缀式。
  • 4.这种表示法的优点是根据运算对象和运算符的出现次序进行计算,不需要使用括号,也便于用栈实现求值。
  • 5.对于表达式 x:(a+b)*(c+d),其后缀式为 xab+cd+*:。
3. 树
  • 1.树形表示。
  • 2.例如,表达式 x:-(a+b)*(c+d)的树形表示为:
    在这里插入图片描述
4. 三元式
  • 1.三元式是由运算符 OP、第一运算对象 ARG1 和第二运算对象 ARG2 组成的。
  • 2.例如,表达式 x:-(a+b)*(c+d)的三元式表示为:①(+,a,b) ②(+,c,d) ③(*,①,②) ④(:=,③,x)
5. 四元式
  • 1.四元式是一种普遍采用的中间代码形式,其组成成分为运算符 OP、第运算对象 ARG1、第二运算对象 ARG2 和运算结果 RESULT。
  • 2.运算对象和运算结果有时指用户自定义的变量,有时指编译程序引入的临时变量,RESULT总是一个新引进的临时变量,用来存放运算结果。
  • 3.例如,表达式x:-(a+b)*(c+d)的四元式表示为:(+,ab,t1) ②(+,c,d,t2) ③(*,t1,t2,t3) ④(:=,t3,_,x)
6. 例题
6.1 例题1
  • 1.题目
1.将高级语言源程序通过编译或解释方式进行翻译时,可以先生成与源程序等价的某种中间代码。
以下关于中间代码的叙述中,正确的是(B)。

A.中间代码常采用符号表来表示
B.后缀式和三地址码是常用的中间代码
C.对中间代码进行优化要依据运行程序的机器特性
D.中间代码不能跨平台
  • 2.解析
1.常不采用符号表。
2.中间代码是进行与机器无关的优化处理,因此不依据机器特性,可以跨平台。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

王佑辉

老板,赏点吧

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

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

打赏作者

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

抵扣说明:

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

余额充值