跨语言简单表达式语言实现

Cross language simple expression language implementation

本文关键字:语言 实现 表达式 简单      更新时间:2023-09-26

是否存在一种非常简单的表达式语言,其解析器使用以下语言之一:

    JavaScript
  • Scala
  • Java

我想在对象上执行的操作类似于角表达式。http://teropa.info/blog/2014/03/23/angularjs-expressions-cheatsheet.html

然而,我不需要所有这些,因为我想要独立于语言的功能。暴露给表达式的对象应该是JSON。这意味着我不需要允许函数调用。过滤功能也不需要。

我想使用这个是为了在语言实现之间共享简单的验证表达式。

给定以下人

{
    age: 17,
    male: false,
    country: 'US'
}

我可能想定义这样的验证规则

{
    age: "(male && age >= 16) || (!male && age >= 18)", // => conditionally valid
    country: "country == 'US'" // => valid
}
对于像这样应该返回真或假的简单表达式,我有什么替代方法?操作符不需要像上面的例子那样。and可以代替&&, lt可以代替<等。

我已经看到了一些替代方案,如http://docs.oracle.com/javaee/7/tutorial/doc/jsf-el007.htm#BNAIM,但我所看到的问题是,它们是为了在特定的上下文中使用,并且有几个隐式变量。他们有像lambda表达式之类的东西,这使得在语言中编写可能缺失的实现变得更加复杂。

Spring表达式语言支持Java, Javascript和。net:

  • https://github.com/benmarch/spel2js
  • http://www.springframework.net/doc-latest/reference/html/expressions.html
  • https://docs.spring.io/spring/docs/3.0.x/reference/expressions.html

我使用过。net和Java版本,它们基本上都很好,尽管两者之间存在一些不一致。

您也可以使用JavaScript本身,许多现代语言都可以解析和计算JavaScript。