2011-08-23 11 views
11

मैं अर्थपूर्ण व्हाइटस्पेस के साथ भाषाओं का विश्लेषण करने के लिए Xtext का उपयोग कैसे कर सकता हूं? मैं कॉफीस्क्रिप्ट के लिए व्याकरण लिखने की कोशिश कर रहा हूं और मुझे इस पर कोई अच्छा दस्तावेज नहीं मिल रहा है।Xtext: महत्वपूर्ण/अर्थात् सफेद जगह के साथ भाषा के लिए व्याकरण

उत्तर

4

AFAIK, आप नहीं कर सकते।

पायथन जैसी भाषाओं को पार्स करने के मामले में, आपको INDENT और DEDENT टोकन उत्सर्जित करने के लिए लेक्सर की आवश्यकता होगी। इसके लिए, आपको लेक्सर नियमों (Xtext के terminal नियमों) के अंदर समर्थित होने के लिए अर्थपूर्ण भविष्यवाणियों की आवश्यकता होगी जो पहले जांच करेंगे कि अगले चरित्र की वर्तमान स्थिति-इन-पंक्ति इनपुट इनपुट 0 (लाइन की शुरुआत) और एक ' ' या '\t' है।

लेकिन documentation के माध्यम से ब्राउज़ करना, मुझे नहीं लगता कि यह इस समय Xtext द्वारा समर्थित है। Xtext 2.0 के बाद, का समर्थन उत्पादन नियमों में अर्थपूर्ण भविष्यवाणियों के लिए जोड़ा गया है (देखें: 6.2.8। सिंटैक्टिक भविष्यवाणी), लेकिन टर्मिनल नियमों में नहीं।

एक्सटेक्स्ट के साथ ऐसा करने का एकमात्र तरीका लेक्सर टर्मिनल रिक्त स्थान और लाइन-ब्रेक का उत्पादन करने देगा, लेकिन यह आपके उत्पादन नियमों की पूरी गड़बड़ी करेगा।

आप (और एक जावा उन्मुख पार्सर जेनरेटर) जावा का उपयोग कर इस तरह के एक भाषा मैं ANTLR की सलाह देते हैं, जिसमें आप काफी आसानी से इस तरह के INDENT और DEDENT टोकन फेंकना कर सकते हैं पार्स करने के लिए चाहते हैं। लेकिन अगर आप एक्लिप्स एकीकरण पर उत्सुक हैं, तो मुझे नहीं लगता कि आप Xtext का उपयोग करके ऐसा करने में सक्षम होंगे, क्षमा करें।

17

यहाँ XText

+0

कूल (मुझे XText में थोड़ा सा पता होना होगा, अभी तक इस टैग में एक _not_ उत्तर प्रश्न ... :))! मैं अपना जवाब नहीं हटा सकता हालांकि यह स्वीकार्य उत्तर है।इससे पहले कि मैं अपना हटा सकता हूं, @nicolaskruchten को आपकी स्वीकार करने की आवश्यकता है। –

+0

अब github पर होस्ट किया जाने लगता है https://github.com/ralfebert/org.eclipselabs.todotext –

+2

दुर्भाग्य से, मुझे यह नमूना कहीं भी नहीं मिला। – rds

2

में एक उदाहरण whitespace sensitive language है CoffeeScript में रुचि रखने वाले लोगों के लिए, एडम Schmideg एक Eclipse plugin that uses XText है।

एक्सटेक्स्ट में पाइथन जैसी डीएसएल को पार्स करने में रुचि रखने वाले लोगों के लिए, उपरोक्त वर्णित टोडोटेक्स्ट के लिए राल्फ एबर्ट का कोड अब गितूब से उपलब्ध नहीं है लेकिन आप इसे Eclipse test repository में पा सकते हैं। इस काम के बारे में original thread और Eclipse issue देखें जो इसके बारे में उठाया गया था।

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

एक अलग कार्यान्वयन here है लेकिन मैं इसे XText के वर्तमान संस्करण के साथ काम करने के लिए नहीं मिल सकता।

इसके बजाय मैंने parboiled पर स्विच किया है जो बॉक्स के बाहर indentation based grammars का समर्थन करता है।

+0

अन्य एक ही समस्या का सामना कर रहे हैं: [XText सूची मार्च 2013 पर पोस्ट करें] (http://www.eclipse.org/forums/index.php/mv/tree/457763/) –

3

एक्सटेक्स्ट का संस्करण 2.8 Whitespace-Aware Languages के लिए समर्थन के साथ आता है। यह संस्करण "होम ऑटोमेशन उदाहरण" के साथ जहाज़ है जिसे आप टेम्पलेट के रूप में उपयोग कर सकते हैं।

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