表达式分析

编写算术表达式的方法被称为符号。一个算术表达式可以写成在三个不同的但等效的符号,即, 不改变的本质或表达的输出。这些符号是 -

  • 中间符号
  • 前缀(波兰)符号
  • 后缀(反向波兰)符号

这些符号被命名为它们如何利用运算符表达式。我们将在这里学会这些内容。

中间符号

我们编写表达式中缀记号,例如,A-B+C,其中运算符用于在两者之间的操作数。这是很容易为我们人类所读,写和说中缀表示法,但不能使用计算设备顺利计算。用算法来处理中间符号是困难和昂贵的时间和空间消耗。

前缀表示法

在此标记,运营商的前缀操作数,即算提前写入操作数。在此标记,操作符到前缀操作数,即操作符提前写入操作数。 例如,+ab. 这相当于其中缀符号 a+b. 前缀表示法也被称为波兰表示法。

后缀表示法

这个符号风格被称为逆波兰表示法。在此标记风格,操作者后缀操作数,即,操作符是在操作数后写的。例如,ab+. 这相当于其中缀符号:a+b.

下表简要试图展示在所有三个符号的差异 −

S.n. 中缀表示法 前缀表示法 后缀表示法
1 a + b + a b a b +
2 (a + b) * c * + a b c a b + c *
3 a * (b + c) * a + b c a b c + *
4 a / b + c / d + / a b / c d a b / c d / +
5 (a + b) * (c + d) * + a b + c d a b + c d + *
6 ((a + b) * c) - d - * + a b c d a b + c * d -

解析表达式

正如我们所讨论的,它并不是设计一个算法或程序来解析中缀符号非常有效的方法。相反,这些中缀符号首先被转换成或者后缀或前缀符号,然后计算。

分析任何算术表达式,我们需要注意运算符优先级和关联性。

优先级

当一个操作数是在两个不同的操作符之间,其中操作符将先采取操作数,由操作者于其他的优先级决定。例如 -

Operator Precendence

由于乘法运算的优先级高于加法,b * c 将首先计算。运算符优先级的表格在稍后提供。

关联性

关联性描述了使用相同的优先级运算符出现在一个表达式规则。例如,在表达式 a+b−c, +和 - 都具有相同的优先级,那么该表达式的一部分将首先计算,通过这些运算符的关联性决定的。在这里,无论是 + 和 - 是左关联的,所以表达式将被计算作为 (a+b)−c.

优先级和结合,确定一个表达式的计算顺序。运算符优先级和结合表如下所示(最高到最低)−

S.n. 操作符 优先级 关联性
1 Esponentiation ^ 最高 右关联
2 Multiplication ( * ) & Division ( / ) 次高 左关联
3 Addition ( + ) & Subtraction (  ) 最低 左关联

在表达式计算任何时间点,顺序可以通过使用括号所改变。 例如,

在A + B * C,表达部分:B * C将首先计算,这是由于乘法优先于加法。我们在这里使用括号,使 A + B 首先进行评估计算,如(A + B)* C。


上一篇: 堆栈实例代码(C语言) 下一篇: 队列