Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

रूबी में अपनी खुद की टॉय लैंग्वेज बनाएं: एक चरण-दर-चरण गाइड

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

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

प्रोग्रामिंग भाषा क्यों बनाएं?

स्टॉफल शायद कभी पायथन या रूबी की जगह नहीं लेगा। तो, इसे विकसित करने की जहमत क्यों उठाएं? मज़ेदार होने के अलावा, मुझे उम्मीद है कि इस श्रृंखला में दिखाऊंगा कि एक भाषा बनाना एक बेहतरीन प्रोग्रामिंग अभ्यास है। इस अनुभव से कई लाभ प्राप्त किए जा सकते हैं:

  • यह प्रोग्रामिंग भाषाओं को रहस्यमय बनाना बंद करता है (और डेवलपर टूल्स, प्रॉक्सी द्वारा) और हमें खुद को न केवल इन उपकरणों के उपभोक्ताओं के रूप में बल्कि रचनाकारों के रूप में भी देखने की अनुमति देता है जो जरूरतों या इच्छाओं के अनुसार अपने स्वयं के उपकरण बनाने में सक्षम हैं;

  • यह अभ्यास कुछ असामान्य प्रोग्रामिंग चुनौतियों को प्रस्तुत करेगा जिनका हम में से अधिकांश अपने दैनिक जीवन में कभी सामना नहीं करते;

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

प्रोग्रामिंग भाषा कैसे काम करती है

इस प्रोजेक्ट में हमारे आगे क्या है, इसे देखने से पहले, आइए पहले ज़ूम आउट करें और समझें कि एक प्रोग्राम कंप्यूटर पर कैसे चलता है। जैसा कि आप कल्पना कर सकते हैं, एक CPU सीधे रूबी जैसी हाई-लेवल भाषा का समर्थन नहीं करता है। CPUs के पास, हालांकि, बहुत लो-लेवल निर्देशों की एक श्रृंखला होती है जो वे उनकी आर्किटेक्चर के आधार पर समर्थन करते हैं।

यदि आप उत्सुक हैं, तो शोध करें, उदाहरण के लिए, x86 आर्किटेक्चर, जो बहुत संभावना है कि आपके कंप्यूटर को शक्ति प्रदान करता है यदि आप इस लेख को पीसी या मैक पर पढ़ रहे हैं।

तो, एक प्रोग्रामिंग भाषा का कार्य अपने हाई-लेवल कोड को मशीन कोड में बदलना है जिसे CPU समझता है। इस कार्य को पूरा करने के लिए कई रणनीतियों का उपयोग किया जाता है। स्टॉफल एक इंटरप्रेटेड भाषा होगी, जिसका अर्थ है कि इंटरप्रेटर प्रोग्राम चलने के दौरान स्टॉफल के सोर्स कोड को मशीन कोड में अनुवाद करेगा।

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

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

स्टॉफल का एक विहंगम दृश्य

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

ट्रिविया: स्टॉफल के समान भाषाएं जिनका प्राथमिक उद्देश्य सीखना और प्रयोग करना है, उन्हें अक्सर टॉय लैंग्वेजेज कहा जाता है।

स्टॉफल का इंटरप्रेटर हमारे भरोसेमंद और प्रिय रूबी का उपयोग करके लागू किया जाएगा, जैसा कि पहले उल्लेख किया गया है। जब हम अपना इंटरप्रेटर चलाते हैं (stoffle hello_world.sfe), तो हमारे सोर्स फाइल के माध्यम से चलने से पहले घटक और चरण निम्नानुसार हैं:

रूबी में अपनी खुद की टॉय लैंग्वेज बनाएं: एक चरण-दर-चरण गाइड

हमारे इंटरप्रेटर के भाग और जब एक .sfe फाइल चलती है तो क्या होता है।

लेक्सर

स्कैनर के रूप में भी जाना जाता है, लेक्सर का मिशन सादे वर्णों की एक स्ट्रिंग को आमतौर पर 'टोकन्स' कहे जाने वाले समझदार समूहों में बदलना है। कल्पना करें कि हम my_var नामक एक वेरिएबल घोषित करते हैं। हमारा लेक्सर इन वर्णों को पढ़ेगा और एक Token::VARIABLE टोकन उत्पन्न करेगा।

पार्सर

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

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

इंटरप्रेटर

स्टॉफल का इंटरप्रेटर सरल होगा और पार्सर द्वारा उत्पादित डेटा संरचना के साथ सीधे काम करेगा। इंटरप्रेटर इस संरचना का टुकड़ा-दर-टुकड़ा विश्लेषण करेगा और इसे जाते समय निष्पादित करेगा।

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

समापन

आज के लेख में, हमने स्टॉफल को जीवन में लाने के लिए हम जो कदम उठाएंगे, उनका एक मोटा अवलोकन प्रस्तुत किया। मुझे आशा है कि आप मेरे जितने उत्साहित हैं और मैं उन लोगों में आत्मविश्वास भरने में सक्षम था जिन्होंने शुरू में सोचा था कि एक प्रोग्रामिंग भाषा को लागू करना केवल नश्वर लोगों की पहुंच से बाहर है।

इस श्रृंखला में अगले ब्लॉग पोस्ट में, हम स्टॉफल के लेक्सर को लागू करके अपने हाथ गंदे करना शुरू करेंगे, जिसका अर्थ है कि अगले पोस्ट के अंत तक, हम एक रूबी प्रोग्राम विकसित करेंगे जो स्टॉफल सोर्स कोड को पढ़ने और वर्णों के एक नीरस अनुक्रम को टोकन्स के एक अधिक संरचित (और दिलचस्प!) अनुक्रम में बदलने में सक्षम होगा।

इस श्रृंखला की अगली किस्त में जल्द ही मिलते हैं!

  1. Stoffle भाषा के लिए Ruby इंटरप्रेटर बनाना Stoffle भाषा के लिए Ruby इंटरप्रेटर बनाना

    GitHub पर पूर्ण स्रोत Stoffle प्रोग्रामिंग भाषा का एक पूर्ण कार्यान्वयन GitHub पर उपलब्ध है। यदि आपको बग मिलते हैं या आपके कोई प्रश्न हैं तो बेझिझक एक इश्यू खोलें। इस ब्लॉग पोस्ट में, हम Stoffle के लिए इंटरप्रेटर को लागू करना शुरू करने जा रहे हैं, एक खिलौना प्रोग्रामिंग भाषा जिसे पूरी तरह से

  1. रूबी में फंक्शनल प्रोग्रामिंग में महारत: एक पूर्ण गाइड रूबी में फंक्शनल प्रोग्रामिंग में महारत: एक पूर्ण गाइड

    शायद आपने अभी फंक्शनल प्रोग्रामिंग के बारे में सुना है और आपके कुछ सवाल हैं। जैसे… फंक्शनल प्रोग्रामिंग वास्तव में क्या है? यह ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग से कैसे तुलना करता है? क्या आपको रूबी में फंक्शनल प्रोग्रामिंग का उपयोग करना चाहिए? मैं इन सवालों का जवाब दूंगा ताकि आप बेहतर ढंग से समझ सके

  1. रूबी नेटवर्क प्रोग्रामिंग में मास्टर करें: सॉकेट्स के साथ कस्टम क्लाइंट्स और सर्वर्स बनाएं रूबी नेटवर्क प्रोग्रामिंग में मास्टर करें: सॉकेट्स के साथ कस्टम क्लाइंट्स और सर्वर्स बनाएं

    क्या आप रूबी में कस्टम नेटवर्क क्लाइंट्स और सर्वर्स बनाना चाहते हैं? या बस यह समझना चाहते हैं कि यह कैसे काम करता है? तब आपको सॉकेट्स से निपटना होगा। मेरे साथ रूबी नेटवर्क प्रोग्रामिंग के इस दौरे में शामिल हों ताकि मूल बातें सीख सकें, और रूबी का उपयोग करके अन्य सर्वरों और क्लाइंट्स से बात करना शुरू