数据结构与算法(Python版)四十八:树的应用(表达式解析)

树的应用:解析树(语法树)

将树用于表示语言中句子, 可以分析句子的各种语法成分, 对句子的各种成分进行处理

语法分析树主谓宾,定状补

在这里插入图片描述

程序设计语言的编译

词法、语法检查从语法树生成目标代码

自然语言处理

机器翻译、语义理解

树的应用: 表达式解析

我们还可以将表达式表示为树结构

叶节点保存操作数,内部节点保存操作符
在这里插入图片描述

全括号表达式((7+3)*(5-2))

由于括号的存在,需要计算*的话,就必须先计算7+3和5-2,表达式层次决定计算的优先级越底层的表达式,优先级越高
在这里插入图片描述

树中每个子树都表示一个子表达式

将子树替换为子表达式值的节点,即可实现求值
在这里插入图片描述

表达式解析树

下面, 我们用树结构来做如下尝试

从全括号表达式构建表达式解析树,利用表达式解析树对表达式求值,从表达式解析树恢复原表达式的字符串形式

首先, 全括号表达式要分解为单词Token列表

其单词分为括号“() ”、操作符“±*/”和操作数“0~9”这几类,左括号就是表达式的开始,而右括号是表达式的结束

建立表达式解析树:实例

全括号表达式: (3+(4*5))

在这里插入图片描述

创建表达式解析树过程

  • 创建空树,当前节点为根节点
  • 读入’(’, 创建了左子节点,当前节点下降
  • 读入’3’,当前节点设置为3, 上升到父节点
  • 读入’+’,当前节点设置为+, 创建右子节点,当前节点下降

在这里插入图片描述

  • 读入’(’, 创建左子节点,当前节点下降
  • 读入’4’,当前节点设置为4, 上升到父节点
  • 读入’’,当前节点设置为, 创建右子节点,当前节点下降
  • 读入’5’,当前节点设置为5, 上升到父节点
  • 读入’)’, 上升到父节点
  • 读入’)’,再上升到父节点
    在这里插入图片描述

建立表达式解析树:规则

从左到右扫描全括号表达式的每个单词,依据规则建立解析树

如果当前单词是"(":为当前节点添加一个新节点作为其左子节点, 当前节点下降为这个新节点。如果当前单词是操符"+,-,/,*":将当前节点的值设为此符号,为当前节点添加一个新节点作为其右子节点, 当前节点下降为这个新节点,如果当前单词是操作数:将当前节点的值设为此数, 当前节点上升到父节点,如果当前单词是")":则当前节点上升到父节点

建立表达式解析树:实例

全括号表达式: (3+(4*5))

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值