पहचानकर्ता (कंप्यूटर भाषाएं): Difference between revisions

From Vigyanwiki
No edit summary
Line 3: Line 3:


== शाब्दिक रूप ==
== शाब्दिक रूप ==
कौन से वर्ण अनुक्रम पहचानकर्ता का गठन करते हैं, यह भाषा के [[शाब्दिक व्याकरण]] पर निर्भर करता है। एक सामान्य नियम [[अक्षरांकीय]] अनुक्रम है, अंडरस्कोर की भी अनुमति है (कुछ भाषाओं में, _ की अनुमति नहीं है), और इस शर्त के साथ कि यह एक संख्यात्मक अंक से शुरू नहीं हो सकता है ([[पूर्णांक शाब्दिक]] के साथ भ्रमित होने से बचने के द्वारा लेक्सिकल विश्लेषण को सरल बनाने के लिए) - तो <code>foo, foo1, foo_bar, _foo</code> की अनुमति है, लेकिन <code>1foo</code> नहीं है - यह [[सी (प्रोग्रामिंग भाषा)]] और [[सी ++]], [[पायथन (प्रोग्रामिंग भाषा)]], और कई अन्य भाषाओं के पुराने संस्करणों में उपयोग की जाने वाली परिभाषा है। इन भाषाओं के बाद के संस्करण, कई अन्य आधुनिक भाषाओं के साथ, पहचानकर्ता में कई और [[यूनिकोड]] वर्णों का समर्थन करते हैं। हालाँकि, एक सामान्य प्रतिबंध व्हाट्सएप वर्णों और भाषा संचालकों को अनुमति नहीं देना है; यह टोकननाइजेशन को [[मुक्त रूप भाषा]] | फ्री-फॉर्म और [[संदर्भ मुक्त व्याकरण]] | कॉन्टेक्स्ट-फ्री बनाकर सरल करता है। उदाहरण के लिए, मना करना <code>+</code> बाइनरी ऑपरेशन के रूप में इसके उपयोग के कारण पहचानकर्ताओं में इसका मतलब है <code>a+b</code> और <code>a + b</code> उसी को टोकन किया जा सकता है, जबकि अगर इसकी अनुमति थी, <code>a+b</code> एक पहचानकर्ता होगा, अतिरिक्त नहीं। पहचानकर्ता में व्हाइटस्पेस विशेष रूप से समस्याग्रस्त है, जैसे कि पहचानकर्ताओं में रिक्त स्थान की अनुमति है, फिर एक खंड जैसे <code>if rainy day then 1</code> कानूनी है, के साथ <code>rainy day</code> एक पहचानकर्ता के रूप में, लेकिन इसे टोकन देने के लिए if क्लॉज की स्थिति में होने के वाक्यांश संबंधी संदर्भ की आवश्यकता होती है। हालाँकि, कुछ भाषाएँ पहचानकर्ताओं में रिक्त स्थान की अनुमति देती हैं, जैसे कि [[ALGOL 68]] और कुछ ALGOL संस्करण - उदाहरण के लिए, निम्नलिखित एक मान्य कथन है: <code>'''real''' half pi;</code> जिसे के रूप में दर्ज किया जा सकता है <code>.real. half pi;</code> (कीवर्ड बोल्डफेस में दर्शाए गए हैं, विशेष रूप से स्ट्रॉपिंग (वाक्यविन्यास) के माध्यम से)। ALGOL में यह संभव था क्योंकि खोजशब्दों को वाक्यात्मक रूप से विभेदित किया जाता है, इसलिए टकराव या अस्पष्टता का कोई खतरा नहीं है, रेखा पुनर्निर्माण चरण के दौरान रिक्त स्थान समाप्त हो जाते हैं, और स्रोत को [[स्कैनर रहित पार्सिंग]] के माध्यम से संसाधित किया गया था, इसलिए लेक्सिंग संदर्भ-संवेदनशील हो सकता है।
कौन से वर्ण अनुक्रम पहचानकर्ता का गठन करते हैं, यह भाषा के [[शाब्दिक व्याकरण]] पर निर्भर करता है। एक सामान्य नियम [[अक्षरांकीय]] अनुक्रम है,जो अधोयोजक की भी अनुमति देता है कुछ भाषाओं में,अनुमति नहीं देता है और इस प्रतिबंध के साथ कि यह एक संख्यात्मक अंक से शुरू नहीं हो सकता है [[पूर्णांक शाब्दिक]] के साथ भ्रमित होने से बचने के लिए शिथिलन विश्लेषण को सरल बनाने के लिए - <code>foo, foo1, foo_bar, _foo</code> की अनुमति है, लेकिन <code>1foo</code> नहीं है - यह [[सी (प्रोग्रामिंग भाषा)]] और [[सी ++]], [[पायथन (प्रोग्रामिंग भाषा)]], और कई अन्य भाषाओं के पुराने संस्करणों में उपयोग की जाने वाली परिभाषा है। इन भाषाओं के बाद के संस्करण, कई अन्य आधुनिक भाषाओं के साथ, पहचानकर्ता में कई और [[यूनिकोड]] वर्णों का समर्थन करते हैं। यद्यपि  एक सामान्य प्रतिबंध व्हाट्सएप वर्णों और भाषा संचालकों को अनुमति नहीं देना है; यह टोकननाइजेशन को [[मुक्त रूप भाषा]],मुक्त -फॉर्म और [[संदर्भ मुक्त व्याकरण]], कॉन्टेक्स्ट-मुक्त  बनाकर सरल करता है। उदाहरण के लिए, मना करना <code>+</code> बाइनरी ऑपरेशन के रूप में इसके उपयोग के कारण पहचानकर्ताओं में इसका अर्थ  है <code>a+b</code> और <code>a + b</code> उसी को टोकन किया जा सकता है, जबकि अगर इसकी अनुमति थी, <code>a+b</code> एक पहचानकर्ता होगा, अतिरिक्त नहीं। पहचानकर्ता में व्हाइटस्पेस विशेष रूप से समस्याग्रस्त है, जैसे कि पहचानकर्ताओं में रिक्त स्थान की अनुमति है, फिर एक खंड जैसे <code>if rainy day then 1</code> कानूनी है, के साथ <code>rainy day</code> एक पहचानकर्ता के रूप में, लेकिन इसे टोकन देने के लिए if क्लॉज की स्थिति में होने के वाक्यांश संबंधी संदर्भ की आवश्यकता होती है। यद्यपि  कुछ भाषाएँ पहचानकर्ताओं में रिक्त स्थान की अनुमति देती हैं, जैसे कि [[ALGOL 68|अल्गोल 68]] और कुछ अल्गोल संस्करण - उदाहरण के लिए, निम्नलिखित एक मान्य कथन है: जिसे  <code>'''real''' half pi;</code>के रूप में दर्ज किया जा सकता है <code>.real. half pi;</code> कीवर्ड बोल्डफेस में दर्शाए गए हैं, विशेष रूप से वाक्यविन्यास के माध्यम से। अल्गोल में यह संभव था क्योंकि खोजशब्दों को वाक्यात्मक रूप से विभेदित किया जाता है, इसलिए टकराव या अस्पष्टता का कोई खतरा नहीं है, रेखा पुनर्निर्माण चरण के दौरान रिक्त स्थान समाप्त हो जाते हैं, और स्रोत को [[स्कैनर रहित पार्सिंग]] के माध्यम से संसाधित किया गया था, इसलिए शिथिलन संदर्भ-संवेदनशील हो सकता है।


अधिकांश भाषाओं में, कुछ वर्ण अनुक्रमों में पहचानकर्ता का शाब्दिक रूप होता है लेकिन उन्हें [[कीवर्ड (कंप्यूटर प्रोग्रामिंग)]] के रूप में जाना जाता है - उदाहरण के लिए, <code>if</code> if क्लॉज के लिए अक्सर एक कीवर्ड होता है, लेकिन लेक्सिक रूप से उसी रूप में होता है <code>ig</code> या <code>foo</code> अर्थात् अक्षरों का एक क्रम। इस ओवरलैप को विभिन्न तरीकों से नियंत्रित किया जा सकता है: इन्हें पहचानकर्ता होने से प्रतिबंधित किया जा सकता है - जो टोकननाइज़ेशन और पार्सिंग को सरल करता है - जिस स्थिति में वे आरक्षित शब्द हैं; उन दोनों को अनुमति दी जा सकती है लेकिन अन्य तरीकों से अलग किया जा सकता है, जैसे कि स्ट्रॉपिंग के माध्यम से; या खोजशब्द अनुक्रमों को पहचानकर्ता के रूप में अनुमति दी जा सकती है और किस अर्थ को संदर्भ से निर्धारित किया जाता है, जिसके लिए संदर्भ-संवेदनशील लेक्सर की आवश्यकता होती है। गैर-कीवर्ड भी आरक्षित शब्द हो सकते हैं (पहचानकर्ता के रूप में निषिद्ध), विशेष रूप से आगे की अनुकूलता के लिए, यदि कोई शब्द भविष्य में एक कीवर्ड बन सकता है। कुछ भाषाओं में, जैसे, PL/1, भेद स्पष्ट नहीं है।
अधिकांश भाषाओं में, कुछ वर्ण अनुक्रमों में पहचानकर्ता का शाब्दिक रूप होता है लेकिन उन्हें [[कीवर्ड (कंप्यूटर प्रोग्रामिंग)|कीवर्ड कंप्यूटर प्रोग्रामिंग]] के रूप में जाना जाता है - उदाहरण के लिए, <code>if</code> क्लॉज के लिए अक्सर एक कीवर्ड होता है, लेकिन लेक्सिक रूप से उसी रूप में होता है <code>ig</code> या <code>foo</code> अर्थात् अक्षरों का एक क्रम होता है इस ओवरलैप को विभिन्न तरीकों से नियंत्रित किया जा सकता है: इन्हें पहचानकर्ता होने से प्रतिबंधित किया जा सकता है - जो टोकननाइज़ेशन और पार्सिंग को सरल करता है - जिस स्थिति में वे आरक्षित शब्द हैं; उन दोनों को अनुमति दी जा सकती है लेकिन अन्य तरीकों से अलग किया जा सकता है, जैसे कि स्ट्रॉपिंग के माध्यम से या खोजशब्द अनुक्रमों को पहचानकर्ता के रूप में अनुमति दी जा सकती है और किस अर्थ को संदर्भ से निर्धारित किया जाता है, जिसके लिए संदर्भ-संवेदनशील लेक्सर की आवश्यकता होती है। गैर-कीवर्ड भी आरक्षित शब्द हो सकते हैं विशेष रूप से आगे की अनुकूलता के लिए, यदि कोई शब्द भविष्य में एक कीवर्ड बन सकता है। कुछ भाषाओं में, जैसे, PL/1, भेद स्पष्ट नहीं है।


== शब्दार्थ ==
== शब्दार्थ ==
Line 13: Line 13:
[[प्रतिबिंब (कंप्यूटर प्रोग्रामिंग)]] का समर्थन करने वाली भाषाओं में, जैसे स्रोत कोड के इंटरैक्टिव मूल्यांकन (एक दुभाषिया या वृद्धिशील कंपाइलर का उपयोग करके), पहचानकर्ता भी रनटाइम इकाइयां हैं, कभी-कभी [[प्रथम श्रेणी की वस्तु]]ओं के रूप में भी जिन्हें स्वतंत्र रूप से हेरफेर और मूल्यांकन किया जा सकता है। [[लिस्प (प्रोग्रामिंग भाषा)]] में इन्हें सिंबल (लिस्प) कहा जाता है।
[[प्रतिबिंब (कंप्यूटर प्रोग्रामिंग)]] का समर्थन करने वाली भाषाओं में, जैसे स्रोत कोड के इंटरैक्टिव मूल्यांकन (एक दुभाषिया या वृद्धिशील कंपाइलर का उपयोग करके), पहचानकर्ता भी रनटाइम इकाइयां हैं, कभी-कभी [[प्रथम श्रेणी की वस्तु]]ओं के रूप में भी जिन्हें स्वतंत्र रूप से हेरफेर और मूल्यांकन किया जा सकता है। [[लिस्प (प्रोग्रामिंग भाषा)]] में इन्हें सिंबल (लिस्प) कहा जाता है।


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

Revision as of 08:05, 2 March 2023

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

शाब्दिक रूप

कौन से वर्ण अनुक्रम पहचानकर्ता का गठन करते हैं, यह भाषा के शाब्दिक व्याकरण पर निर्भर करता है। एक सामान्य नियम अक्षरांकीय अनुक्रम है,जो अधोयोजक की भी अनुमति देता है कुछ भाषाओं में,अनुमति नहीं देता है और इस प्रतिबंध के साथ कि यह एक संख्यात्मक अंक से शुरू नहीं हो सकता है पूर्णांक शाब्दिक के साथ भ्रमित होने से बचने के लिए शिथिलन विश्लेषण को सरल बनाने के लिए - foo, foo1, foo_bar, _foo की अनुमति है, लेकिन 1foo नहीं है - यह सी (प्रोग्रामिंग भाषा) और सी ++, पायथन (प्रोग्रामिंग भाषा), और कई अन्य भाषाओं के पुराने संस्करणों में उपयोग की जाने वाली परिभाषा है। इन भाषाओं के बाद के संस्करण, कई अन्य आधुनिक भाषाओं के साथ, पहचानकर्ता में कई और यूनिकोड वर्णों का समर्थन करते हैं। यद्यपि एक सामान्य प्रतिबंध व्हाट्सएप वर्णों और भाषा संचालकों को अनुमति नहीं देना है; यह टोकननाइजेशन को मुक्त रूप भाषा,मुक्त -फॉर्म और संदर्भ मुक्त व्याकरण, कॉन्टेक्स्ट-मुक्त बनाकर सरल करता है। उदाहरण के लिए, मना करना + बाइनरी ऑपरेशन के रूप में इसके उपयोग के कारण पहचानकर्ताओं में इसका अर्थ है a+b और a + b उसी को टोकन किया जा सकता है, जबकि अगर इसकी अनुमति थी, a+b एक पहचानकर्ता होगा, अतिरिक्त नहीं। पहचानकर्ता में व्हाइटस्पेस विशेष रूप से समस्याग्रस्त है, जैसे कि पहचानकर्ताओं में रिक्त स्थान की अनुमति है, फिर एक खंड जैसे if rainy day then 1 कानूनी है, के साथ rainy day एक पहचानकर्ता के रूप में, लेकिन इसे टोकन देने के लिए if क्लॉज की स्थिति में होने के वाक्यांश संबंधी संदर्भ की आवश्यकता होती है। यद्यपि कुछ भाषाएँ पहचानकर्ताओं में रिक्त स्थान की अनुमति देती हैं, जैसे कि अल्गोल 68 और कुछ अल्गोल संस्करण - उदाहरण के लिए, निम्नलिखित एक मान्य कथन है: जिसे real half pi;के रूप में दर्ज किया जा सकता है .real. half pi; कीवर्ड बोल्डफेस में दर्शाए गए हैं, विशेष रूप से वाक्यविन्यास के माध्यम से। अल्गोल में यह संभव था क्योंकि खोजशब्दों को वाक्यात्मक रूप से विभेदित किया जाता है, इसलिए टकराव या अस्पष्टता का कोई खतरा नहीं है, रेखा पुनर्निर्माण चरण के दौरान रिक्त स्थान समाप्त हो जाते हैं, और स्रोत को स्कैनर रहित पार्सिंग के माध्यम से संसाधित किया गया था, इसलिए शिथिलन संदर्भ-संवेदनशील हो सकता है।

अधिकांश भाषाओं में, कुछ वर्ण अनुक्रमों में पहचानकर्ता का शाब्दिक रूप होता है लेकिन उन्हें कीवर्ड कंप्यूटर प्रोग्रामिंग के रूप में जाना जाता है - उदाहरण के लिए, if क्लॉज के लिए अक्सर एक कीवर्ड होता है, लेकिन लेक्सिक रूप से उसी रूप में होता है ig या foo अर्थात् अक्षरों का एक क्रम होता है इस ओवरलैप को विभिन्न तरीकों से नियंत्रित किया जा सकता है: इन्हें पहचानकर्ता होने से प्रतिबंधित किया जा सकता है - जो टोकननाइज़ेशन और पार्सिंग को सरल करता है - जिस स्थिति में वे आरक्षित शब्द हैं; उन दोनों को अनुमति दी जा सकती है लेकिन अन्य तरीकों से अलग किया जा सकता है, जैसे कि स्ट्रॉपिंग के माध्यम से या खोजशब्द अनुक्रमों को पहचानकर्ता के रूप में अनुमति दी जा सकती है और किस अर्थ को संदर्भ से निर्धारित किया जाता है, जिसके लिए संदर्भ-संवेदनशील लेक्सर की आवश्यकता होती है। गैर-कीवर्ड भी आरक्षित शब्द हो सकते हैं विशेष रूप से आगे की अनुकूलता के लिए, यदि कोई शब्द भविष्य में एक कीवर्ड बन सकता है। कुछ भाषाओं में, जैसे, PL/1, भेद स्पष्ट नहीं है।

शब्दार्थ

एक पहचानकर्ता के कार्यक्रम के भीतर दायरा, या अभिगम्यता या तो स्थानीय या वैश्विक हो सकती है। एक वैश्विक पहचानकर्ता कार्यों के बाहर घोषित किया जाता है और पूरे कार्यक्रम में उपलब्ध होता है। एक स्थानीय पहचानकर्ता को एक विशिष्ट कार्य के भीतर घोषित किया जाता है और केवल उस कार्य के भीतर ही उपलब्ध होता है।[1] प्रोग्रामिंग भाषाओं के कार्यान्वयन के लिए जो एक संकलन समय उपयोग कर रहे हैं, पहचानकर्ता अक्सर केवल समय संस्थाओं को संकलित करते हैं। यही है, रन टाइम (प्रोग्राम लाइफसाइकिल चरण) पर संकलित प्रोग्राम में पाठ्य पहचानकर्ता टोकन के बजाय स्मृति पतों और ऑफ़सेट के संदर्भ होते हैं (ये स्मृति पते, या ऑफ़सेट, प्रत्येक पहचानकर्ता को संकलक द्वारा निर्दिष्ट किए जाते हैं)।

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

कंपाइलर और दुभाषिए आमतौर पर उपयोग किए गए वास्तविक वर्ण अनुक्रम के आधार पर पहचानकर्ता को कोई अर्थपूर्ण अर्थ नहीं देते हैं। यद्यपि अपवाद हैं। उदाहरण के लिए:

गो जैसी कुछ भाषाओं में, पहचानकर्ताओं की विशिष्टता उनकी वर्तनी और उनकी दृश्यता पर आधारित होती है।[2] HTML में एक पहचानकर्ता एक HTML तत्व की संभावित HTML विशेषता में से एक है। यह दस्तावेज़ के भीतर अद्वितीय है।

संदर्भ

  1. Malik, D. (2014). C++ programming : from problem analysis to program design (7th ed.). Cengage Learning. p. 397. ISBN 978-1-285-85274-4.
  2. "The Go Programming Language Specification - The Go Programming Language". Golang.org. 2013-05-08. Retrieved 2013-06-05.


यह भी देखें

  • नामकरण परंपरा (प्रोग्रामिंग)

श्रेणी:पहचानकर्ता श्रेणी:प्रोग्रामिंग भाषा अवधारणाएँ श्रेणी:मेटाडाटा श्रेणी:सिंटैक्टिक संस्थाएं