6.解析表达式算法

简介: 6.解析表达式算法

1.解析表达式算法

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

  • 中缀表示法
  • 前缀(波兰语)表示法
  • 后缀(反向波兰)表示法

这些符号被命名为它们如何在表达式中使用运算符。我们将在本章中学到相同的内容。

中缀表示法

我们用中 表示法编写表达式,例如a - b + c,其中运算符用 操作数之间。我们人类很容易用中缀符号进行读,写和说话,但同样适用于计算设备。在时间和空间消耗方面,处理中缀符号的算法可能是困难且昂贵的。

前缀表示法

在这种表示法中,运算符是操作数的 前缀 ,即操作符在操作数之前写入。例如, + ab 。这相当于其中缀符号 a + b 。前缀表示法也称为 波兰表示法

后缀表示法

这种符号样式称为 反转波兰表示法 。在这种表示法样式中,运算符 后缀 为操作数,即操作符在操作数之后写入。例如, ab + 。这相当于其中缀符号 a + b

下表简要介绍了所有三种符号的区别 -

Sr.No. 中缀表示法 前缀表示法 后缀表示法
1 a + b + ab ab +
2 (a + b)* c * + abc ab + c *
3 a *(b + c) * a + bc abc + *
4 a / b + c / d + / ab / cd ab / cd / +
5 (a + b)*(c + d) * + ab + cd ab + cd + *
6 ((a + b)* c) - d - * + abcd ab + c * d -

解析表达式

正如我们已经讨论过的,设计一个解析中缀符号的算法或程序并不是一种非常有效的方法。相反,这些中缀符号首先转换为后缀或前缀表示法,然后进行计算。

要解析任何算术表达式,我们还需要处理运算符优先级和关联性。

优先权

当操作数位于两个不同的运算符之间时,哪个运算符将首先取操作数,由运算符优先于其他运算符决定。例如 -

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

关联性

关联性描述了具有相同优先级的运算符出现在表达式中的规则。例如,在表达式a + b -c中,+和 - 具有相同的优先级,然后表达式的哪个部分将首先被评估,由这些运算符的关联性决定。这里,+和 - 都是左关联的,因此表达式将被评估为 (a + b) - c

优先级和关联性决定了表达式的评估顺序。以下是运算符优先级和关联表(从最高到最低) -

Sr.No. 操作者 优先权 关联性
1 Exponentiation ^ 最高 正确联想
2 乘法(*)和除法(/) 第二高 左联想
3 加法(+)和减法( - ) 最低 左联想

上表显示了运算符的默认行为。在表达式评估的任何时间点,可以使用括号来更改顺序。例如 -

a + b * c中 ,首先评估表达式部分 bc ,乘法作为加法的优先级。我们在这里使用括号为 A + B 先计算,如 (A + B) C

相关文章
|
23天前
|
机器学习/深度学习 存储 算法
【算法与数据结构】复杂度深度解析(超详解)
【算法与数据结构】复杂度深度解析(超详解)
【算法与数据结构】复杂度深度解析(超详解)
|
1天前
|
存储 机器学习/深度学习 算法
|
3天前
|
机器学习/深度学习 数据采集 人工智能
【热门话题】AI作画算法原理解析
本文解析了AI作画算法的原理,介绍了基于机器学习和深度学习的CNNs及GANs在艺术创作中的应用。从数据预处理到模型训练、优化,再到风格迁移、图像合成等实际应用,阐述了AI如何生成艺术作品。同时,文章指出未来发展中面临的版权、伦理等问题,强调理解这些算法对于探索艺术新境地的重要性。
15 3
|
4天前
|
存储 算法 安全
|
22天前
|
机器学习/深度学习 自然语言处理 算法
探索机器学习的奥秘:从基础概念到算法解析
探索机器学习的奥秘:从基础概念到算法解析
39 0
|
22天前
|
存储 算法
从动态规划到贪心算法:最长递增子序列问题的方法全解析
从动态规划到贪心算法:最长递增子序列问题的方法全解析
19 1
|
22天前
|
存储 缓存 算法
深度解析JVM世界:垃圾判断和垃圾回收算法
深度解析JVM世界:垃圾判断和垃圾回收算法
|
23天前
|
搜索推荐 算法 索引
【排序算法】深入解析快速排序(霍尔法&&三指针法&&挖坑法&&优化随机选key&&中位数法&&小区间法&&非递归版本)
【排序算法】深入解析快速排序(霍尔法&&三指针法&&挖坑法&&优化随机选key&&中位数法&&小区间法&&非递归版本)
|
23天前
|
存储 算法
【算法与数据结构】深入解析二叉树(二)之堆结构实现
【算法与数据结构】深入解析二叉树(二)之堆结构实现
|
10天前
|
机器学习/深度学习 人工智能 算法
基于DCT和扩频的音频水印嵌入提取算法matlab仿真
本文介绍了结合DCT和扩频技术的音频水印算法,用于在不降低音质的情况下嵌入版权信息。在matlab2022a中实现,算法利用DCT进行频域处理,通过扩频增强水印的隐蔽性和抗攻击性。核心程序展示了水印的嵌入与提取过程,包括DCT变换、水印扩频及反变换步骤。该方法有效且专业,未来研究将侧重于提高实用性和安全性。

推荐镜像

更多