31
Aviator—— 飞飞飞 飞飞飞飞飞飞飞飞飞飞飞 飞飞 ([email protected])

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