QlExpress

作者: OPice | 来源:发表于2019-09-28 18:41 被阅读0次

    QlExpress是什么

    轻量级java语法的规则引擎。特性:线程安全、效率高、依赖少

    跑个栗子看看

    public class QlExpressDemo {
        public static void main(String[] args) throws Exception{
            String express ="1 加 1";
    
            ExpressRunner runner = new ExpressRunner();
            runner.addOperatorWithAlias("加","+",null);
            Object result = runner.execute(express, null, null, true, true);
    
            System.out.println(result);
        }
    }
    

    输入: 1 加 1 输出: 2

    基本语法

    ExpressRunner :语法分析和计算的入口类
    核心方法:

    /**
     * 执行一段文本
     * @param expressString 程序文本
     * @param context 执行上下文
     * @param errorList 输出的错误信息List
     * @param isCache 是否使用Cache中的指令集
     * @param isTrace 是否输出详细的执行指令信息
     * @return
     * @throws Exception
     */
    public Object execute(String expressString, IExpressContext<String,Object> context,
                List<String> errorList, boolean isCache, boolean isTrace) throws Exception {
            return this.execute(expressString, context, errorList, isCache, isTrace, null);
        }
    

    expressString:程序文本 支持普通java语法和java操作包括自定function,比如:"if(0>1){return true;} return false;" 一段简单的java程序

    1、支持 +,-,*,/,<,>,<=,>=,==,!=,<>【等同于!=】,%,mod【取模等同于%】,++,--,
    2、in【类似sql】,like【sql语法】,&&,||,!,等操作符
    3、支持for,break、continue、if then else 等标准的程序控制逻辑
    4、支持java对象操作
    5、支持自定义function, 例如:"function add(int a,int b){ return a+b; }; return add(1,4);"
    6、不支持try-catch、java8的lambda、for循环集合操作、弱类型语言,请不要定义类型声明,
       更不要用Templete(Map<String,List>之类的)、array的声明不一样、min,max,round,print,println,like,
       in 都是系统默认函数的关键字,请不要作为变量名
    

    context:执行上下文可以扩展为包含ApplicationContext

    相关文章

      网友评论

          本文标题:QlExpress

          本文链接:https://www.haomeiwen.com/subject/cnvwuctx.html