यदि " एक्स और वाई की अलग-अलग परिभाषाओं का उपयोग किया जाता है, तो" एक्स ए वाई " प्रकार के प्रश्नों का उत्तर देना मुश्किल है । यह हो सकता है कि कुछ परिभाषाओं के लिए, उत्तर "हां" है, और कुछ परिभाषाओं के लिए उत्तर "नहीं" है। खासकर यदि उत्तर तकनीकी विवरण पर निर्भर करता है जहां विभिन्न परिभाषाएं भिन्न होती हैं। इसके अलावा इस चर्चा में कुछ गलत जानकारी है, इसलिए कृपया लंबे उत्तर के साथ धैर्य रखें।
" प्रोग्रामिंग भाषा " से हमारा क्या तात्पर्य है ?
एक सरल जवाब "प्रोग्राम बनाने के लिए इस्तेमाल की जाने वाली भाषा" हो सकता है। ज़रूर, लेकिन: किस तरह के कार्यक्रम? उस भाषा के बारे में क्या जो कुछ प्रकार के कार्यक्रमों को बनाने के लिए इस्तेमाल की जा सकती है , लेकिन अन्य प्रकार के कार्यक्रमों के लिए नहीं? चरम मामलों की व्याख्या करने के लिए यहां दो विशिष्ट उदाहरण दिए गए हैं:
1) एम नामक एक काल्पनिक भाषा इस तरह से काम करती है: यदि कार्यक्रम में एकल अक्षर "एम" शामिल है, तो यह माइन्सवेपर का खेल बनाता है। बाकी सब कुछ एक सिंटैक्स त्रुटि है।
सहज रूप से, यह "प्रोग्रामिंग भाषा" कहने से हमारा तात्पर्य नहीं है । लेकिन एम का विपणन विभाग यह तर्क दे सकता है कि यह तकनीकी रूप से परिभाषा को पूरा करता है, क्योंकि इसका उपयोग प्रोग्राम बनाने के लिए किया जा सकता है। यकीन है, संकलक आपके लिए कुछ महत्वपूर्ण भागों को करता है, लेकिन यह है कि संकलक क्या करते हैं, नहीं? C भाषा का एक कंपाइलर भी कुछ सरल शब्दों को दर्जनों प्रोसेसर निर्देशों में तब्दील करता है। एम कंपाइलर अभी और आगे बढ़ता है और आपके काम को और भी सरल बना देता है।
2) यदि आप प्रसिद्ध टर्बो पास्कल के मूल संस्करण को स्थापित करते हैं, तो आप कई प्रकार के कार्यक्रम लिख सकते हैं। लेकिन आप वेब ब्राउज़र में चलने वाला गेम नहीं लिख सकते, क्योंकि आवश्यक एपीआई बस वहां नहीं है।
तो क्या वास्तव में वह चीज़ है जो टर्बो पास्कल को एक प्रोग्रामिंग भाषा बनाती है, लेकिन एम के पास नहीं है? सीधे शब्दों में, आप पास्कल में एम की तुलना में अधिक कर सकते हैं । लेकिन कल्पना करें कि हमारे पास एक एमनेट है, जो एक वेब ब्राउज़र में चलने वाला माइन्सवीपर गेम बनाता है। तो अब हमारे पास कुछ ऐसा है जो पास्कल कर सकता है और एमनेट नहीं कर सकता है, लेकिन हमारे पास कुछ ऐसा भी है जो एमनेट कर सकता है और पास्कल नहीं कर सकता है। हमें पास्कल के फायदे, और एमनेट अप्रासंगिक के लाभों पर विचार क्यों करना चाहिए?
इसका उत्तर यह है कि आप पास्कल में सभी प्रकार के एल्गोरिदम लिख सकते हैं, लेकिन आप एम या एमनेट में एल्गोरिदम नहीं लिख सकते । ज़रूर, एम आपके कमांड "एम" को संकलित करता है, और सी आपके कमांड "स्ट्रैम्प" को संकलित करता है। लेकिन आप "स्ट्रैम्प" को एक बड़े संदर्भ में रख सकते हैं, उदाहरण के लिए लाइन द्वारा दो फाइलों की लाइन की तुलना करें, या हजार स्ट्रिंग्स को पढ़ें और उन्हें वर्णानुक्रम में, या ... अच्छी तरह से, लाखों अन्य चीजों को सॉर्ट करें। और यह किसी भी एल्गोरिथ्म में दिए गए आदेशों का उपयोग करने की क्षमता है जो प्रोग्रामिंग भाषा का सार बनाता है।
वास्तव में एक एल्गोरिथ्म क्या है, और इससे भी महत्वपूर्ण बात यह है कि "कोई भी एल्गोरिथ्म" क्या है? कंप्यूटर विज्ञान में हम ट्यूरिंग-पूर्ण शब्द का उपयोग करते हैं । विचार यह है कि कंप्यूटर भाषाओं का एक सेट है, जहां उनमें से प्रत्येक उन सभी को अनुकरण करने में सक्षम है । उन भाषाओं में से एक ट्यूरिंग मशीन है, यही वजह है कि उन्हें ऐसा कहा जाता है। पास्कल है, सी है, जावा है, पाइथन है, लिस्प है, स्मालटाक है, एक्सएसएलटी भी है। हमारे काल्पनिक एम और एमनेट नहीं हैं। आप किसी भी विश्वविद्यालय में एक सभ्य कंप्यूटर विज्ञान पाठ्यक्रम प्रदान करने के बारे में अधिक जान सकते हैं, लेकिन विचार यह है कि ट्यूरिंग-पूर्ण भाषा कुछ भी नहीं कर सकती हैयदि आप उन्हें न्यूनतम आवश्यक एपीआई देते हैं, तो एक और ट्यूरिंग-पूर्ण भाषा कर सकती है। (यदि आप पास्कल को कुछ वेब-ब्राउज़र एपीआई देते हैं, तो आप वेब ब्राउज़र में सभी प्रकार के गेम बना सकते हैं। यदि आप एम को वेब-ब्राउज़र एपीआई देते हैं, तो आप अभी भी केवल माइनस्वीपर बनाने में सक्षम हैं।) हम रूपक से कह सकते हैं। आप एक प्रोग्रामिंग भाषा से सभी एपीआई को हटाते हैं, जो महत्वपूर्ण सामान है।
" नियमित अभिव्यक्ति " से हमारा क्या तात्पर्य है ?
विभिन्न प्रोग्रामिंग भाषाएं उन्हें थोड़ा अलग तरीके से लागू करती हैं। लेकिन मूल विचार यह था कि नियमित अभिव्यक्ति तथाकथित नियमित भाषाओं को व्यक्त करती है । ध्यान दें कि हम यहां प्रोग्रामिंग भाषाओं के बारे में नहीं बोलते हैं, लेकिन मानव भाषाओं के बारे में (छद्म-)। कल्पना कीजिए कि आपको कुछ विदेशी जनजाति बोलने वाली भाषा लगती है जिसमें केवल "बा", "बाबा", "बाबा" और इतने ही शब्द हैं। आप इस भाषा का मौखिक रूप से वर्णन कर सकते हैं "एक शब्दांश 'बा' एक या अधिक बार दोहराया" या "(बा) +" के रूप में एक नियमित अभिव्यक्ति का उपयोग कर।
नियमित अभिव्यक्तियों को व्यक्त करना चाहिए: "कुछ भी नहीं", "यह पत्र", "यह, उसके बाद", "यह या वह", "यह, एक या अधिक बार दोहराया", और "यह नहीं"। - वह गणितीय परिभाषा है। और कुछ भी पिछले घटकों से निर्मित एक सुविधाजनक शॉर्टकट है। उदाहरण के लिए "इसे दोहराया, दो या तीन बार" का अनुवाद "इस" के रूप में किया जा सकता है, इसके बाद, इसके बाद (यह या कुछ भी नहीं) ", लेकिन" बा {2,3} "लिखने के लिए" बाबा की तुलना में अधिक सुविधाजनक हो सकता है। (बी 0 ए)?"।
वास्तविक जीवन में, "नियमित अभिव्यक्तियों" का एक विशिष्ट कार्यान्वयन इससे अधिक लागू होता है। उदाहरण के लिए, गणितीय परिभाषा है, और "ए.बी.ए.", "aabaa", "aaabaaa" की एक भाषा इतने पर का उपयोग कर - "एक" एस के किसी भी संख्या, एक "बी" के बाद, जिसके बाद ही "एक की संख्या "s - एक नियमित भाषा नहीं है। हालांकि, आज उपयोग किए जाने वाले कई "नियमित अभिव्यक्तियाँ", "इससे पहले कि हम एक ही चीज़" का अतिरिक्त अवधारणा का उपयोग करते हुए, इसे "(a +) b \ 1" के रूप में लिखा गया है, का पता लगा सकते हैं। इस अतिरिक्त अवधारणा का उपयोग करते हुए, हम कुछ शांत चीजें कर सकते हैं, उदाहरण के लिए अक्षरों की प्रमुख संख्या से मिलकर शब्दों का पता लगा सकते हैं । फिर भी, हम कोई एल्गोरिथ्म नहीं कर सकते ... स्पष्टीकरण के लिए क्यों,
इसलिए, मूल विषय पर वापस: नियमित अभिव्यक्तियाँ हैं (या तो इस प्रकार परिभाषित की गई हैं: चॉम्स्की पदानुक्रम में नियमित भाषाओं का वर्णन करने वाले भाव? या जैसे: पूर्व, प्लस 1 ऑपरेशन) एक प्रोग्रामिंग भाषा (परिभाषित: ट्यूरिंग-पूर्ण)? जवाब है नहीं । नहीं, आप नियमित भावों का उपयोग करके किसी भी एल्गोरिथ्म को लागू नहीं कर सकते हैं , और किसी भी एल्गोरिथ्म को लागू करने की क्षमता वह है जो कंप्यूटर विज्ञान का अध्ययन करने वाले लोग आमतौर पर प्रोग्रामिंग भाषा के सार के रूप में समझते हैं।
बेशक, कोई भी एक अलग परिभाषा पर जोर देकर जवाब बदल सकता है । जैसा कि मैंने शुरुआत में लिखा था, तकनीकी विवरण यहाँ महत्वपूर्ण हैं। यदि आप उन्हें गलत पाते हैं, तो आपको गलत जवाब मिलता है।
और यदि आप तकनीकी विवरणों में रुचि नहीं रखते हैं , तो उत्तर हो सकता है: क्या आप कार्यक्रम बनाने के लिए नियमित अभिव्यक्ति (और कुछ नहीं) का उपयोग कर सकते हैं? नहीं, तो इसे प्रोग्रामिंग भाषा क्यों कहें? (हालांकि, इस तरह का उत्तर डाउनलोड किया गया और यहां हटा दिया गया, यही वजह है कि मैंने यह लंबा संस्करण लिखा।)
संपादित करें: इसके अलावा, कोई भी कुछ नए सुविधाओं के साथ "नियमित अभिव्यक्ति" के अपने नए संस्करण को लागू करने वाला एक पुस्तकालय बना सकता है। कुछ समय में, नई सुविधाएँ पूरे सिस्टम के लिए ट्यूरिंग-पूर्ण बनने के लिए पर्याप्त हो सकती हैं। एक तुच्छ उदाहरण कुछ नए वाक्यविन्यास का उपयोग करके ट्यूरिंग-पूर्ण भाषा को एम्बेड करना होगा; लेकिन यह कम स्पष्ट रूप से भी हो सकता है। शायद यह पहले से ही हुआ है।