2012-12-14 51 views
7

में डीएसएल को हाइलाइट करना मेरे पास एक एएनटीएलआर व्याकरण है जो एक डीएसएल (डोमेन विशिष्ट भाषा) को परिभाषित करता है। यह व्याकरण अपेक्षाकृत सरल है। यह एक बहुत ही बुनियादी अनुवादक बनाने के लिए भाषा को पार्स कर रहा है और सी कोड आउटपुट कर रहा है।एएनटीएलआर सिंटेक्स विजुअल स्टूडियो

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

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

यदि मैंने कोई महत्वपूर्ण जानकारी छोड़ी है, तो कृपया पूछें! धन्यवाद!

उत्तर

3

यह भाषा सी # एप्लिकेशन (किसी प्रकार के नियंत्रण में टाइप की गई है, चाहे वह रिचटेक्स्टबॉक्स या कस्टम कंट्रोल हो) में उपयोग की जानी है और एक आवश्यकता है कि इस भाषा के लिए सिंटैक्स हाइलाइटिंग हो।

अपने नियंत्रण के लिए Scintilla का उपयोग करने पर विचार करें। यह आईडीई-शैली पाठ संपादन के लिए एक पाठ नियंत्रण है। Notepad++ इसे अपने टेक्स्ट कंट्रोल के लिए उपयोग करता है, जैसा कि विज्ञान आईडीई उत्पन्न करता है। मैंने इसे एक अनौपचारिक .NET- विशिष्ट संस्करण का उपयोग कर सी # में लिखे गए एक छोटे, कस्टम आईडीई प्रोजेक्ट में उपयोग किया है - मुझे लगता है कि यह ScintillaNET था।

स्किंटिला कस्टम कीवर्ड हाइलाइटिंग और विभिन्न प्रकार की प्रोग्राम करने योग्य विशेषताओं जैसे कि स्क्विग्ली-लाइन रेखांकन और ऐसी चीजों का समर्थन करता है।


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

4

मैंने सफलतापूर्वक मेरे इसी परियोजना के लिए AvalonEdit का उपयोग किया। मैंने अभी सही वाक्यविन्यास हाइलाइटिंग के साथ एक छोटा संपादक बनाया है।

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

ऐसा लगता है कि मैंने इसका उपयोग करने के बाद से पूर्णता सुविधाओं को जोड़ा, हालांकि मुझे उस हिस्से पर अनुभव नहीं है, लेकिन मुझे संदेह है कि यह गुणवत्ता रंग के समान ही है।