बहुत से लोगों को उनके द्वारा प्रतिदिन उपयोग की जाने वाली प्रोग्रामिंग भाषाओं में कठिनाई या निराशा होती है। कुछ चाहते हैं कि चीजों को अधिक सारगर्भित तरीके से संभाला जाए, जबकि अन्य उन सुविधाओं को लागू करने से नापसंद करते हैं जो वे चाहते हैं कि वे 'मानक' हों। चाहे आप एक आईटी पेशेवर हों या सिर्फ एक शौकिया, कई बार आप खुद को एक नई प्रोग्रामिंग भाषा बनाना चाहते हैं।
कदम
चरण 1. तकनीक से परिचित हों।
यदि आप कंप्यूटर का उपयोग करना नहीं जानते हैं तो आप प्रोग्रामिंग भाषा नहीं बना सकते।
चरण 2. शब्दावली से परिचित हों।
संकलक लेखक अक्सर अपरिचित शब्दावली का प्रयोग करते हैं। आगे बढ़ने से पहले कंपाइलर्स पर पढ़ें। वह सब कुछ जानना सुनिश्चित करें जो आपको जानना आवश्यक है।
चरण 3. तय करें कि आपकी भाषा किस समस्या का समाधान कर रही है।
क्या यह किसी डोमेन-विशिष्ट समस्या को संबोधित कर रहा है, या यह एक सामान्य-उद्देश्य वाली भाषा है?
चरण 4. अपनी भाषा के शब्दार्थ और उसकी अवधारणाओं के बारे में सोचें।
- क्या आप डायरेक्ट पॉइंटर एक्सेस की अनुमति देने जा रहे हैं या नहीं?
- आपकी भाषा के डेटा प्रकार क्या हैं?
- क्या यह एक स्थिर या गतिशील भाषा है?
- आपका मेमोरी मॉडल क्या है? क्या आप कचरा संग्रहकर्ता या मैन्युअल मेमोरी प्रबंधन का उपयोग करने जा रहे हैं? (यदि आप एक कचरा संग्रहकर्ता का उपयोग करते हैं, तो एक लिखने की तैयारी करें या किसी मौजूदा को अपनी भाषा में अनुकूलित करें।)
- समवर्ती को कैसे संभालेंगे? क्या आप एक साधारण थ्रेडिंग/लॉकिंग मॉडल या लिंडा या अभिनेता मॉडल जैसे कुछ और जटिल का उपयोग करने जा रहे हैं? (चूंकि आजकल कंप्यूटर में कई कोर होते हैं।)
- क्या भाषा में आदिम कार्य अंतर्निहित हैं या सब कुछ एक पुस्तकालय से आएगा?
- आपकी भाषा का प्रतिमान या प्रतिमान क्या है? कार्यात्मक? वस्तु के उन्मुख? प्रोटोटाइप (जावास्क्रिप्ट की तरह)? पहलू-उन्मुख? टेम्पलेट उन्मुख? या कुछ बिल्कुल नया?
- आपकी भाषा मौजूदा पुस्तकालयों और भाषाओं (मुख्य रूप से सी) के साथ कैसे इंटरफेस करने जा रही है? यदि आप एक डोमेन-विशिष्ट भाषा बना रहे हैं तो यह बिंदु महत्वपूर्ण है।
- अंत में, इनमें से कुछ सवालों के जवाब दूसरे चरण द्वारा दिए जाने वाले हैं और अगले चरण का उत्तर देने में आपकी सहायता करेंगे।
चरण 5. कुछ विशिष्ट कार्यों के बारे में सोचें जिन्हें कोई आपकी भाषा के साथ करने में सक्षम होना चाहेगा।
उदाहरण के लिए, 'वे एक रोबोट को एक लाइन का अनुसरण करने के लिए निर्देशित करना चाहते हैं' या 'वे इसमें अपेक्षाकृत पोर्टेबल डेस्कटॉप प्रोग्राम बनाना चाहते हैं' या 'वे इसके साथ वेब एप्लिकेशन बनाना चाहते हैं'।
चरण 6. उपरोक्त उदाहरणों के लिए वाक्य रचना विचारों (भाषा का पाठ) के साथ प्रयोग करें।
अपनी भाषा को संदर्भ-मुक्त भाषा श्रेणी या उसके अंदर कुछ रखने के लिए सावधान रहें। आपका पार्सर जनरेटर और आप बाद में इसकी सराहना करेंगे।
चरण 7. वाक्य रचना के लिए एक औपचारिक व्याकरण लिखें।
चरण 8. तय करें कि भाषा की व्याख्या या संकलन किया जाएगा या नहीं।
अर्थ यह है कि व्याख्या की गई दुनिया में आपका उपयोगकर्ता आमतौर पर आपके प्रोग्राम को एक संपादक में संपादित करेगा, और इसे सीधे दुभाषिया पर चलाएगा; संकलित दुनिया में रहते हुए, आपका उपयोगकर्ता आपके प्रोग्राम को संपादित करेगा, इसे संकलित करेगा, परिणामी निष्पादन योग्य को कहीं सेव करेगा और इसे चलाएगा।
चरण 9. फ्रंट एंड स्कैनर और पार्सर लिखें या कोई ऐसा टूल खोजें जो इसमें आपकी मदद करे।
साथ ही, इस बारे में सोचें कि आपका कंपाइलर/दुभाषिया आपके उपयोगकर्ता को गलत प्रोग्राम और सिंटैक्स त्रुटियों के बारे में कैसे चेतावनी देगा।
चरण 10. ऑब्जेक्ट कोड या मध्यवर्ती प्रतिनिधित्व लिखने के लिए पार्सर जानकारी का उपयोग करें।
पार्सर को एएसटी बनाने के लिए कहें, फिर तीन एड्रेस कोड या उसके बड़े भाई एसएसए का उपयोग करके एएसटी से अपना ऑब्जेक्ट कोड बनाएं, फिर अपने कार्यों, वैश्विक चर आदि को परिभाषित करने के लिए एक प्रतीक तालिका बनाएं।
साथ ही, आपकी भाषा के आधार पर, आप अपनी कक्षाओं के लिए वर्चुअल पॉइंटर टेबल या सूचना टेबल भी बना सकते हैं (प्रतिबिंब या आरटीटीआई का समर्थन करने के लिए)।
चरण 11. निष्पादक या कोड जनरेटर लिखें जो सब कुछ एक साथ बांध देगा।
चरण 12. भाषा का परीक्षण करने के लिए कई परीक्षण कार्यक्रम लिखें।
आप ऐसे प्रोग्राम बनाना चाहते हैं जो आपके औपचारिक व्याकरण के बोझ पर जोर देते हैं ताकि यह देखने के लिए कि आपका कंपाइलर आपकी परिभाषा के अंदर जो कुछ भी है उसे स्वीकार करता है और जो कुछ भी इसके बाहर है उसे अस्वीकार कर देता है।
चरण 13. विचार करें कि उपयोगकर्ता अपने स्वयं के कार्यक्रमों को कैसे डिबग करेगा।
चरण 14. यदि आपकी भाषा एक मानक पुस्तकालय का उपयोग करती है, तो आप इसे लिखना चाहेंगे।
एक कचरा संग्रहकर्ता या अन्य रनटाइम सुविधाओं के साथ यदि आपको इसकी आवश्यकता है।
विशेष रूप से, यदि आप एक कंपाइलर लिखते हैं, तो आपको उस कोड की आवश्यकता होगी जिसे ऑपरेटिंग सिस्टम उपयोगकर्ता कोड को चलाने के लिए निष्पादित करेगा (उदाहरण के लिए, सभी वैश्विक चर आवंटित करना)।
चरण १५. अपनी भाषा, इसके विनिर्देशों के साथ और इसमें आप क्या कर सकते हैं इसके कुछ उदाहरण प्रकाशित करें।
दस्तावेज़ करना न भूलें कि आप मौजूदा पुस्तकालयों, भाषाओं और रनटाइम सुविधाओं और/या मानक पुस्तकालय का उपयोग कैसे कर सकते हैं।
वीडियो - इस सेवा का उपयोग करके, कुछ जानकारी YouTube के साथ साझा की जा सकती है।
टिप्स
- अपनी भाषा डिज़ाइन करके प्रारंभ करें और तब तक कोई कोड न लिखें, जब तक कि आप संतुष्ट न हों और अपने डिज़ाइन से संबंधित सभी (या अधिकांश) प्रश्नों या समस्याओं का उत्तर दे दें क्योंकि डिज़ाइन को बाद में बदलने से पहले बदलना आसान है।
- अपने कंपाइलर/दुभाषिया के लिए अपने लक्षित प्लेटफॉर्म (ऑपरेटिंग सिस्टम और पुस्तकालयों) को जानें, आखिरकार, आप इसका उपयोग करने जा रहे हैं और इसमें हेरफेर करेंगे।
चेतावनी
- सोचें कि क्या आपको वास्तव में एक नई भाषा की आवश्यकता है, और आपकी भाषा में ऐसी क्या नई भाषा है जो अन्य भाषाओं में नहीं है (यह सुविधाओं का संयोजन या एक विशेषता हो सकती है)।
- यदि आप नहीं जानते कि आप क्या कर रहे हैं तो भाषाएं लिखना मुश्किल है। इसके लिए बहुत अभ्यास भी करना पड़ता है।
- भाषा डिज़ाइन में कुछ समय बिताने की तैयारी करें, क्योंकि एक बार कंपाइलर लिखने और डिज़ाइन बिंदु को पार करने के बाद आपको अपनी भाषा बदलने का मौका नहीं मिलेगा।
- अपनी विशेषताओं को कई भाषाओं के संघ में आधार बनाने की कोशिश न करें, जैसे कि यह कहना कि आपकी भाषा भाषा X, भाषा Y और भाषा Z का मिलन होगी। इतिहास ने हमें दिखाया है कि इस तरह से बनाई गई भाषाओं को कभी सफलता नहीं मिलेगी, या हर कोई C पर आधारित किसी चीज़ के बजाय PL/1 प्रोग्रामिंग कर रहा होगा।