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

From Vigyanwiki
No edit summary
Line 1: Line 1:
{{Short description|Lexical token that names a programming language's entities}}
{{Short description|Lexical token that names a programming language's entities}}
कंप्यूटर [[प्रोग्रामिंग भाषा]]ओं में, एक पहचानकर्ता एक लेक्सिकल विश्लेषण टोकन है, जो भाषा की संस्थाओं का नाम देता है। कुछ प्रकार की संस्थाओं को एक पहचानकर्ता निरूपित कर सकता है कुछ प्रकार की संस्थाओं को एक पहचानकर्ता निरूपित कर सकता है जिसमें चर, डेटा प्रकार,[[लेबल (कंप्यूटर विज्ञान)]], [[सबरूटीन]] और [[मॉड्यूलर प्रोग्रामिंग|मॉड्यूलर]] सम्मिलित हैं।
कंप्यूटर [[प्रोग्रामिंग भाषा]]ओं में, पहचानकर्ता एक लेक्सिकल टोकन है, जो प्रोग्रामिंग भाषा की इकाइयों का नामकरण करता है। कुछ प्रकार की इकाइयों को एक पहचानकर्ता निरूपित कर सकता है जिसमें चर, डेटा प्रकार,[[लेबल (कंप्यूटर विज्ञान)|लेबल]], [[सबरूटीन]] और [[मॉड्यूलर प्रोग्रामिंग|मॉड्यूलर]] सम्मिलित हैं।


== शाब्दिक रूप ==
== शाब्दिक रूप ==
कौन से वर्ण अनुक्रम पहचानकर्ता का गठन करते हैं, यह भाषा के [[शाब्दिक व्याकरण]] पर निर्भर करता है। एक सामान्य नियम [[अक्षरांकीय]] अनुक्रम है,जो अधोयोजक की भी अनुमति देता है कुछ भाषाओं में,अनुमति नहीं देता है और इस प्रतिबंध के साथ कि यह एक संख्यात्मक अंक सेप्रारंभ  नहीं हो सकता है [[पूर्णांक शाब्दिक]] के साथ भ्रमित होने से बचने के लिए शिथिलन विश्लेषण को सरल बनाने के लिए - <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>foo, foo1, foo_bar, _foo</code> के प्रयोग की अनुमति है, परंतु <code>1foo</code> '''-''' नहीं है यह [[सी (प्रोग्रामिंग भाषा)|सी]] और [[सी ++]], [[पायथन (प्रोग्रामिंग भाषा)|पायथन]] , और कई अन्य भाषाओं के पुराने संस्करणों में उपयोग की जाने वाली परिभाषा है। इन भाषाओं के बाद के संस्करण, कई अन्य आधुनिक भाषाओं के साथ, पहचानकर्ता में कई और [[यूनिकोड]] वर्णों का समर्थन करते हैं। यद्यपि एक सामान्य प्रतिबंध खाली स्थान के वर्णों और भाषा संचालकों को अनुमति नहीं देना है; यह टोकननाइजेशन को [[मुक्त रूप भाषा]] और [[संदर्भ मुक्त व्याकरण]], विषय से मुक्त  बनाकर सरल करता है। उदाहरण के लिए, बाइनरी ऑपरेशन के रूप में इसके उपयोग के कारण पहचानकर्ताओं में + को मना करने का अर्थ है कि a+b और a + b को समान रूप से टोकन दिया जा सकता है, जबकि यदि इसकी अनुमति दी गई थी, तो a+b एक पहचानकर्ता होगा तथा जोड़ नहीं होगा। पहचानकर्ता में रिक्त स्थान विशेष रूप से समस्याग्रस्त है, जैसे कि पहचानकर्ताओं में रिक्त स्थान की अनुमति है, फिर एक खंड जैसे <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>  क्लॉज के लिए अक्सर एक कीवर्ड होता है, लेकिन लेक्सिक रूप से उसी रूप में होता है <code>ig</code> या <code>foo</code> अर्थात् अक्षरों का एक क्रम होता है इस ओवरलैप को विभिन्न तरीकों से नियंत्रित किया जा सकता है: इन्हें पहचानकर्ता होने से प्रतिबंधित किया जा सकता है - जो टोकननाइज़ेशन और पार्सिंग को सरल करता है - जिस स्थिति में वे आरक्षित शब्द हैं; उन दोनों को अनुमति दी जा सकती है लेकिन अन्य तरीकों से अलग किया जा सकता है, जैसे कि स्ट्रॉपिंग के माध्यम से या खोजशब्द अनुक्रमों को पहचानकर्ता के रूप में अनुमति दी जा सकती है और किस अर्थ को संदर्भ से निर्धारित किया जाता है, जिसके लिए संदर्भ-संवेदनशील लेक्सर की आवश्यकता होती है। गैर-कीवर्ड भी आरक्षित शब्द हो सकते हैं विशेष रूप से आगे की अनुकूलता के लिए, यदि कोई शब्द भविष्य में एक कीवर्ड बन सकता है। कुछ भाषाओं में, जैसे, PL/1, भेद स्पष्ट नहीं है।
अधिकांश भाषाओं में, कुछ वर्ण अनुक्रमों में पहचानकर्ता का शाब्दिक रूप होता है परंतु उन्हें [[कीवर्ड (कंप्यूटर प्रोग्रामिंग)|कीवर्ड कंप्यूटर प्रोग्रामिंग]] के रूप में जाना जाता है - उदाहरण के लिए, <code>if</code>  खंड के लिए प्रायः एक कीवर्ड होता है, परंतु लेक्सिक रूप से उसी रूप में होता है <code>ig</code> या <code>foo</code> अर्थात् अक्षरों का एक क्रम होता है इस अधिव्यापन को विभिन्न विधियों से नियंत्रित किया जा सकता है: इन्हें पहचानकर्ता होने से प्रतिबंधित किया जा सकता है - जो टोकननाइज़ेशन और पार्सिंग को सरल करता है - जिस स्थिति में वे आरक्षित शब्द हैं; उन दोनों को अनुमति दी जा सकती है परंतु अन्य विधियों से भिन्न किया जा सकता है, जैसे कि स्ट्रॉपिंग के माध्यम से या खोजशब्द अनुक्रमों को पहचानकर्ता के रूप में अनुमति दी जा सकती है और किस अर्थ को संदर्भ से निर्धारित किया जाता है, जिसके लिए संदर्भ-संवेदनशील लेक्सर की आवश्यकता होती है। गैर-कीवर्ड भी आरक्षित शब्द हो सकते हैं विशेष रूप से आगे की अनुकूलता के लिए, यदि कोई शब्द भविष्य में एक कीवर्ड बन सकता है। कुछ भाषाओं में, जैसे, PL/1, भेद स्पष्ट नहीं है।


== शब्दार्थ ==
== शब्दार्थ ==
एक पहचानकर्ता के कार्यक्रम के भीतर दायरा, या अभिगम्यता या तो स्थानीय या वैश्विक हो सकती है। एक वैश्विक पहचानकर्ता कार्यों के बाहर घोषित किया जाता है और पूरे कार्यक्रम में उपलब्ध होता है। एक स्थानीय पहचानकर्ता को एक विशिष्ट कार्य के भीतर घोषित किया जाता है और केवल उस कार्य के भीतर ही उपलब्ध होता है।<ref>{{cite book|last1=Malik|first1=D.|title=C++ programming : from problem analysis to program design|date=2014|publisher=Cengage Learning|isbn=978-1-285-85274-4|page=397|edition=7th}}</ref> प्रोग्रामिंग भाषाओं के कार्यान्वयन के लिए जो एक [[संकलन समय]] उपयोग कर रहे हैं, पहचानकर्ता प्रायः समय संस्थाओं को संकलित करते हैं। यह रन टाइम  पर संकलित प्रोग्राम में पाठ्य पहचानकर्ता टोकन के अतिरिक्त स्मृति पतों और ऑफ़सेट के संदर्भ होते हैं ये स्मृति पते, या ऑफ़सेट, प्रत्येक पहचानकर्ता को [[संकलक]] द्वारा निर्दिष्ट किए जाते हैं।
एक पहचानकर्ता के कार्यक्रम के भीतर दायरा, या अभिगम्यता या तो स्थानीय या वैश्विक हो सकती है। एक वैश्विक पहचानकर्ता कार्यों के बाहर घोषित किया जाता है और पूरे कार्यक्रम में उपलब्ध होता है। एक स्थानीय पहचानकर्ता को एक विशिष्ट कार्य के भीतर घोषित किया जाता है और केवल उस कार्य के भीतर ही उपलब्ध होता है।<ref>{{cite book|last1=Malik|first1=D.|title=C++ programming : from problem analysis to program design|date=2014|publisher=Cengage Learning|isbn=978-1-285-85274-4|page=397|edition=7th}}</ref> प्रोग्रामिंग भाषाओं के कार्यान्वयन के लिए जो एक [[संकलन समय]] उपयोग कर रहे हैं, पहचानकर्ता प्रायः समय इकाइयों को संकलित करते हैं। यह रन टाइम  पर संकलित प्रोग्राम में पाठ्य पहचानकर्ता टोकन के अतिरिक्त स्मृति पतों और ऑफ़सेट के संदर्भ होते हैं ये स्मृति पते, या ऑफ़सेट, प्रत्येक पहचानकर्ता को [[संकलक]] द्वारा निर्दिष्ट किए जाते हैं।


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

Revision as of 05:52, 3 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] प्रोग्रामिंग भाषाओं के कार्यान्वयन के लिए जो एक संकलन समय उपयोग कर रहे हैं, पहचानकर्ता प्रायः समय इकाइयों को संकलित करते हैं। यह रन टाइम पर संकलित प्रोग्राम में पाठ्य पहचानकर्ता टोकन के अतिरिक्त स्मृति पतों और ऑफ़सेट के संदर्भ होते हैं ये स्मृति पते, या ऑफ़सेट, प्रत्येक पहचानकर्ता को संकलक द्वारा निर्दिष्ट किए जाते हैं।

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

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

go जैसी कुछ भाषाओं में, पहचानकर्ताओं की विशिष्टता उनकी वर्तनी और उनकी दृश्यता पर आधारित होती है। 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.


यह भी देखें

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

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