为了寻找一个用于解析JavaScript(包括Nashorn扩展)的Java/JDK API,我偶然发现了这个Gist,根据内联注释,它需要运行JDK9。有没有一种可靠的方法可以在JDK8的当前或计划版本上实现同样的功能?
Nashorn Parser API(http://openjdk.java.net/jeps/236)是特定于jdk9的API。在jdk8或jdk8更新中,支持脚本解析器函数。
load("nashorn:parser.js");
并从脚本中调用"parse"函数。此函数返回一个JSON对象,该对象表示解析的脚本的AST。
请参阅此示例:http://hg.openjdk.java.net/jdk8u/jdk8u-dev/nashorn/file/bfea11f8c8f2/samples/astviewer.js
虽然您可以通过Nashorn的JavaScript使用解析器,但在Java中通过Java API 使用它更好些
import jdk.nashorn.api.scripting.ScriptUtils;
import jdk.nashorn.internal.runtime.Context;
import jdk.nashorn.internal.runtime.ECMAException;
import jdk.nashorn.internal.runtime.ErrorManager;
import jdk.nashorn.internal.runtime.options.Options;
// set up the environment
Options options = new Options("nashorn");
options.set("anon.functions", true);
options.set("parse.only", true);
options.set("scripting", true);
ErrorManager errors = new ErrorManager();
Context contextm = new Context(options, errors, Thread.currentThread().getContextClassLoader());
Context.setGlobal(contextm.createGlobal());
// then for each bit of parsing
String parseTree = ScriptUtils.parse(some_code_string, "nashorn", false);