31
Aviator——轻量级表达式执行引擎
Embed Size (px)
DESCRIPTION
Aviator——轻量级表达式执行引擎,介绍和示例
Citation preview
- Aviator
([email protected])
NotifyAMPheader
JMSselector
NotifyJMS selector
groovy
groovy
: groovy-allNotify
ASMJVM
java
Aviator
http://code.google.com/p/aviator/
LGPL
403K (asm)
Groovy 1.6.4 (4.3M)
90.1%
LOC:14000+
Classes: 131
AviatorEvaluator
AviatorEvaluator.execute()
AviatorEvaluator.execute(env)
env
envMap
AviatorEvaluator.compile(string)
AviatorEvaluator.compile(string,cached)
cached
- Hello world
String name= args[0];
Map env = new HashMap();
env.put(" name ", name);
String result = (String) AviatorEvaluator.execute(" 'hello ' + name
", env);
System.out.println(result);
1+2+3
6-3+4
6-(3+4)
1*2*3+1/2/3+100%3
(1+2/(3-4)*pi-2*pi*r+pi/j*i%100
true
false && true
true || false
messageType==trade-cteate && !committed
!bool
a>b
a>=nil , true
aa0? 1:-1
bool? (a+b) : (a-b)
!t? i>0? f:ch : f>3?email:ch
!t? (i>0? f:ch) :( f>3?email:ch)
Perl,Rubytruefalse
Java
$digit
'10'=~/^+$/
'ABC'=~/^[A-Za-z]+$/
'hello'=~/.*|/
email=~/([0-8]+)@+[+]+/ ? $1:'unknow
$1
$0
hello+1 == hello1
hello + world == hello world
hello + nil == hello null
i+hello == i.toString() + hello
StringString
abc > bac
abc ==abc
date > '2009-12-20 00:00:00:00
java.util.Dateyyyy-MM-dd HH:mm:ss:SS
- ListMap
[]java.util.List
a[0]
list[0]-a[1]*list[1]
java.util.Mapmap.keyMapkeyvalue
property.long
property.short
foo.bar.i
foobari
foo.date.year
foo.date.month
foojava.util.Dateyearmonth
cmmons-beanutils
sysdate()
rand()
println(a) print(a)
string.contains(hello,ell)
string.length(a)
math.pow(3,2.0)
math.sin(30)
etcsystemmathseq
- Seq
java.util.Collectionseq
count(seq)
include(seq,element)
sort(seq)
seqseq
map(seq,fun)
reduce(seq,fun,init)
filter(seq,fun)
seqseq
- Seq
map(s,println)
map(s,-)
filter(s,seq.gt(3)) value>3
filter(s,seq.exists()) nil
reduce(s,+,0)
reduce(s,*,1)
include(s,hello)
class AddFunction implements AviatorFunction
AviatorFunction
public AviatorObject call(Map env, AviatorObject... args)
args
public String getName()
AviatorEvaluator.addFunction(new AddFunction());
AviatorEvaluator.execute("add(1,2)"));
AviatorEvaluator.execute("add(add(1,2),100)"));
Javabyte short int longLongJavafloat,doubleDoubleJavachar
StringStringJavanullnil
DoubleLongDoubleLong
DoubleDoubleDouble
StringString
nilnil
nilnull
"yyyy-MM-dd HH:mm:ss:SS"java.util.Datejava.util.Date
AviatorEvaluator.setOptimize(AviatorEvaluator.COMPILE)
AviatorEvaluator.setOptimize(AviatorEvaluator.EVAL)
1000
OGNL
Groovy 1.6.4
MVEL 2.0.17
Aviator() 1.0.0-final
OGNL 2.7.1
-
1000+100.0*99-(600-3*15)%(((68-9)-3)*2-100)+10000%7*71
- i * pi + (d * b - 199) / (1 - d * pi) - (2 + 100 - i / pi)
%
- 'A' == 'A' || 'B' == 'B' && 'ABCD' == t && 'A'
== 'A'
- i>pi || !bool || d+pi*i>1000 && b