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