Я использую Rhino для оценки выражений js, помещая все возможные значения переменных в область видимости и оценивая анонимную функцию. Однако выражения довольно просты, и я хотел бы указать только значения, используемые в выражении, для производительности.
Пример кода:
Context cx = Context.enter();
Scriptable scope = cx.initStandardObjects(null);
// Build javascript anonymous function
String script = "(function () {" ;
for (String key : values.keySet()) {
ScriptableObject.putProperty(scope, key, values.get(key));
}
script += "return " + expression + ";})();";
Object result = cx.evaluateString(scope, script, "<cmd>", 1, null);
Я хочу получить все токены из выражений, которые являются именами переменных.
Например, если выражение
(V1ND < 0 ? Math.abs(V1ND) : 0)
он вернет V1ND
.