Jexl解析表达式

例1:

public static void main(String[] args) {
    Map<String, Object> params =new HashMap<>();
    params.put("id", 1122);
    String sql=" select * from Table where id=${id}";
    JexlContext context = new MapContext(params);
    JexlEngine jexl = new JexlEngine();
    UnifiedJEXL ujexl = new UnifiedJEXL(jexl);
    UnifiedJEXL.Expression expr = ujexl.parse(sql);
    String result = expr.evaluate(context).toString();
  }


sql:

执行前: select * from Table where id=${id}

执行后: select * from Table where id=1122


例2:

public static void main(String[] args) {
    Expression expr;
    JexlContext ctxt = new MapContext();
    JexlEngine jexl = new JexlEngine();
    // 表达式
    String exps = "if(c1>c2) {c3=5}";
    expr = jexl.createExpression(exps);

    ctxt.set("c1", 2);
    ctxt.set("c2", 1);
    expr.evaluate(ctxt);
    System.out.println(ctxt.get("c3"));
  }
ctxt:

执行前: 无c3

执行后: c3 = 5


总结:

JexlEngine  创建表达式

JexlContext  存放参数

需要jar包支持:commons-jexl-2.1.1.jar



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,我可以为您解释Jlox解释器源代码中的表达式解析部分。 在Jlox中,表达式解析器的实现是基于递归下降解析器的思想。通过递归下降解析器,我们可以将一个复杂的表达式分解为一个个简单的部分,并通过递归调用解析器来逐步构建语法树。 在Jlox中,表达式解析器的入口是`parseExpression()`函数,该函数接受一个优先级参数,用于确定当前正在解析表达式的优先级。在解析表达式时,我们首先解析最高优先级的部分,然后逐步向下解析更低优先级的部分。 在Jlox中,表达式的类型包括:字面量、标识符、一元运算符、二元运算符、括号表达式和函数调用表达式。对于每种类型的表达式,我们都有相应的解析函数。 例如,对于字面量表达式,我们有`literal()`函数,该函数解析数字、字符串等字面量。对于标识符表达式,我们有`variable()`函数,该函数解析变量名。对于一元运算符表达式,我们有`unary()`函数,该函数解析一元运算符(如取反、负号等)。对于二元运算符表达式,我们有`binary()`函数,该函数解析二元运算符(如加、减、乘等)。对于括号表达式,我们有`grouping()`函数,该函数解析括号中的表达式。对于函数调用表达式,我们有`call()`函数,该函数解析函数名和参数列表。 在解析表达式时,我们还需要考虑运算符的优先级和结合性。为此,我们在每个运算符解析函数中,传递当前运算符的优先级,并判断是否需要递归调用更低优先级的解析器。同时,我们还需要考虑运算符的结合性,例如加法和乘法运算符都是左结合的,而赋值运算符则是右结合的。 最终,通过递归下降解析器的实现,我们可以将一个复杂的表达式解析成一个语法树,该语法树可以用于后续的代码生成和执行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值