क्या आपको प्रोग्रामिंग भाषाएं अद्भुत लेकिन रहस्यमय उपकरण लगती हैं? क्या होगा यदि आपको उनके हुड के नीचे झांकने और समझने का अवसर दिया जाए कि उन्हें क्या कार्य करता है? यदि आप अपने हाथों को गंदा करने और खरोंच से प्रोग्रामिंग भाषा विकसित करने की संभावना में रुचि रखते हैं, तो यह ब्लॉग पोस्ट और इस श्रृंखला में निम्नलिखित पोस्ट सहायक होंगे।
लेखों की एक श्रृंखला में, हम चरण-दर-चरण एक बहुत ही सरल व्याख्या की गई, गतिशील रूप से टाइप की गई प्रोग्रामिंग भाषा का निर्माण करेंगे। हालाँकि, अभी के लिए, चिंता न करें यदि आप इन शब्दों के सटीक अर्थ के बारे में थोड़ा अनिश्चित हैं या हाथ में काम से थोड़ा भयभीत महसूस कर रहे हैं। हम दुभाषिया को लागू करने के लिए प्यारी रूबी प्रोग्रामिंग भाषा का उपयोग करेंगे और यह सुनिश्चित करने के लिए प्रत्येक चरण को स्पष्ट रूप से समझाएंगे कि नौसिखिए और उन्नत डेवलपर्स दोनों साथ-साथ चल सकें। हम इस नाम से जाने जाने वाले एक प्यारे दक्षिण अफ़्रीकी शहद बेजर को श्रद्धांजलि में इस भाषा को 'स्टॉफ़ल' नाम दे रहे हैं।
प्रोग्रामिंग भाषा क्यों बनाएं?
स्टॉफ़ल शायद कभी भी पायथन या रूबी की जगह नहीं लेगा। तो, इसे विकसित करने से परेशान क्यों? मजेदार होने के अलावा, मैं इस श्रृंखला में जो दिखाने की आशा करता हूं वह यह है कि भाषा का निर्माण एक महान प्रोग्रामिंग अभ्यास है। इस अनुभव से अनेक लाभ प्राप्त किए जा सकते हैं:
-
यह प्रोग्रामिंग भाषाओं का रहस्योद्घाटन करता है (और डेवलपर टूल, प्रॉक्सी द्वारा) और हमें खुद को न केवल इन उपकरणों के उपभोक्ताओं के रूप में देखने की अनुमति देता है, बल्कि ऐसे निर्माता के रूप में भी देखता है जो जरूरत या इच्छा के अनुसार खुद को तैयार करने में सक्षम हैं;
-
यह अभ्यास कुछ असामान्य प्रोग्रामिंग चुनौतियां प्रस्तुत करेगा जिसका सामना हम में से अधिकांश अपने दैनिक जीवन में कभी नहीं करते;
-
हम उन घटकों के बारे में भी जानेंगे जो प्रोग्रामिंग भाषा कार्यान्वयन के दायरे से बाहर उपयोगी हैं . इससे निपटने के लिए लाखों गुप्त नियमित अभिव्यक्तियों के बजाय एक पार्सर का उपयोग किया जा सकता है, उदाहरण के लिए, आपके बॉस द्वारा बताई गई समस्यात्मक विरासत पाठ फ़ाइल को अब आपके द्वारा काम किए जाने वाले सिस्टम में डेटा आयात करने के लिए एक नए तंत्र के रूप में समर्थित होना चाहिए।
प्रोग्रामिंग भाषा कैसे काम करती है?
इस परियोजना में हमारे आगे क्या है, इस पर एक नज़र डालने से पहले, आइए पहले ज़ूम आउट करें और समझें कि कंप्यूटर पर प्रोग्राम कैसे चलता है। जैसा कि आप कल्पना कर सकते हैं, एक सीपीयू सीधे रूबी जैसी उच्च-स्तरीय भाषा का समर्थन नहीं करता है। हालाँकि, CPU के पास बहुत निम्न-स्तरीय निर्देशों की एक श्रृंखला होती है जो वे अपने आर्किटेक्चर के आधार पर समर्थन करते हैं।
<ब्लॉकक्वॉट>यदि आप उत्सुक हैं, उदाहरण के लिए, x86 आर्किटेक्चर पर शोध करें, जो आपके पीसी या मैक पर इस लेख को पढ़ने पर आपके कंप्यूटर को शक्ति प्रदान करता है।
तो, एक प्रोग्रामिंग भाषा का कार्य उसके उच्च-स्तरीय कोड को मशीन कोड में बदलना है जिसे CPU समझता है। इस कार्य को पूरा करने के लिए कई रणनीतियों का उपयोग किया जाता है। स्टॉफ़ल एक व्याख्या की गई भाषा होगी, जिसका अर्थ है कि प्रोग्राम के चलने के दौरान दुभाषिया स्टॉफ़ल के स्रोत कोड का मशीन कोड में अनुवाद करेगा।
संकलित भाषाएं, जैसे सी, एक अलग जानवर हैं। उनके पास एक संकलन चरण है जो लक्ष्य सीपीयू द्वारा निष्पादित करने के लिए तैयार बाइनरी (यानी, मशीन कोड में परिवर्तित स्रोत) का अनुवाद और उत्पादन करता है। एक अन्य रणनीति एक स्रोत फ़ाइल को दूसरी (अक्सर, उच्च-स्तरीय) भाषा में संकलित करना है जो पहले से मौजूद है; इस रणनीति को आमतौर पर 'ट्रांसपिलेशन' के रूप में जाना जाता है।
हालांकि, ध्यान रखें कि वास्तविक दुनिया की भाषाओं के साथ व्यवहार करते समय चीजें उतनी स्पष्ट नहीं होती हैं। वे आम तौर पर, एक तरह से या किसी अन्य, इन सभी (और अन्य) विभिन्न कार्यान्वयन रणनीतियों के पहलुओं और तकनीकों को गले लगाते हैं। मैं आपको इस बारे में अधिक शोध करने के लिए प्रोत्साहित करता हूं कि बुनियादी बातों को शामिल करने के बाद आपकी पसंदीदा भाषा किस पथ का अनुसरण करती है।
एक बर्ड्स-आई व्यू ऑफ़ स्टॉफ़ल
जैसा कि पहले उल्लेख किया गया है, स्टॉफ़ल एक प्राथमिक, व्याख्या की गई, गतिशील रूप से टाइप की गई प्रोग्रामिंग भाषा होगी। इसमें केवल कुछ बुनियादी डेटा प्रकार, चार प्राथमिक अंकगणितीय ऑपरेटर, तुलना और समानता, तार्किक ऑपरेटर, यदि / अन्य, जबकि लूप, फ़ंक्शन और कंसोल पर प्रिंट करने की क्षमता शामिल होगी।
<ब्लॉकक्वॉट>ट्रिविया:स्टॉफ़ल जैसी भाषाएं जिनका प्राथमिक उद्देश्य सीखना और प्रयोग करना है, उन्हें अक्सर खिलौना भाषा कहा जाता है ।
जैसा कि पहले उल्लेख किया गया है, स्टॉफ़ल का दुभाषिया हमारे विश्वसनीय और प्रिय रूबी का उपयोग करके लागू किया जाएगा। जब हम अपने दुभाषिया को सक्रिय करते हैं (stoffle hello_world.sfe
), चलने से पहले हमारी स्रोत फ़ाइल के घटक और चरण इस प्रकार हैं:
हमारे दुभाषिया के हिस्से और .sfe फ़ाइल चलाने पर क्या होता है।
लेक्सर
एक स्कैनर के रूप में भी जाना जाता है, लेक्सर का मिशन वर्णों की एक सादे स्ट्रिंग को समझदार समूहों में परिवर्तित करना है जिसे आम तौर पर 'टोकन' कहा जाता है। कल्पना कीजिए कि हम my_var.
. नामक एक वैरिएबल घोषित करते हैं हमारा लेक्सर इन अक्षरों को पढ़ेगा और एक Token::VARIABLE
तैयार करेगा टोकन।
पार्सर
जब हम सोर्स कोड के बारे में सोचते हैं, तो इसकी नेस्टेड प्रकृति निर्विवाद है। उदाहरण के लिए, एक सशर्त अभिव्यक्ति पर विचार करें; इसकी सच्ची और झूठी शाखाओं को स्थिति के मूल्यांकन के परिणाम के आधार पर नेस्टेड और निष्पादित किया जाता है।
पार्सर का मुख्य काम टोकन के एक फ्लैट अनुक्रम को डेटा संरचना में बदलना है जो उनके बीच मौजूदा संबंधों का प्रतिनिधित्व कर सकता है। पार्सर का एक अन्य महत्वपूर्ण कार्य हमें यह बताना है कि सिंटैक्स त्रुटियों की रिपोर्ट करके हमने कब गड़बड़ी की है।
दुभाषिया
स्टॉफ़ल का दुभाषिया सरल होगा और सीधे पार्सर द्वारा निर्मित डेटा संरचना के साथ काम करेगा। दुभाषिया इस संरचना का टुकड़े-टुकड़े विश्लेषण करेगा और जैसे-जैसे आगे बढ़ेगा इसे निष्पादित करेगा।
स्टॉफ़ल प्रोग्रामिंग भाषा में, मशीन कोड में रूपांतरण होने जा रहा है क्योंकि दुभाषिया स्वयं रूबी प्रोग्राम होने जा रहा है (और इसलिए रूबी के दुभाषिया द्वारा व्याख्या की जा सकती है क्योंकि हम इसे चलाते हैं!)।
रैपिंग अप
आज के लेख में, हमने स्टॉफ़ल को जीवंत करने के लिए उठाए जाने वाले कदमों का एक संक्षिप्त विवरण प्रस्तुत किया है। मुझे उम्मीद है कि आप भी उतने ही उत्साहित हैं जितना मैं हूं और मैं आप में से उन लोगों में विश्वास जगाने में सक्षम था जिन्होंने शुरू में सोचा था कि प्रोग्रामिंग भाषा को लागू करना केवल नश्वर लोगों की पहुंच से बाहर है।
इस श्रृंखला में अगले ब्लॉग पोस्ट में, हम स्टॉफ़ल के लेक्सर को लागू करके अपने हाथों को गंदा करना शुरू कर देंगे, जिसका अर्थ है कि अगली पोस्ट के अंत तक, हम एक रूबी प्रोग्राम विकसित कर लेंगे जो स्टॉफ़ल स्रोत कोड को पढ़ने और एक को बदलने में सक्षम है। टोकन के अधिक संरचित (और दिलचस्प!) अनुक्रम में वर्णों के ब्लैंड अनुक्रम।
इस श्रृंखला की अगली किस्त में जल्द ही मिलते हैं!