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

时间:2014-05-07 08:53:58

标签: java javascript scala

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

  • 的JavaScript
  • Scala的
  • 爪哇

我想对对象执行的操作类似于角度表达式。 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
}

对于像这样的简单表达式,我应该有什么替代方法可以返回true或false?运营商不需要像上面的例子那样。 and可以,而不是&&lt可以,而不是<等。

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

1 个答案:

答案 0 :(得分:0)

Spring Expression Language支持Java,Javascript和.NET:

我使用了.NET和Java版本,尽管它们之间存在一些不一致之处,但是它们通常都很好。

您还可以使用JavaScript本身,许多现代语言都可以解析和评估JavaScript。