2011-03-14 16 views
5

मुझे कुछ भाषाओं को सत्यापित करने के लिए जावा में एक बढ़ी हुई बैकस-नौर फॉर्म पार्सर (आरएफसी 5234) की आवश्यकता है।जावा के लिए ओपन सोर्स एबीएनएफ पार्सर कार्यान्वयन?

पहिया को पुन: आविष्कार करने के हित में, मैं एबीएनएफ पार्सर के मौजूदा ओपन सोर्स कार्यान्वयन का उपयोग करना पसंद करूंगा यदि कोई पहले से मौजूद है।

मुझे खुले स्रोत की आवश्यकता है क्योंकि यह मुझे आवश्यकतानुसार कोड बनाए रखने की अनुमति देता है।

क्या कोई भी मौजूद किसी के बारे में जानता है?

+0

यदि लैंगुग जिन्हें आप सत्यापित करना चाहते हैं, पहले से ही एबीएनएफ विनिर्देश हैं, तो यह एक अच्छा विचार है। यदि वे नहीं करते हैं, तो आपको वास्तव में एक पार्सर जेनरेटर सिस्टम की तलाश करनी चाहिए जिसके लिए कई लैंगेज परिभाषाएं पहले ही एन्कोड और परीक्षण की जा चुकी हैं। मैं इस विशेष औपचारिकता में कई मौजूदा भाषा परिभाषाओं को जानकर आश्चर्यचकित हूं। –

+1

@IraBaxter आरएफसी 822 (ईमेल), आरएफसी 2045 (एमआईएमई), आरएफसी 3501 (आईएमएपी) ... असल में हर गंभीर आरएफसी के साथ मैंने काम किया है एबीएनएफ में है। – djechlin

+0

@ डीजेक्लिन: दिलचस्प। कितने कार्यान्वयन एबीएनएफ का उपयोग सीधे करते हैं? –

उत्तर

2

Parse2 एबीएनएफ से एक पार्सर के लिए स्रोत जावा उत्पन्न करता है।

2

मैं अवलोकन बना दिया है कि Parse2 (राल्फ द्वारा उत्तर देखें) कुछ सीमाओं के साथ आता है:

  • aparse टिप्पणी पसंद नहीं करता है और उन्हें हटाया जा करने के लिए है मैन्युअल
  • सभी पीढ़ी कोड करने से पहले बयान इसलिए वे अगर अपने व्याकरण उन पर आधारित है आरएफसी से कॉपी करने के लिए
  • अपार है परिभाषित आरएफसी 5234 के रूप में लाइन
  • aparse "मूल" ABNF नियम लागू नहीं होता है के अंत में एक ; के साथ समाप्त करने की जरूरत है से व्याकरण में लूप पसंद नहीं है (उदा। S --> NT1 NT2 T1 ; NT1 --> S | T2 ; ...) और अंतहीन loops में चला सकता है।

इन टिप्पणियों की पुष्टि Parse2 के डेवलपर द्वारा की गई है। तो संक्षेप में: Parse2 एबीएनएफ व्याकरण के उप-समूह को पार्स कर सकता है, हालांकि यदि आपको मौजूदा एबीएनएफ व्याकरण मिलता है और इसे सॉफ़्टवेयर को खिलाने का प्रयास किया जाता है तो इसमें सबसे अधिक संभावनाएं होती हैं।

यदि आप एबीएनएफ व्याकरण स्वयं निर्दिष्ट करते हैं और इन सीमाओं को ध्यान में रखते हैं, तो इस पुस्तकालय को आपके लिए काम करना चाहिए। यदि आपको मौजूदा एबीएनएफ व्याकरण के साथ काम करना है तो आपको कोड पीढ़ी से पहले व्याकरण में अतिरिक्त प्रयास करना पड़ सकता है।

पीएस: पार्स 2 लाइब्रेरी स्रोत कोड वर्तमान में उपलब्ध नहीं है, भले ही संकलित बाइनरी (जावा बाइट कोड) स्वतंत्र रूप से उपलब्ध हो।

+0

ने आगे एबीएनएफ पार्सर जेनरेटर की खोज की और पाया [जावा एपीजी] [1] (कोड उत्पन्न करता है जिसके लिए जीपीएल वी 2 + पुस्तकालय चलाने की आवश्यकता होती है) और [एबीएनएफ-पार्सर-जेनरेटर] [2] (जेनरेट कोड लाइसेंस प्राप्त नहीं है)। तो सबसे अच्छा जावा पार्सर जेनरेटर जो मुझे मिल सकता है [abnf-parser-generator] है क्योंकि यह एक एलआर (1) [3] पार्सर उत्पन्न करता है जो काफी शक्तिशाली है। [1] http://www.coasttocoastresearch.com/ [2] https://github.com/bqluan/abnf-parser- जनरेटर [3] http://en.wikipedia.org/wiki/ Canonical_LR_parser – Ray

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