`
linliangyi2007
  • 浏览: 1012700 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

发布新版IK-Expression开源表达式解析器V2.0.5

阅读更多

Version2.1.0已发布: http://linliangyi2007.iteye.com/blog/462723

Version2.0.5的变更:

 支持表达式的换行编辑,方便表达式编写和阅读,如:
$CALCDATE([2008-03-01],
0,0,
-(10 + (23 - 3) * (4 / 5)) % 6,
0,0,0)


 提供了更多的开放API,如:表达式验证API,这使得表达式在执行前可以检查其语法正确性。

 修订了“?:”三元操作符的“:“号两端对不同类型的数值不兼容的BUG。如:原有版本中,表达 ”100 > 10 ? 100 : 10.5“ 将会抛出“参数类型不兼容“异常;在新版本中,则返回double型的100.0

 变更原有配置文件functionConfig.xml的文件名为IKExpression.cfg.xml

 发布了V2.0.5版本的JavaDoc

详细请参阅RAR包内的《IKExpressoin简易表达式引擎V2.0使用说明.doc》文档

google code 下载地址:http://code.google.com/p/ik-expression/downloads/list




分享到:
评论
33 楼 linliangyi2007 2009-09-05  
lovit 写道
谢谢您的回答,
我们是以下方法去调用的,会出错。。

public static void main(String[] args){   
   Object result = null;
    result = ExpressionEvaluator.evaluate("sayHello(1.0)");   
    System.out.println("Result = " + result);   
    result = ExpressionEvaluator.evaluate("sayHello(1)");   
    System.out.println("Result = " + result);     

}   


以上如“sayHello(1.0)”是在流程中的表达式。您的意思是只能通过楼上的方式去调用吗?因为sayHello中的值,是根据数据库中的数据或上下文的中值取得,配置表达式的时候,根本不知道他是什么类型,只知道他是数字(可能是整形,也可能是浮点型)


新版本已经发布:http://www.iteye.com/topic/462723
32 楼 linliangyi2007 2009-09-05  
lovit 写道
谢谢您的回答,
我们是以下方法去调用的,会出错。。

public static void main(String[] args){   
   Object result = null;
    result = ExpressionEvaluator.evaluate("sayHello(1.0)");   
    System.out.println("Result = " + result);   
    result = ExpressionEvaluator.evaluate("sayHello(1)");   
    System.out.println("Result = " + result);     

}   


以上如“sayHello(1.0)”是在流程中的表达式。您的意思是只能通过楼上的方式去调用吗?因为sayHello中的值,是根据数据库中的数据或上下文的中值取得,配置表达式的时候,根本不知道他是什么类型,只知道他是数字(可能是整形,也可能是浮点型)


马上发布修定版本,谢谢你的建议。
31 楼 lovit 2009-09-05  
谢谢您的回答,
我们是以下方法去调用的,会出错。。

public static void main(String[] args){   
   Object result = null;
    result = ExpressionEvaluator.evaluate("sayHello(1.0)");   
    System.out.println("Result = " + result);   
    result = ExpressionEvaluator.evaluate("sayHello(1)");   
    System.out.println("Result = " + result);     

}   


以上如“sayHello(1.0)”是在流程中的表达式。您的意思是只能通过楼上的方式去调用吗?因为sayHello中的值,是根据数据库中的数据或上下文的中值取得,配置表达式的时候,根本不知道他是什么类型,只知道他是数字(可能是整形,也可能是浮点型)
30 楼 linliangyi2007 2009-09-05  
引用

我的意思是,在eclipse的JAVA环境下,语法检查和编译都可以通过。其实这个功能比较实用,因为在流程条件判断方面,很难确定这个值是整形或浮点形(因为每个单据的业务数据不同),而IK-Exp又不支持重载,如果当IK-Exp要调用的函数参数为Object类型能支持的话,那就太好了,不知道这个功能能不能实现,谢谢!


不是太明白你的意思,个人觉得你没有很细的看IK-Exp的API文档。不多说了,这个给一个Object为参数的例子吧:

1.定义自己的Java方法

/**
 * @author linly
 *
 */
public class TestFunctions {
	/**
	 * 自己定义的以Object为参数的Java方法
	 * @param o
	 * @return
	 */
	public String sayHello(Object o){
		if(o instanceof Integer){
			return "Integer";
		}else if(o instanceof Double){
			return "Double";
		}else{
			return "Float";
		}
	}
}



2.设置IKExpression.cfg.xml,将自定义的方法声明为IK-Exp的函数
<?xml version="1.0" encoding="UTF-8"?>
<function-configuration>
        <!-- 这里省略IK-Exp的内置函数配置罗干。。。-->

	
	<!-- 用户函数配置  请在这里定制您自己的函数-->

	<bean class="org.wltea.expression.test.TestFunctions">
		<function name="问好" method="sayHello">
			<parameter-type>java.lang.Object</parameter-type>
		</function>
	</bean>
</function-configuration>



3.在Java中调用的自己写的函数,实现Object的参数传入
	public static void main(String[] args){

		//定义表达式		
		String expression = "$问好(数字类型)";

		//给表达式中的变量 [数字类型] 付上下文的值
		List<Variable> variables = new ArrayList<Variable>();
		variables.add(new Variable("数字类型" , DataType.DATATYPE_OBJECT , new Integer(100)));

		//执行表达式
		Object result = ExpressionEvaluator.evaluate(expression, variables);
		System.out.println("Result = " + result);
		
                //变更 [数字类型] 的值
		variables.add(new Variable("数字类型" , DataType.DATATYPE_OBJECT , new Double(100)));
		//再次执行表达式
		result = ExpressionEvaluator.evaluate(expression, variables);
		System.out.println("Result = " + result);		
		
	}		


4.执行结果
Result = Integer
Result = Double



OK!!!
29 楼 lovit 2009-09-05  
linliangyi2007 写道
lovit 写道
linliangyi2007 写道
lovit 写道
我现在就是将参数声明成Object,但传入double类型的时候(因为有时候是integer的),就出现上面的错误。。这种情况怎么处理?谢谢!!


你传入double的时候,变量申明为啥类型啊?

是double类型。也就是说,我有一个函数,定义成Object的参数,IK-Expression下调用时将double类型传入调用的时候,会执行不成功,正常的代码,这个语法应该是支持的。
function void dd(Object a,Object b){

}

double c=0.0;
double d=1.0;

dd(c,d)


是的,你必须把变量声明称Object跟你在函数声明的时候一致。我不知道你的“正常代码这个语法应该是支持”是啥意思,IK-Exp只是一个很轻量级的解析器,它有自己的语法,并不兼容某种语言的,如果你觉得要支持JS或者Java的全部语法,那就期望太高了。你可以看看IK-Exp的项目定位和说明吧。

我的意思是,在eclipse的JAVA环境下,语法检查和编译都可以通过。其实这个功能比较实用,因为在流程条件判断方面,很难确定这个值是整形或浮点形(因为每个单据的业务数据不同),而IK-Exp又不支持重载,如果当IK-Exp要调用的函数参数为Object类型能支持的话,那就太好了,不知道这个功能能不能实现,谢谢!
28 楼 linliangyi2007 2009-09-03  
lovit 写道
linliangyi2007 写道
lovit 写道
我现在就是将参数声明成Object,但传入double类型的时候(因为有时候是integer的),就出现上面的错误。。这种情况怎么处理?谢谢!!


你传入double的时候,变量申明为啥类型啊?

是double类型。也就是说,我有一个函数,定义成Object的参数,IK-Expression下调用时将double类型传入调用的时候,会执行不成功,正常的代码,这个语法应该是支持的。
function void dd(Object a,Object b){

}

double c=0.0;
double d=1.0;

dd(c,d)


是的,你必须把变量声明称Object跟你在函数声明的时候一致。我不知道你的“正常代码这个语法应该是支持”是啥意思,IK-Exp只是一个很轻量级的解析器,它有自己的语法,并不兼容某种语言的,如果你觉得要支持JS或者Java的全部语法,那就期望太高了。你可以看看IK-Exp的项目定位和说明吧。
27 楼 lovit 2009-09-03  
linliangyi2007 写道
lovit 写道
我现在就是将参数声明成Object,但传入double类型的时候(因为有时候是integer的),就出现上面的错误。。这种情况怎么处理?谢谢!!


你传入double的时候,变量申明为啥类型啊?

是double类型。也就是说,我有一个函数,定义成Object的参数,IK-Expression下调用时将double类型传入调用的时候,会执行不成功,正常的代码,这个语法应该是支持的。
function void dd(Object a,Object b){

}

double c=0.0;
double d=1.0;

dd(c,d)
26 楼 linliangyi2007 2009-08-25  
lovit 写道
我现在就是将参数声明成Object,但传入double类型的时候(因为有时候是integer的),就出现上面的错误。。这种情况怎么处理?谢谢!!


你传入double的时候,变量申明为啥类型啊?
25 楼 lovit 2009-08-25  
我现在就是将参数声明成Object,但传入double类型的时候(因为有时候是integer的),就出现上面的错误。。这种情况怎么处理?谢谢!!
24 楼 linliangyi2007 2009-08-25  
lovit 写道
函数不能重载,所以将函数参数变成Object时,出现----参数类型不匹配,函数类型为:java.lang.Object 传入参数类型为:double


你把函数的参数声明成Object,那么参数就是用Object传入就好了。重载的时候,null型没法处理啊,不知道转成啥
23 楼 lovit 2009-08-25  
函数不能重载,所以将函数参数变成Object时,出现----参数类型不匹配,函数类型为:java.lang.Object 传入参数类型为:double
22 楼 linliangyi2007 2009-07-14  
conservatism 写道
自定义函数的名字不能重复,请问有别的方法可以让IKExpression.cfg.xml中配置的函数能实现重载吗?
比如我想用一个$ABS()来指向我定义的四个版本的abs(),分别是int,long,double和float。
另外在IKExpression.cfg.xml直接配置java.lang.Math中的函数是不可见的?必须要在别的地方声明一个public的函数去调用可以


暂时不能,你只能分别命名为$ABS1()、$ABS2()或者$ABSInt()、$ABSLong()了。
识别方法的重载相当复杂,就IK-EXP的定位而言,实在没有这个必要,呵呵
21 楼 conservatism 2009-07-14  
自定义函数的名字不能重复,请问有别的方法可以让IKExpression.cfg.xml中配置的函数能实现重载吗?
比如我想用一个$ABS()来指向我定义的四个版本的abs(),分别是int,long,double和float。
另外在IKExpression.cfg.xml直接配置java.lang.Math中的函数是不可见的?必须要在别的地方声明一个public的函数去调用可以
20 楼 makemyownlife 2009-07-13  
学习学习啦
19 楼 凯旋人生 2009-07-13  
支持,好好学些下!!!
18 楼 dd2086 2009-07-12  
是个不错的东东
17 楼 city_moon 2009-07-12  
从上一个版本开始,我就一直在关注,希望功能越来越强......
16 楼 linliangyi2007 2009-07-12  
stworthy 写道
请问处理速度有多快?


Good question!

老实说,没有做过专门的性能测试。

只是随我们公司的业务系统做了集成的压力测试,100并发的,没出问题。

IK-EXP的在设计的时候,考虑了多线程,但没有将他定位在高执行效率上。毕竟解析执行的东西,很难设想有非常好的性能表现。

目前,国外有大量优秀的动态语言解析程序,如BeanScript;java 6.0也有完整的js执行包了。IK的定位很简单,可以中文命名变量,中文函数名称,语法接近算术公式;适合于最终用户的使用(有点模仿Excel中的公式吧)。

大家这么热情,我很开心。

但本人还没能力靠个人之力,将其设计成如同Ruby那样强大的动态语言,哈哈,见笑了!
15 楼 YiSingQ 2009-07-11  
谢谢LZ了,刚刚好学习下。。。
14 楼 stworthy 2009-07-11  
请问处理速度有多快?

相关推荐

    IK Expression开源表达式解析器 V2.1.2.rar

    IK Expression开源表达式解析器V2.1.2是一款用于处理和解析文本表达式的强大工具,广泛应用于各类软件开发和数据分析场景。它以其高效、灵活和可扩展性著称,为开发者提供了便捷的方式来处理和执行复杂的逻辑表达式...

    ik-analyzer-8.5.0-jar

    ik-analyzer是一款在Java环境下广泛使用的开源中文分词器,专为满足Java开发者在信息检索、文本分析等领域的需求而设计。这个资源是ik-analyzer的8.5.0版本,包含了一个名为"ik-analyzer-8.5.0-jar"的JAR文件,它是...

    ik-expression源代码

    IK Expression是一个开源的(OpenSource),可扩展的(Extensible),基于java语言开发的一个超轻量级(Super lightweight)的公式化语言解析执行工具包。 IK ExpressionV2.0不依赖于任何第三方的java库。它做为一...

    最新版elasticsearch-analysis-ik-8.8.2.zip

    最新版elasticsearch-analysis-ik-8.8.2.zip最新版elasticsearch-analysis-ik-8.8.2.zip最新版elasticsearch-analysis-ik-8.8.2.zip最新版elasticsearch-analysis-ik-8.8.2.zip

    ik-analyzer-7.6.0-jar

    ik-analyzer是一款开源的Java语言中文分词器,它最初是基于Lucene项目发展起来的,致力于提高中文文本处理的效率和准确性。7.6.0版本是ik-analyzer的一个重要里程碑,它包含了多项优化和改进,提高了对现代汉语词汇...

    乐视路由-IK-AP-S3-1.4.7-qca953x 编程器固件

    《乐视路由-IK-AP-S3-1.4.7-qca953x 编程器固件详解》 本文将深入探讨“乐视路由-IK-AP-S3-1.4.7-qca953x 编程器固件”的核心知识点,包括其功能、结构以及如何进行固件升级,同时还会涉及与之相关的breed系统和MAC...

    ik-analyzer-7.4.0.jar

    ik-analyzer源自于开源社区,自2006年发布以来,经过多次迭代和优化,已经发展成为一款广泛使用的中文分词组件。7.4.0版本是其发展历程中的一个重要里程碑,它不仅继承了前代版本的优点,还引入了更多特性以提升性能...

    最新版 elasticsearch-analysis-ik-8.7.0.zip

    最新版 elasticsearch-analysis-ik-8.7.0.zip最新版 elasticsearch-analysis-ik-8.7.0.zip最新版 elasticsearch-analysis-ik-8.7.0.zip最新版 elasticsearch-analysis-ik-8.7.0.zip

    ik-analyzer-5.3.1.RELEASE.7z

    《ik-analyzer-5.3.1.RELEASE:中文分词器详解》 ik-analyzer是Java语言开发的一款高效、灵活的中文分词工具,专为处理中文文本而设计。这款开源项目在IT行业中广受好评,特别是在搜索引擎、信息检索、自然语言处理...

    elasticsearch-analysis-ik-7.8.0-c.zip

    最新版 elasticsearch-analysis-ik-7.8.0最新版 elasticsearch-analysis-ik-7.8.0最新版 elasticsearch-analysis-ik-7.8.0

    最新版 elasticsearch-analysis-ik-7.6.2.zip

    5. elasticsearch-analysis-ik-7.6.2.jar:IK分析器的核心库,包含了分词器的实现代码。 6. plugin-security.policy:Elasticsearch插件的安全策略文件,定义了插件的权限和访问控制。 7. plugin-descriptor....

    最新版elasticsearch-analysis-ik-8.8.1.zip

    最新版elasticsearch-analysis-ik-8.8.1.zip最新版elasticsearch-analysis-ik-8.8.1.zip最新版elasticsearch-analysis-ik-8.8.1.zip最新版elasticsearch-analysis-ik-8.8.1.zip

    最新版 elasticsearch-analysis-ik-7.17.6.zip

    最新版elasticsearch-analysis-ik-7.17.6.zip的发布,为用户提供更强大的中文分析能力,优化了性能,提升了用户体验。 一、Elasticsearch-analysis-ik插件介绍 Elasticsearch-analysis-ik是专为Elasticsearch设计...

    最新版 elasticsearch-analysis-ik-7.10.2.zip

    5. elasticsearch-analysis-ik-7.10.2.jar:这个是核心插件文件,包含了IK分析器的所有代码和资源,安装时需要将此文件放入Elasticsearch的plugins目录下。 6. plugin-security.policy:这是插件的安全策略文件,...

    elasticsearch-analysis-ik-7.3.2.zip

    首先,"elasticsearch-analysis-ik-7.3.2"是IK分词器的最新版本,发布于2019年9月15日。此版本针对Elasticsearch 7.3.2进行了优化和适配,旨在提供更高效、更准确的中文分词服务。IK分词器以其灵活的配置和强大的...

    solr中文分词jar包ik-analyzer 含class配置 ik-analyzer-7.5.0

    标签中的"ik-ana"是Ik Analyzer的简称,"solr 中文分词"强调了这个分词器在Solr中的应用场景。文件列表中的"ik-analyzer-7.5.0.jar"即是我们需要集成到Solr中的核心组件。 总之,Ik Analyzer 7.5.0是Solr处理中文...

    elasticsearch-analysis-ik-7.16.2.zip

    《Elasticsearch分词器:elasticsearch-analysis-ik-7.16.2深度解析》 在信息爆炸的时代,搜索引擎的效能成为了数据检索的关键。Elasticsearch作为一款强大的开源搜索引擎,其灵活性和可扩展性备受青睐。而在中文...

    ik-analyzer-3.2.8.jar

    各位Java码农们苦苦找寻的IKAnalyzer-3.2.8.jar,直接使用maven命令行安装到本地仓库即可。也可以上传到nexus;...-DgroupId=org.wltea.ik-analyzer -DartifactId=ik-analyzer -Dversion=3.2.8 -Dpackaging=jar

    ik-analyzer-solr5-5.x.jar

    ik-analyzer分词器,支持solr5-5.x

    ik-analyzer-solr7.zip

    在描述中提到的"ik-analyzer-solr7.zip"是一个专门为Apache Solr 7.x版本定制的IKAnalyzer分词器插件。Solr是Apache软件基金会的一个项目,它是一款强大的全文搜索服务器,提供了诸如索引、搜索、高亮显示、拼写检查...

Global site tag (gtag.js) - Google Analytics