【程序语言与编译】中间代码形式(逆波兰、三元式、四元式)
2026/6/15 21:46:06 网站建设 项目流程

适合读者:软考中级备考同学
阅读时间:3.5分钟
内容:中间代码的作用、逆波兰表示、三元式、四元式的定义与示例、对比、例题


1. 为什么需要中间代码?

编译程序在完成语法分析和语义分析后,会生成一种介于源语言和目标语言之间的表示,称为中间代码(Intermediate Code)。中间代码的作用包括:

  • 便于后续的代码优化
  • 便于目标代码生成
  • 可移植性好(同一中间代码可翻译为不同机器的目标代码)

软考中常考查三种常见中间代码形式:逆波兰表示(后缀式)、三元式四元式


2. 逆波兰表示(Reverse Polish Notation, RPN)

2.1 定义

逆波兰表示是一种不需要括号的表达式表示法,将运算符写在操作数之后,也称为后缀表示。计算时使用栈:遇到操作数压栈,遇到运算符则弹出所需数量的操作数计算,结果压回栈。

2.2 转换方法(中缀 → 后缀)

  • 操作数保持原来顺序
  • 运算符按优先级结合性移到后面
  • 括号决定顺序,但最终结果无括号

2.3 示例

中缀表达式:a + b * c
后缀:a b c * +

中缀:(a + b) * c
后缀:a b + c *

2.4 优点

  • 简单,易于计算机处理(栈计算)
  • 不产生临时变量

2.5 缺点

  • 不便于优化(无法显式表示子表达式共享)
  • 不便于代码生成(需重排)

3. 三元式(Triple)

3.1 定义

三元式是一种三个字段的表示形式:(op, arg1, arg2),其中op为运算符,arg1arg2为操作数(可以是变量、常量或另一个三元式的编号)。计算结果通过三元式的序号引用。

3.2 示例

表达式a + b * c的三元式序列:

(1) (*, b, c) (2) (+, a, (1))

其中(1)表示第一个三元式的结果。

3.3 优点

  • 紧凑,节省存储
  • 便于引用中间结果

3.4 缺点

  • 当需要移动、删除或优化三元式时,序号引用可能失效(需修改所有引用处)

4. 四元式(Quadruple)

4.1 定义

四元式是四个字段的形式:(op, arg1, arg2, result)result是存放结果的临时变量。四元式更接近三地址代码。

4.2 示例

表达式a + b * c的四元式序列:

(1) (*, b, c, t1) (2) (+, a, t1, t2)

其中t1t2是编译器生成的临时变量。

4.3 优点

  • 显式命名中间结果,易于优化(可修改临时变量名)
  • 便于后续目标代码生成(直接映射到寄存器)
  • 是大多数实际编译器的选择(如三地址代码)

4.4 缺点

  • 需要生成大量临时变量,稍占用更多存储

5. 三种中间代码对比表

对比项逆波兰三元式四元式
结构线性序列(操作数+运算符)(op, arg1, arg2)(op, arg1, arg2, result)
显式临时变量无(用序号引用)有(临时变量名)
易读性(对人)较差中等较好
优化便利性中等(序号移动困难)
常见应用早期的简单编译器、计算器某些早期编译中间表示现代编译器(如三地址码)

6. 经典例题

题目1:将表达式x = (a + b) * (c - d)分别转换为逆波兰、三元式和四元式。

  • 逆波兰:x a b + c d - * =(注意赋值号通常视为二元运算符)
  • 三元式:
    (1) (+, a, b) (2) (-, c, d) (3) (*, (1), (2)) (4) (=, (3), x)
  • 四元式:
    (1) (+, a, b, t1) (2) (-, c, d, t2) (3) (*, t1, t2, t3) (4) (=, t3, , x)

答案:如上。


题目2:已知四元式序列:

(1) (*, a, b, t1) (2) (+, c, d, t2) (3) (-, t1, t2, t3)

对应的表达式为( )。
A.a * b + c - d
B.(a * b) - (c + d)
C.a * (b - c) + d
D.(a + b) * (c - d)

解析:t1 = ab,t2 = c+d,t3 = t1 - t2 → (ab) - (c+d)。
答案:B


题目3(判断):逆波兰表示不需要使用括号来指定运算顺序。( )
答案:正确


7. 记忆口诀

逆波兰后缀写,栈式计算最快捷。
三元式三个字段,序号引用结果来。
四元式多一结果,临时变量显式排。


8. 给备考同学的一句话

中间代码是编译后端的重要环节。软考中常考:

  • 给表达式,写出逆波兰、三元式、四元式。
  • 给四元式序列,还原为表达式。
  • 区分三种形式的优缺点。

建议多练习表达式转换,尤其是带括号的复杂表达式。记住四元式最常用,三元式的序号引用是考点。


🔔本专栏日更2篇,点击头像 → 专栏《软考中级高频考点》订阅

#软考中级 #软件设计师 #中间代码 #逆波兰 #三元式 #四元式 #编译原理

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询