表达式解析器
前言
由于项目需要做了一个简单的表达式解析器。可作为规则引擎的基础。
支持功能
- 支持+-*/四则运算,
- 支持>,>=,<,<=,!=,==,&,|,!逻辑运算。
支持三目运算符'?:',输入
(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