数据结构46:树的应用:表达式解析(一)

目录

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

二、树的应用:表达式解析

创建表达式解析树过程:实例

创建表达式解析树过程:规则


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

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

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

 

  • 程序设计语言的编译:词法、语法的检查,从语法树生成目标代码
  • 自然语言处理:机器翻译、语义理解

二、树的应用:表达式解析

我们还可以将表达式表示为树结构,叶节点保存操作数,内部节点保存操作符

全括号表达式((7+3)*(5-2)),由于括号的存在,就必须先计算7+3和5-2,表达式层次决定计算的优先级,越底层的表达式,优先级越高

树中的每一个子树都是一个表达式。将子树替换为表达式值的节点,即可实现计算

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

  • 从全括号表达式构建表达式解析树

  • 利用表达式解析树对表达式求值

  • 从表达式解析树恢复原表达式的字符串形式

首先,全括号表达式要分解为全括号列表,其单词分为括号“()”、操作符“+-*/”和操作数这几类。左括号就是表达式的开始,而右括号是表达式的结束

全括号表达式:(3+(4*5)),要分解为单词表:['(', '3', '+', '(', '4', '*', '5', ')', ')']

创建表达式解析树过程:实例

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

  • 读入“(”,创建了左节点,当前节点下降
  • 读入“4”,当前节点设置为4,上升到父节点
  • 读入“*”,当前节点设置为*,创建右节点,当前节点下降

  • 读入‘5’,当前节点设置为5,上升到父节点
  • 读入“)”,上升到父节点
  • 读入“)”,再上升到父节点

创建表达式解析树过程:规则

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

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

©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页