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
ます。