2009-07-14 3 views
8

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

+0

क्या यह सिंटैक्स हाइलाइट है या आपको उपयोगकर्ता द्वारा दर्ज कोड को निष्पादित करने की आवश्यकता है? –

उत्तर

0

here से:

LINQPad यूआई भीतर घटकों तीसरे पक्ष के के एक नंबर का उपयोग करता है। क्वेरी संपादक एक्टिप्रो के सिंटेक्स एडिटर नियंत्रण (एक बहुत पॉलिश उत्पाद) का उपयोग करता है; "इंटेलिसेन्स" विशेषताएं पर एक्टिप्रो सॉफ़्टवेयर और आईसीएसएचआरपीसीडी ( शार्प डेवलपमेंट प्रोजेक्ट) से पुस्तकालयों के संयोजन पर निर्भर करती हैं।

मैंने उस अंश में उल्लिखित किसी भी उत्पाद का उपयोग नहीं किया है (LINQPad के अलावा - जिसे मैं अत्यधिक अनुशंसा करता हूं!) लेकिन सोचा कि यह शायद आपको सही दिशा में ले जाना शुरू कर सकता है।

8

यह Irony है। चर्चा को पढ़ना सुनिश्चित करें, क्योंकि यह वहां बहुत कुछ चल रहा है। नवंबर से पुरानी रिलीज का उपयोग करें या नवीनतम का उपयोग करें, लेकिन फिर सुनिश्चित करें कि आप समझते हैं कि उस रिलीज में क्या है और क्या नहीं।

ज्यादातर चीजों के लिए, नवंबर रिलीज को अच्छी तरह से काम करना चाहिए (इसे पालतू परियोजना में उपयोग करना)।

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

+0

+1 आयरनी के लिए, परीक्षण के अलावा किसी भी चीज़ के लिए उपयोग नहीं किया गया है, लेकिन एक महान सीसी (कंपाइलर कंपाइलर) जैसा दिखता है। –

+0

मैंने अभिव्यक्ति मूल्यांकन (यानी कैलकुलेटर) के लिए इसका इस्तेमाल किया। यह बहुत अच्छा है, क्योंकि यह चीजों को इतना आसान बनाता है। मुझे यह पसंद है क्योंकि इसे अपने व्याकरण को बनाने के लिए सिर्फ एक और व्याकरण भाषा सीखने की आवश्यकता नहीं है - यह सब सी # में है और लेखक का इरादा रखने वाले चीजों का समर्थन करने के लिए इसमें कोड इंजेक्ट करना आसान है। – OregonGhost

8

यहाँ कुछ चीजें हैं जो आप उपयोग कर विचार करना चाह सकते हैं:

+0

+1 ANLTR। वास्तव में उपयोग करने के लिए वास्तव में अच्छा और बहुत आसान है। – kenny

6

मैं ANTLR, it supports C# रूप में अच्छी तरह जावा, अजगर, सी, आदि आदि के रूप में ANTLR का उपयोग कर के पेशेवरों बहुत अच्छा प्रलेखन (उदाहरण, किताबें, ट्यूटोरियल, आदि) और विस्तृत उपयोग arethe पसंद है।

0

यदि उपयोगकर्ता प्रवेश कर रहा है तो पारंपरिक अभिव्यक्तियों के अनुरूप कोड की एक पंक्ति है, तो आप कुछ घंटों में इसके लिए एक रिकर्सिव वंश पार्सर को हाथ से कोड कर सकते हैं और इसके साथ किया जा सकता है।

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

लेकिन, आप यह है कि ज्यादातर पार्सर जनरेटर आप भाषा आपके द्वारा निर्धारित की एक टुकड़ा पार्स करने के लिए एक अच्छा तरीका प्रदान नहीं करते हैं, लेकिन आप जिस तरह से चारों ओर है कि जड़ व्याकरण नियम को परिभाषित करते हुए उल्लेख करने के लिए हैक कर सकते हैं nonterminals जो "लाइनों" के अनुरूप हैं जिन्हें आप स्वीकार करने के इच्छुक हैं।

-1

मैं QWhale .NET संपादक का उपयोग कर रहा हूं। यह मुफ़्त नहीं है, लेकिन यह काफी अच्छा है।

0

मैं एक रिकर्सिव वंश पार्सर का उपयोग करता हूं जो कि मेरी अपनी भाषा प्रोजेक्ट में सी # में स्क्रैच से लिखा गया पार्सिंग और लेक्सिंग जोड़ता है। मैंने पाया कि यह व्याकरण नियमों को अपेक्षाकृत आसान बना रहा है। here for an example grammar देखें और here for the unit tests देखें।