2009-10-31 10 views
6

मैं एक जावा पुस्तकालय की तलाश में हूं जो मुझे जावा स्रोत फ़ाइल को पार्स करने की अनुमति देता है और यह मुझे कोड का एएसटी प्रतिनिधित्व देता है।क्या जावा भाषा के लिए जावा पार्सर है?

दरअसल मैं केवल अपनी एनोटेशन के साथ कक्षा और विधि परिभाषाओं में रूचि रखता हूं। मुझे विधि कोड के एएसटी की आवश्यकता नहीं है।

मैं कोड पीढ़ी के लिए इस जानकारी का उपयोग कर रहा हूं। यही कारण है कि मैं परिणामी वर्ग फ़ाइल से जानकारी प्राप्त करने के लिए पहले स्रोत फ़ाइल संकलित नहीं कर सकता। जब तक मैं कुछ अतिरिक्त कक्षाएं उत्पन्न नहीं करता तब तक कोड त्रुटियों के बिना संकलित नहीं होगा।

उत्तर

2

मुझे प्रोजेक्ट javaparser मिला, जो एक जावा फ़ाइल को पार करता है और एक अच्छी तरह से गठित एएसटी देता है।

9

जावा 6 इसे संकलक के मूल भाग के रूप में समर्थन करता है और इसके लिए मानक एपीआई (javax.lang.model) है। आप इसे here पर पढ़ सकते हैं। यह विशेष रूप से आपके उपयोग-मामले के लिए डिज़ाइन किया गया है (यानी एनोटेशन और स्रोत से कोड जनरेशन)।

+0

हाँ, यह अच्छा लग रहा है। क्या आप मुझे एक संकेत दे सकते हैं कि कौन सी कक्षा स्रोत फ़ाइल पढ़ने के लिए ज़िम्मेदार है? – tangens

+0

आप एक कंपाइलर "प्लगइन" बनाते हैं जिसे आप कमांड लाइन पर javac के लिए निर्दिष्ट करते हैं। मुझे लगता है कि आपके द्वारा कार्यान्वित इंटरफ़ेस 'javax.annotation.processing.Processor' – Ramon

+1

javax.lang.model संपूर्ण भाषा के लिए एक सार वाक्यविन्यास पेड़ होने के बजाय एनोटेशन को प्रोसेस करने के लिए आवश्यक है पर आधारित है। इसलिए इसमें संकुल, वर्ग, विधियां, फ़ील्ड, पैरामीटर और चर हैं, लेकिन अभिव्यक्ति या बयान नहीं। –

2

मुझे लगता है। NetBeans Javaparser कुछ आप में रुचि हो जाएगा हो सकता है

+0

ठीक है, अब मैंने इसका एक जार बनाया है। जावा स्रोत फ़ाइल से एएसटी बनाने के लिए मैं इसका उपयोग कैसे कर सकता हूं? – tangens

2

आप जावा भाषा के लिए एक व्याकरण फ़ाइल के साथ JavaCC कोशिश कर सकते हैं।

8

एएनटीएलआर (http://www.antlr.org/) जावा भाषा के लिए एक पार्सर है और यह एएसटी का भी समर्थन करता है।

options { 
    output=AST; 
} 
* .g फ़ाइल में

कोशिश (मैं इसे व्यक्तिगत रूप से प्रयास नहीं किया है);

+0

ठीक है, मैंने Java.g संकलित किया लेकिन मुझे अभी भी पता नहीं है कि एएसटी प्राप्त करने के लिए इसका उपयोग कैसे किया जाए। आपके पास कोई उदाहरण है? – tangens

+0

मैं इस चरण में पेशकश कर सकता हूं (मैं अभी भी सीख रहा हूं) है: 'विकल्प { आउटपुट = एएसटी; } * * .g फ़ाइल में –

2

@tangens ने जावापार्सर के बारे में लिखा लेकिन अब पुरानी परियोजना का संदर्भ दिया।

2011 में एक कांटा रहा है जो अभी भी सक्रिय रूप से बनाए रखा गया है और अब जावा 1.7 और 1.8 का विश्लेषण भी करता है।

आप इसे वहाँ मिल सकते हैं: https://github.com/javaparser/javaparser

अस्वीकरण: मुझे लगता है कि इस परियोजना के लिए एक योगदानकर्ता है।

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