2015-03-19 16 views
6

पर नैशर्न पार्सर एपीआई जावास्क्रिप्ट (नैशर्न एक्सटेंशन सहित) के लिए जावा/जेडीके एपीआई की तलाश में मैंने this Gist पर ठोकर खाई, जो एक इनलाइन टिप्पणी के अनुसार जेडीके 9 चलाने की आवश्यकता है। क्या जेडीके 8 की वर्तमान या योजनाबद्ध रिलीज पर इसे पूरा करने का एक विश्वसनीय तरीका है?जेडीके 8

उत्तर

8

नैशर्न पार्सर एपीआई (http://openjdk.java.net/jeps/236) jdk9 विशिष्ट API है। Jdk8 या jdk8 अद्यतन पर, स्क्रिप्ट पार्सर फ़ंक्शन के लिए समर्थन है।

लोड ("nashorn: parser.js");

और स्क्रिप्ट से "पार्स" फ़ंक्शन कॉल करें। यह फ़ंक्शन एक JSON ऑब्जेक्ट देता है जो स्क्रिप्ट के एएसटी का प्रतिनिधित्व करता है। http://hg.openjdk.java.net/jdk8u/jdk8u-dev/nashorn/file/bfea11f8c8f2/samples/astviewer.js

+0

धन्यवाद जावा में भी अच्छे है:

इस नमूने मिलते हैं! अंदरूनी आदमी से जवाब प्राप्त करने में कितना भयानक :) (जो आपको लगता है, है ना?) –

-1

जबकि आप निश्चित रूप से Nashorn का JavaScript के माध्यम से पार्सर का उपयोग कर सकते हैं, यह जावा एपीआई के माध्यम से इसका इस्तेमाल करने

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

यह एक बुरा विचार है। jdk.nashorn.internal। * नाशर्न के आंतरिक कार्यान्वयन पैकेज हैं। यह सुरक्षा प्रबंधक सक्षम होने में विफल हो जाएगा (यदि आपकी कक्षा अविश्वसनीय है)। Jdk9 के साथ, इन्हें नाशर्न मॉड्यूल से भी निर्यात नहीं किया जाता है और इसलिए यह संकलित करने में भी असफल हो जाएगा। –

+0

उचित बिंदु। इसका एक और दुष्प्रभाव है, जिसे मैंने खोजा। यदि आप उपर्युक्त करते हैं तो आप 'स्क्रिप्टइंजिन' के माध्यम से नैशर्न का भी उपयोग नहीं कर सकते हैं। अंत में, मैंने नैशर्न के भीतर पार्सर का उपयोग करने के लिए एक छोटा 'जेएस' बनाया। –

संबंधित मुद्दे