3.2.4 表达式求值问题

  任何一个表达式都是由操作数(operand)运算符(operator)界限符(delimiter)组成,其中,操作数可以是常数也可以是被说明为变量或常量的标识符;运算符可以分为算术运算符、关系运算符和逻辑运算符等三类;基本界限符有左右括弧和表达式结束符等。为了叙述简洁,在此仅限于讨论只含二元运算符的算术表达式。可将这种表达式定义为:
   表达式::= 操作数 运算符 操作数
   操作数::= 简单变量 | 表达式
  简单变量::= 标识符 | 无符号整数

  由于算术运算的规则是:先乘除后加减、先左后右和先括弧内后括弧外,则对表达式进行运算不能按其中运算符出现的先后次序进行。那么怎么办?其中一个方法是先将它转换成另一种形式。
 
 

  思考题 你在以往编制的程序中一定含有表达式,或是算术表达式或是逻辑表达式。那么你有没有想过编译程序是如何处理这些表达式的?
 
    在计算机中,对这种二元表达式可以有三种不同的标识方法。
  假设 Exp = S1 + OP + S2
  则称
OP + S1 + S2 为表达式的前缀表示法(简称前缀式
   称 S1 +
OP + S2 为表达式的中缀表示法(简称中缀式
   称 S1 + S2 +
OP 为表达式的后缀表示法(简称后缀式

  可见,它以运算符所在不同位置命名的。
 
  正文中对表达式的定义可解释为:
  二元表达式是由(第一)操作数(S1)、运算符(OP)和(第二)操作数(S2)三部分依次联接而成;其中的操作数可以是简单变量,也可以是表达式;而简单变量可以是标识符,也可以是无符号整数。