2009-10-28 13 views
24

मैं जावा में एक कंपाइलर डिज़ाइन प्रोजेक्ट पर काम कर रहा हूं। लेक्सिकल विश्लेषण किया जाता है (jflex का उपयोग करके) और मैं सोच रहा हूं कि कौन सा yacc-like उपकरण सबसे अच्छा (सबसे कुशल, उपयोग करने में आसान, इत्यादि) सिंटैक्टिकल विश्लेषण करने के लिए और क्यों होगा।जावा के लिए Yacc समतुल्य

उत्तर

16

यदि आप विशेष रूप से वाईएसीसी-जैसे व्यवहार (टेबल-संचालित) चाहते हैं, तो मुझे केवल एक ही पता है CUP

जावा दुनिया में, ऐसा लगता है कि अधिक लोग ANTLR या JavaCC जैसे पुनरावर्ती मूल पार्सर्स की तरफ झुकते हैं।

और दक्षता शायद ही कभी एक पार्सर जनरेटर चुनने का कारण है।

+0

कठिनाई: सीयूपी अब बनाए रखा नहीं गया है और [सीयूपी 2] (http://www2.in.tum.de/cup2) बीटा है। क्या यह अभी भी ठीक है? – minopret

+0

@minopret - मैंने एक दर्जन से अधिक वर्षों में सीयूपी का उपयोग नहीं किया है, लेकिन जब तक कि कोई बड़ी अप्रत्याशित बग न हो, तब भी यह ठीक से होना चाहिए, भले ही सक्रिय रूप से बनाए रखा न जाए। हालांकि, जब तक आपको YACC- जैसे व्यवहार की आवश्यकता न हो, मैं एएनटीएलआर को देखूंगा। – kdgregory

+0

मैं एक गिटहब मार्कडाउन फ़ाइल (.md) निर्माता पर काम कर रहा हूं जो किसी भी भाषा में लिखी गई कोड फ़ाइल लेता है, और इसके लिए एक .md फ़ाइल उत्पन्न करता है। मैं जावा में यह कर रहा हूँ। क्या ये सॉफ्टवेयर * किसी * भाषा या सिर्फ जावा को संभाल सकते हैं? –

5

अतीत में, मैंने लेक्सर और पार्सर दोनों के लिए एएनएलटीआर का उपयोग किया है, और जेएफएक्स होमपेज का कहना है कि यह एएनटीएलआर के साथ अंतःक्रिया कर सकता है। मैं यह नहीं कहूंगा कि एएनटीएलआर का ऑनलाइन दस्तावेज बहुत अच्छा है। मैंने 'The Definitive ANTLR reference' में निवेश समाप्त कर दिया, जिसने काफी मदद की।

+1

मेरे अनुभव में साथ अच्छी तरह से इंटरफेस, ANTLR lexing/पार्स के लिए सबसे लोकप्रिय जावा उपकरण अब तक का है। –

3

जीएनयू बाइसन एक जावा इंटरफ़ेस है,

http://www.gnu.org/software/bison/manual/html_node/Java-Bison-Interface.html

आप इसे जावा कोड उत्पन्न जाना उपयोग कर सकते हैं।

+1

इसके साथ आपके अनुभव क्या हैं? क्या यह अच्छी तरह से काम करता है? –

2

एक और विकल्प GOLD Parser होगा।

कई विकल्पों के विपरीत, गोल्ड पार्सर व्याकरण से पार्सिंग टेबल उत्पन्न करता है और उन्हें बाइनरी, गैर निष्पादन योग्य फ़ाइल में रखता है। प्रत्येक समर्थित भाषा में तब एक इंजन होता है जो बाइनरी टेबल पढ़ता है और आपकी स्रोत फ़ाइल को पार करता है।

मैंने विशेष रूप से जावा कार्यान्वयन का उपयोग नहीं किया है, लेकिन डेल्फी इंजन का काफी अच्छे परिणाम के साथ उपयोग किया है।

2

भी jacc है।

जैक यक के करीब है जैसा आप प्राप्त कर सकते हैं, लेकिन इसे शुद्ध जावा में लागू किया गया है और एक जावा पार्सर उत्पन्न करता है।

यह jFlex

http://web.cecs.pdx.edu/~mpj/jacc/

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