Java字符串引擎原理介绍

要求

1,计算表达式

2,储存函数,并参与运算

输入:2*3/6+2^0.5

输出:2.414

输入:f(a,b)=a*b

输入:2^f(2,2)

输出:16.0

结果示范

在这里插入图片描述

数据结构

解析字符串: 2*3/6+2^0.5

所有叶子节点均为变量,所有非叶子节点均为运算符,函数也是一种运算符

在这里插入图片描述

基本对象

接口 AvailableValue:

描述所有节点均可取值,非根节点的值为它的子节点的值

抽象类 BinaryTree:

构建树节点,BinaryTree为AvailableValue的子类

常值类 Numerical:

继承BinaryTree,描述一个常值节点

变量类 Variable:

继承Numerical,描述一个变量节点

至于为什么要变量继承常量这里需要特别说明
变量只允许出现再函数中,变量在赋值后将拥有常量属性,从数学发展上看也是现有常数再有变量的。
可以将所有叶子节点作为变量类,取消常值类,并将向量作为基本数学类型。
显然对于简单计算完全没必要。

接口 Hierarchical:

描述一个运算符的优先级。

1级 + -
2级 * /
3级 幂
4级 函数
5级 逗号
6级 括号

抽象类 Operator:

继承BinaryTree,需子类实现接口 Hierarchical 方法;描述一个运算符基本属性

Operator子类:

AddOperator,SubOperator,MulOperator,DivOperator,ExpOperator,BraOperator,FunOperator,ComOperator

接口 Linker:

按运算符优先级将所有节点连接为一颗树。

猜你喜欢

转载自blog.csdn.net/qq_39464369/article/details/88571635