[英]Java: Library for expression parsing & evaluation with identifiers not known in advance
我需要評估一個布爾表達式。 目的是過濾一組帶標簽的項目 。 標記可以是任何名稱(例如Java標識符)。
例如:
foo OR (bar AND !baz)
對於標記為:
我事先不知道需要哪個名字。 我已經檢查了JEXL,但是它具有JexlContext ,它基本上是一個Map,需要在評估之前進行填充。
我需要一些庫,該庫調用回調函數來確定標識符是true還是false。 或任何其他允許標識符在評估之前未知的機制。
它必須像啤酒一樣免費(用於Maven插件),因此Jep毫無疑問。
我可以使用什么?
您可以提供不依賴於Map
的JexlContext
實現。 無需在評估之前填充它,您可以對待它的has
進行檢查, get
為您的回調並忽略set
的調用。
在Google的番石榴中嘗試謂詞
最簡單的方法是使用自Java 6以來屬於JDK的JavaScript。這是一個示例
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("JavaScript");
// populate variables foo, bar and baz to the engine, e.g.
engine.put("foo", true);
engine.put("bar", true);
engine.put("baz", false);
engine.eval("foo OR (bar AND !baz)");
有關更多信息,請查看Oracle的教程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.