Package org.nutz.el

Source Code of org.nutz.el.El

package org.nutz.el;

import java.util.Queue;

import org.nutz.el.arithmetic.ShuntingYard;
import org.nutz.el.arithmetic.RPN;
import org.nutz.lang.util.Context;

public class El {
  private RPN rc = null;
 
  public El(){}
  /**
   * 预编译
   */
  public El(CharSequence cs){
    ShuntingYard sy = new ShuntingYard();
    Queue<Object> rpn = sy.parseToRPN(cs.toString());
    rc = new RPN(rpn);
  }
  /**
   * 解析预编译后的EL表达式
   */
  public Object eval(Context context) {
    if(rc == null){
      throw new ElException("没有进行预编译!");
    }
    return rc.calculate(context);
  }

  /**
   * 对参数代表的表达式进行运算
   */
  public static Object eval(String val) {
    //逆波兰表示法(Reverse Polish notation,RPN,或逆波兰记法)
    return eval(null, val);
  }

  public static Object eval(Context context, String val) {
    ShuntingYard sy = new ShuntingYard();
    RPN rc = new RPN();
    Queue<Object> rpn = sy.parseToRPN(val);
    return rc.calculate(context, rpn);
  }
 
 
  /**
   * 说明:
   * 1. 操作符优先级参考<Java运算符优先级参考图表>, 但不完全遵守,比如"()"
   * 2. 使用Queue 的原因是,调用peek()方法不会读取串中的数据.
   * 因为我希望达到的效果是,我只读取我需要的,我不需要的数据我不读出来.
   */
 
  //@ JKTODO 删除原来的EL包,并修改当前为EL
  //@ JKTODO 自己实现一个QUEUE接口, 主要是实现队列,头部检测,头部第几个元素检测
}
TOP

Related Classes of org.nutz.el.El

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.