文章目录
1.更正设计缺陷
- 算数表达式解析器的一个缺陷在于它的语法是右结合的。这意味着,8-2+1被解析为8-(2+1)
- 可以通过更正语法
可以设计成左结合的,把它设计成表达式+一个项;
expresion:=expresion ‘+’ term,
但这这会导致无限循环(Expr调用Expr,Expr又调用Expr。。。)
前面的方法都是右递归,这里是左递归 - 一种解决办法
使用左结合的方法;
SumNode有多个子代,主要处理+和-法运算;
ProdectNode也有多个子代,主要处理*和/运算,这里没表示,后面看代码; - 改进后的类图
positives:处理节点的正负号,因为Node中的继承类NumberNode是不区分正负的,总是正的
MultipleNode是一个抽象类,其派生类有2个,一个是SumNode(处理加减法),一个是ProductNode(处理乘除法)
使用StartUml
注意抽象类的画法
28:29