आप लेखन स्टैंड-अलोन DSLs में देख रहे हैं, तो आप इमारत compilers में देख रहे हैं - यह चारों ओर कोई रास्ता नहीं। कंपाइलर निर्माण आवश्यक प्रोग्रामिंग ज्ञान है, और यह वास्तव में सामान्य रूप से सोचा मुश्किल नहीं है। स्टीव येगेज Righ Programmer Food यह जानने के मूल्य को सारांशित करता है कि कंपाइलर्स को अच्छी तरह से कैसे बनाया जाए।
शुरू करने के कई तरीके हैं। मैं लेख में उल्लिखित 2 पेपरों की जांच करने की सलाह देता हूं: Want to write a compiler? Just read these Two papers। पहला, Let's build a compiler, बहुत ही सुलभ है। यह टर्बो पास्कल को कार्यान्वयन भाषा के रूप में उपयोग करता है, लेकिन आप इसे किसी अन्य भाषा में आसानी से कार्यान्वित कर सकते हैं - स्रोत कोड बहुत स्पष्ट है। पास्कल एक साधारण भाषा है।
एक बार जब आप और कैसे चीजें काम के लिए एक अच्छा लग रहा है शब्दावली शामिल मिलता है, मैं ANTLR की तरह कुछ में जाने पर सलाह देते हैं। एएनटीएलआर में एक अच्छा आईडीई है, ANTLRWorks, जो एक दुभाषिया और एक डीबगर के साथ आता है। यह फ्लाई पर आपके व्याकरण की वास्तव में वास्तव में अच्छी विज़ुअलाइज़ेशन भी बनाता है। मैंने इसे सीखने में अमूल्य पाया।
एएनटीएलआर में कई अच्छे ट्यूटोरियल हैं, हालांकि वे पहले थोड़ा सा भारी हो सकते हैं। This one अच्छा है, हालांकि यह एएनटीएलआर 2.0 के खिलाफ है, इसलिए आप हालिया संस्करण (वर्तमान में नवीनतम 3.1) के साथ असंगतताओं में भाग ले सकते हैं।
अंत में, डीएसएल के लिए एक और दृष्टिकोण है: लिस्प दृष्टिकोण। लिस्प के वाक्यविन्यास-कम प्रकृति को देखते हुए (आपका कोड मूल रूप से अमूर्त वाक्यविन्यास पेड़ है), आप अंतहीन भाषाओं को आकार दे सकते हैं, बशर्ते आप कोष्ठक में उपयोग किया जाए :)।
यदि आप उस दृष्टिकोण के साथ जाते हैं, तो आप एक एम्बेड करने योग्य लिस्प का उपयोग करना चाहते हैं। जावा के तहत, आपके पास Clojure है, जो एक लिस्प बोली है जो JVM और इसकी पुस्तकालयों के साथ निष्पक्ष रूप से इंटरऑपरेट करती है। मैंने इसे व्यक्तिगत रूप से उपयोग नहीं किया है, लेकिन यह अच्छा लग रहा है।योजना के लिए, जीएनयू Guile है, जो licensed under LGPL है। सामान्य लिस्प के लिए, एलजीपीएल के तहत ECL भी है। दोनों इंटरऑपरेबिलिटी के लिए सी इंटरफ़ेस का उपयोग करते हैं, ताकि आप उन्हें किसी अन्य भाषा में बहुत अधिक एम्बेड कर सकें। ईसीएल लिस्पस के बीच अद्वितीय है जिसमें प्रत्येक लिस्प फ़ंक्शन को सी फ़ंक्शन के रूप में कार्यान्वित किया जाता है, ताकि आप सी में लिस्प कोड लिख सकें (अगर आप अपने एक्सटेंशन विधियों के अंदर (कहना चाहते हैं कि आप सी फ़ंक्शन बना सकते हैं जो लिस्प ऑब्जेक्ट्स पर काम करते हैं, और फिर उन्हें लिस्प से बुलाओ)। मैं थोड़ी देर के लिए मेरी साइड-प्रोजेक्ट के लिए ईसीएल का उपयोग कर रहा हूं, और मुझे यह पसंद है। रखरखाव काफी सक्रिय और उत्तरदायी है।
नोट: मैं जरूरी नहीं है कि यहां ट्यूरिंग पूर्णता की तलाश भी हो। मेरे मॉडल में चीजों को कॉन्फ़िगर करने के लिए ज्यादातर अभिव्यक्ति वाक्यविन्यास। – chadmyers