表达式解析器
前言
由于项目需要做了一个简单的表达式解析器。可作为规则引擎的基础。
支持功能
- 支持+-*/四则运算,
- 支持>,>=,<,<=,!=,==,&,|,!逻辑运算。
支持三目运算符'?:',输入
(1<3)?4+3:5
输出
7
支持不带上下文的计算, 输入
(4+2)/(3-1)
输出
6
支持带上下文的计算, 输入
(a+b+c)==3
以及上下文
{a:1,b:1,c:1}
输出
true
支持表达式嵌套, 输入
(true?(4-2>3?4:5):1)-1
输出
4
思路分享
分词(tokenize)
input:"(1+2)==3"
, outinput :[(,1,+,2,),==,3]
生成逆波兰表达式 (reverse polish notation)
input:[(,1,+,2,),==,3]
, output:[1,2,+,3,==]
计算逆波兰表达式
input:[1,2,+,3,==]
, output:true