JDK 8上的Nashorn解析器API

8

在寻找解析JavaScript的Java/JDK API(包括Nashorn扩展)时,我偶然发现了这个代码片段,内联注释指出需要JDK 9才能运行。是否有可靠的方法在当前或计划中的JDK 8版本上实现相同的功能?

2个回答

10
纳朝恩解析器API(http://openjdk.java.net/jeps/236)是jdk9特定的API。在jdk8或jdk8更新版本中,支持脚本解析函数。 使用load("nashorn:parser.js");命令加载,在脚本中调用“parse”函数,该函数返回表示解析脚本的AST的JSON对象。 可以参考此示例

谢谢!能够得到内部人员的回复真是太棒了 :) (你似乎就是内部人员,对吧?) - Gustav Barkefors

-1

虽然你可以通过Nashorn的JavaScript来使用解析器,但是通过JAVA API在Java中使用它会更好。

    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);

1
这是个坏主意。jdk.nashorn.internal.* 是 nashorn 的内部实现包,如果安全管理器启用(如果你的类不受信任),它将无法运行。在jdk9中,这些甚至不会从nashorn模块导出,所以即使编译也会失败。 - A. Sundararajan
说得好。我发现这样做还有另一个副作用。如果你按照上述方法操作,就不能再通过ScriptEngine使用Nashorn了。最终,我创建了一个小的js文件,在Nashorn内部使用解析器。 - Ashley Frieze

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接