公式解析器开源项目整理

前段时间,受师兄委托,我需要整理一份开源公式解析器项目的清单。经过两天的网络调研与筛选,我对目前大部分仍有维护或具有参考价值的开源项目进行了梳理与总结,现将结果记录如下。

开源项目名称描述缺点
Jeval在运行时解析计算静态和动态表达式;
支持数学、布尔、字符串、函数表达式;
支持大部分数学和布尔运算符;
支持自定义函数及嵌套函数;
支持解析及自定义变量解析器。
官网:http://jeval.sourceforge.net
不支持嵌套变量
jexel处理大部分数学公式和字符串,通过继承接口来实现个人所需的运算;
支持自定义变量解析器;
该项目一直在更新,最近一次更新是当年 10 月 7 号。
wiki:http://code.google.com/p/jexel/w/list
不支持变量替换
aviatorAviator 是直接将表达式编译成 Java 字节码,交给 JVM 去执行。
支持大部分运算操作符,包括算术操作符、关系运算符、逻辑操作符、位运算符、正则匹配操作符 (=~)、三元表达式 ?:,并且支持操作符的优先级和括号强制优先级;
支持函数调用和自定义函数;
支持传入变量,支持类似 a.b.c 的嵌套变量访问;
支持数组的访问及正则表达式。
参考:http://www.blogjava.net/killme2008/archive/2010/09/07/331296.htm
依赖另外两个 Jar 包:commons-beanutils 和 commons-logging
arity支持自定义函数及公式。不支持变量替换
Jsci数学科学计算:包括线性方程组,统计,小波,牛顿力学。Jar 包太多,不支持变量替换
IKExpression支持中文变量及函数名;
支持基本运算及函数运算;
支持自定义函数。
不支持变量嵌套
JSEL兼容 JavaScript 运算规则的简单表达式解释引擎;
可以通过 Map 接口或者 JavaBean 给出一个变量集合,然后通过表达式从这个集合中抽取变量,再通过表达式逻辑生成所需数据;
支持函数扩展,操作符别名定义,操作符定义。
不支持变量嵌套
jep支持大量的数学运算;其他功能都差不多;
支持变量嵌套(顺序执行)。
wiki: http://www.singularsys.com/jep/doc/html/variables.html
beanshell支持基本运算;
支持变量、函数自定义;
支持变量嵌套(顺序执行)。
Fel支持中文变量;
支持基本运算及函数运算;
支持自定义函数;
可调用 Java 方法。
不支持变量嵌套

说明

  1. 本文整理的内容基于历史调研资料,部分项目(如托管于 Google Code 的项目)可能已停止维护或链接失效,使用时请核实最新状态。
  2. 文中提及的“最近更新时间”为原文记录时间,不代表当前实际维护状态。
  3. 部分依赖项或功能特性可能随版本迭代有所变化,请以官方文档为准。