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

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

शाब्दिक रूप
कौन से वर्ण अनुक्रम पहचानकर्ता का गठन करते हैं, यह भाषा के शाब्दिक व्याकरण पर निर्भर करता है। एक सामान्य नियम अक्षरांकीय अनुक्रम है, अंडरस्कोर की भी अनुमति है (कुछ भाषाओं में, _ की अनुमति नहीं है), और इस शर्त के साथ कि यह एक संख्यात्मक अंक से शुरू नहीं हो सकता है (पूर्णांक शाब्दिक के साथ भ्रमित होने से बचने के द्वारा लेक्सिकल विश्लेषण को सरल बनाने के लिए) - तो  की अनुमति है, लेकिन   नहीं है - यह सी (प्रोग्रामिंग भाषा) और सी ++, पायथन (प्रोग्रामिंग भाषा), और कई अन्य भाषाओं के पुराने संस्करणों में उपयोग की जाने वाली परिभाषा है। इन भाषाओं के बाद के संस्करण, कई अन्य आधुनिक भाषाओं के साथ, पहचानकर्ता में कई और यूनिकोड वर्णों का समर्थन करते हैं। हालाँकि, एक सामान्य प्रतिबंध व्हाट्सएप वर्णों और भाषा संचालकों को अनुमति नहीं देना है; यह टोकननाइजेशन को मुक्त रूप भाषा | फ्री-फॉर्म और संदर्भ मुक्त व्याकरण | कॉन्टेक्स्ट-फ्री बनाकर सरल करता है। उदाहरण के लिए, मना करना   बाइनरी ऑपरेशन के रूप में इसके उपयोग के कारण पहचानकर्ताओं में इसका मतलब है   और   उसी को टोकन किया जा सकता है, जबकि अगर इसकी अनुमति थी,   एक पहचानकर्ता होगा, अतिरिक्त नहीं। पहचानकर्ता में व्हाइटस्पेस विशेष रूप से समस्याग्रस्त है, जैसे कि पहचानकर्ताओं में रिक्त स्थान की अनुमति है, फिर एक खंड जैसे   कानूनी है, के साथ   एक पहचानकर्ता के रूप में, लेकिन इसे टोकन देने के लिए if क्लॉज की स्थिति में होने के वाक्यांश संबंधी संदर्भ की आवश्यकता होती है। हालाँकि, कुछ भाषाएँ पहचानकर्ताओं में रिक्त स्थान की अनुमति देती हैं, जैसे कि ALGOL 68 और कुछ ALGOL संस्करण - उदाहरण के लिए, निम्नलिखित एक मान्य कथन है:   जिसे के रूप में दर्ज किया जा सकता है   (कीवर्ड बोल्डफेस में दर्शाए गए हैं, विशेष रूप से स्ट्रॉपिंग (वाक्यविन्यास) के माध्यम से)। ALGOL में यह संभव था क्योंकि खोजशब्दों को वाक्यात्मक रूप से विभेदित किया जाता है, इसलिए टकराव या अस्पष्टता का कोई खतरा नहीं है, रेखा पुनर्निर्माण चरण के दौरान रिक्त स्थान समाप्त हो जाते हैं, और स्रोत को स्कैनर रहित पार्सिंग के माध्यम से संसाधित किया गया था, इसलिए लेक्सिंग संदर्भ-संवेदनशील हो सकता है।

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

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

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

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

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

यह भी देखें

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

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