文章目录
一、解析树
树结构可以用来分析句子的各种语法成分,对句子的各种成分进行处理。比如:
- 语法分析树:主谓宾,定状补;
- 程序设计语言的编译:词法、语法的检查,从语法树生成目标代码;
- 自然语言处理:机器翻译、语义理解。
举例来说,对于表达式 ( ( 7 + 3 ) ∗ ( 5 − 2 ) ) ((7+3)*(5-2)) ((7+3)∗(5−2))的解析:我们还可以将表达式表示为树结构,叶节点保存操作数,内部节点保存操作符。
由于括号的存在,需要计算*的话,就必须先计算7+3和5-2。因此,表达式层次决定计算的优先级,越底层的表达式,优先级越高。
树中每个子树都表示一个子表达式,将子树替换为子表达式值的节点,即可实现求值。替换后的结果如下图:
二、解析树实例:表达式解析
下面,我们用树结构来做如下尝试:
-
从全括号表达式构建表达式解析树;
-
利用表达式解析树对表达式求值;
-
从表达式解析树恢复原表达式的字符串形式。
1. 建立表达式解析树
首先,全括号表达式要分解为单词Token列表,其单词分为括号“( )
”、操作符“+ - * /
”和操作数“0~9”这几类。左括号就是表达式的开始,而右括号是表达式的结束。
比如:3+(4*5),分解后的单词Token列表为:['(', '3', '+', '(', '4', '*', '5', ')', ')']
。
创建表达式解析树过程:
- 创建空树,当前节点为根节点;
- 读入’(’,创建了左子节点,当前节点下降;