2008-10-13 18 views

उत्तर

14

हां, यह संभव है, लेकिन केवल जावा 6 के बाद से। Peter von der Ahéthis interview में दो जेएसआर के बारे में बात करता है। जेएसआर 199:

जेएसआर 199 कंपाइलर एपीआई में तीन चीजें हैं: पहला मूल रूप से आपको एपीआई के माध्यम से एक कंपाइलर का आह्वान करने की अनुमति देता है। दूसरा, एपीआई आपको अनुकूलित करने की अनुमति देता है कि कंपाइलर फ़ाइलों को कैसे पाता है और लिखता है। मेरा मतलब सार तत्वों में है, क्योंकि संकलक के साथ फाइलें फाइल सिस्टम पर आवश्यक नहीं हैं। जेएसआर 199 की फाइल अबास्ट्रक्शन आपको डेटाबेस में फाइलें रखने और सीधे स्मृति में आउटपुट उत्पन्न करने की अनुमति देती है, उदाहरण के लिए। अंत में, जेएसआर 199 एपीआई आपको एक संरचित तरीके से कंपाइलर से डायग्नोस्टिक्स एकत्र करने देता है ताकि आप आईडीई के संपादक में लाइनों में आसानी से त्रुटि संदेश बदल सकें।

जेएसआर 26 9 एनोटेशन प्रोसेसिंग एपीआई है।

This articleCompiler Tree API तक पहुंचने का उत्कृष्ट अवलोकन देता है। खंड "Accessing the Abstract Syntax Tree: The Compiler Tree API" आपके प्रश्न के लिए विशेष रूप से उपयुक्त लगता है।

आप जो कर रहे हैं उसके आधार पर, आप Jackpot Rule Language पर भी देखना चाहते हैं, जो एक स्टैंडअलोन रिफैक्टरिंग इंजन है जो कंपाइलर ट्री में प्लगइन करता है।

6

संकलित करें और इसे -cp tools.jar के साथ चलाएं (जहां आपको स्पष्ट रूप से tools.jar का स्थान निर्दिष्ट करना होगा)।

import com.sun.source.util.Trees; 
import javax.tools.JavaCompiler; 
import javax.tools.StandardJavaFileManager; 
import javax.tools.ToolProvider; 

public class JCTreeTest { 
    private static final JavaCompiler javac 
      = ToolProvider.getSystemJavaCompiler(); 

    public static void main(String[] args) { 
     final StandardJavaFileManager jfm 
       = javac.getStandardFileManager(null, null, null); 
     final JavaCompiler.CompilationTask task 
       = javac.getTask(null, jfm, null, null, null, 
        jfm.getJavaFileObjects(args)); 
     final Trees trees = Trees.instance(task); 
     // Do stuff with "trees" 
    } 
} 

यह कम्पाइल और हालांकि मैं पेड़ के साथ नहीं खेला है, मेरे लिए चलाता है अपने आप सामान है, तो आप अपने आप को read the javadoc करना होगा। :-) सौभाग्य!