java - JavaScriptのような構文を自分のJavaメソッドに解析する

java javascript parsing function

基本的に、JavaScriptに似た構文を解析できるようにしたいです。例えば:

var results = system.function('example');  

if(results == "hello") {  
   console_print("ding dong.");  
}  


つまり、基本的には、結果は「文字列」になり、system.functionはJavaメソッドを呼び出し、それらの結果は結果の文字列に入ります。

基本的な計算と検証もできるようにしたいのですが、Javaでこれを実行したいと思っています。何か案は?
答え
JavaScriptのようなものだけでなく、JavaScriptを使用するつもりで、Java 1.6以降を使用している場合は、Scripting APIを使用できます。

import javax.script.*;

public class Main {

  public static void main (String[] args) throws Exception {

    String source =
        "var system = new Array();                       \n" +
        "system['foo'] = function(s) { return 'hello'; } \n" +
        "                                                \n" +
        "var results = system.foo('example');            \n" +
        "                                                \n" +
        "if(results == \"hello\") {                      \n" +
        "  print(\"ding dong.\");                        \n" +
        "}                                               \n";

    ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
    engine.eval(source);
  }
}


印刷されます:

ding dong.


コンソールに。

スクリプト言語からJavaメソッドを呼び出すには、BeanShellを試してみます。

package test;

import bsh.Interpreter;

public class Main {

  public static void foo(Object param) {
    System.out.println("From Java, param=" + param);
  }

  public static void main (String[] args) throws Exception {

    Interpreter i = new Interpreter();
    i.eval("a = 3 * 5; test.Main.foo(a);");
  }
}


印刷されます:

From Java, param=15


core interpreter JAR of BeanShellはわずか143 KBです。それよりも軽量なIMOです。
関連記事

java - IllegalArgumentException:オブジェクトの配列をSCHEMA_SOURCEプロパティの値として使用する場合、2つのスキーマが同じtargetNamespaceを共有することはできません

java - Notnoop / java-apnsプッシュ

java - iTextを使用してJSPでPDFファイルの限られた数のページを表示する方法は?

java - サーバー側のJax-rs呼び出しをプレフィックスのないネイティブファイルと混在させる方法は?

java - プリミティブのJavaジェネリックメソッド

java - Stripes Frameworkの会話スコープ

java - AspectJでメソッドを注釈付き引数と一致させる方法

java - 金額をDoubleとして格納しますが、BigDecimalを使用して値を計算します

java - Java(Clojure)から書き込み、Paraviewで読み取ることができるデータ形式は何ですか?

java - MATLAB Javaクラスパスの問題