2013-02-01 11 views
6

मैं जावा फाइलों को पार्स करने के लिए tools.jar (यानी JavaCompiler) से javac का उपयोग कर रहा हूं। मैं TreePathScanner के कार्यान्वयन का उपयोग कर स्रोतों का विश्लेषण करता हूं। अब तक, सबकुछ ठीक लगता है, क्योंकि मैं आयात, पैकेज नाम, कक्षा का नाम, विधि का नाम, निर्देश ...javac टूल पार्सर का उपयोग कर जावा फ़ाइल से इनलाइन टिप्पणियों को कैसे पढ़ा जाए?

लेकिन मुझे इनलाइन टिप्पणियों में समस्या है - मैं उन्हें बस उन्हें प्रकट नहीं कर सकता एएसटी पेड़ बनाया, या उनसे मुलाकात की। हालांकि, मैं कक्षाओं, विधियों इत्यादि के लिए javadoc टिप्पणियों पढ़ने के लिए सक्षम हूं, लेकिन कोई इनलाइन टिप्पणियां पढ़ने में सक्षम हूं।

सर्वोत्तम तरीके से इनलाइन टिप्पणियों को कैसे पढ़ा जाए? मैं netbeans स्रोत कोड देख रहा हूं (क्योंकि यह पार्सिंग के लिए भी जावैक का उपयोग कर रहा है), लेकिन मुझे इसके बारे में आसानी से कुछ भी नहीं मिल रहा है।

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

क्या कोई बेहतर समाधान जानता है? धन्यवाद!

+0

मुझे लगता है कि com.sun.tools.javac.main.JavaCompiler कुछ रखता है कमेंट्स ध्वज डिफ़ॉल्ट रूप से गलत पर सेट होता है। क्या आप इसका उपयोग करने की कोशिश कर रहे हैं? क्या आपने इसे बदलने की कोशिश की? – jdb

+0

हाँ, मेरे पास पहले से ही यह सेट सही था, कोई फर्क नहीं पड़ता। – igr

उत्तर

4

आप नहीं कर सकते। कंपाइलर उन्हें फेंक देता है। कंपाइलर्स हमेशा ऐसा करते हैं। जावा कंपाइलर केवल जावाडोक टिप्पणियों को फेंक नहीं देता है क्योंकि जावाडोक उन्हें ढूंढने के लिए कंपाइलर का उपयोग करता है और जावाडोक लोग संकलक लोगों के साथ मिलकर मिलते हैं।

+0

यह सच है। मैंने javac के लिए स्रोत की जांच की है और वर्ग 'स्कैनर' में आप निम्न विधि देख सकते हैं: 'संरक्षित शून्य प्रक्रिया टिप्पणी (टिप्पणी स्टाइल शैली)' जो सिर्फ डीबग संदेश लॉग करती है। मैं यह देखने की कोशिश करूंगा कि क्या मैं इसे ओवरराइड कर सकता हूं। – igr

+0

मैं ** JavaCompiler ** का उपयोग नहीं कर पार्सर चलाने में कामयाब रहा, लेकिन सिर्फ ** स्कैनर ** और ** पार्सर ** कक्षाएं; और 'प्रक्रिया टिप्पणी' विधि को ओवरराइड करने में सक्षम था, लेकिन ...यह विधि सिर्फ सूचना देता है कि टिप्पणी संसाधित की गई है और टिप्पणी प्रकार और कुछ और नहीं (जैसे मूल्य, स्थिति इत्यादि)। – igr

+0

बीटीडब्ल्यू, ऐसा लगता है कि ग्रहण एएसटी कंपाइलर टिप्पणियों को संरक्षित करता है। – igr

1

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

इसी प्रकार, क्लासिक पार्सर जनरेटर (जैसे जावासीसी, एएनटीएलआर इत्यादि) इस जानकारी को कैप्चरिंग/पुन: उत्पन्न करने के समर्थन में बहुत कम प्रदान करते हैं।

पुनर्रचना पारसर्स, इसके विपरीत, कोड और टिप्पणी, कभी कभी भी खोने (या उचित रूप से टिप्पणी में संशोधन) के बिना कोड को संशोधित करने का विश्लेषण किया जाता है। टिप्पणियों के साथ कोड विश्लेषण के लिए, आप टिप्पणियों को फेंक नहीं सकते: -} कोड संशोधन के लिए, यदि आप मूल के आधार पर परिवर्तित कोड को पुन: उत्पन्न करते हैं, तो यह अच्छा होता है कि परिवर्तित कोड कोड लेआउट, टिप्पणियां, और शाब्दिक "प्रारूप" (उदाहरण के लिए) , एक दशमलव मूल्य के रूप में हेक्स शाब्दिक को पुन: उत्पन्न करना कानूनी और समकक्ष है, लेकिन मूल लेखकों को बहुत दुखी करता है)। ऐसा करने के लिए, पुनर्वितरण करने वाले पार्सर्स को इस डेटा को कैप्चर करने के लिए विशेष लेक्सर्स की आवश्यकता होती है, और मशीनरी को पार्स करना जो इसे फेंक नहीं देता है।

हमारे डीएमएस सॉफ्टवेयर पुनर्वितरण टूलकिट में, सामान्य मशीनरी के रूप में एक पुनर्वितरण पार्सर शामिल है; डीएमएस आधारित पार्सर्स विभिन्न प्रकार की भाषाओं (जावा में ओपी की रुचि सहित) के लिए मौजूद हैं। डीएमएस सभी टिप्पणियों/लेआउट/स्वरूपण जानकारी को कैप्चर करता है। विश्लेषण उपकरण के पास इसका सब कुछ है।

TXL और स्ट्रेटगो इसके लिए भी कुछ समर्थन प्रदान करते हैं।

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