2015-03-19 11 views
6

Szukam interfejsu API Java/JDK do parsowania kodu JavaScript (w tym rozszerzeń Nashorn) Natknąłem się na this Gist, który zgodnie z wbudowanym komentarzem wymaga uruchomienia JDK 9. Czy istnieje niezawodny sposób na osiągnięcie tego samego przy obecnych lub planowanych wydaniach JDK 8?API analizatora składni Nashorn na JDK 8

Odpowiedz

8

API Nashorn Parser (http://openjdk.java.net/jeps/236) to specyficzne API dla jdk9. W przypadku aktualizacji jdk8 lub jdk8 istnieje obsługa funkcji analizatora skryptów.

load ("nashorn: parser.js");

i wywołaj funkcję "parsuj" ze skryptu. Ta funkcja zwraca obiekt JSON, który reprezentuje AST skryptu przeanalizowanego.

Zobacz tę próbkę: http://hg.openjdk.java.net/jdk8u/jdk8u-dev/nashorn/file/bfea11f8c8f2/samples/astviewer.js

+0

Dzięki! Jak wspaniale uzyskać odpowiedź od wewnętrznego mężczyzny :) (Które wydaje się być, prawda?) –

-1

Choć na pewno można użyć parsera poprzez Nashorn w JavaScripcie, to jest nawet ładniejszy w Javie, aby używać go za pośrednictwem interfejsu 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); 
+0

To jest zły pomysł. jdk.nashorn.internal. * są wewnętrznymi pakietami wdrożeniowymi nashorn. Nie uda się uruchomić z włączonym menedżerem zabezpieczeń (jeśli twoja klasa jest niezaufana). W jdk9 nie są one nawet eksportowane z modułu nashorn, więc nie uda się je skompilować nawet. –

+0

Punkt targów. Jest inny efekt uboczny tego, który odkryłem. Jeśli to zrobisz, nie możesz również użyć Nashorn przez 'ScriptEngine'. W końcu stworzyłem małe 'js', aby użyć parsera w samym Nashorn. –

Powiązane problemy