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

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

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

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

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

प्रोग्रामिंग भाषाओं के कार्यान्वयन के लिए जो एक कम्पाइलर उपयोग कर रहे हैं, पहचानकर्ता प्रायः समय इकाइयों को संकलित करते हैं। यह रन टाइम पर संकलित प्रोग्राम में पाठ्य पहचानकर्ता टोकन के अतिरिक्त स्मृति पतों और ऑफ़सेट के संदर्भ होते हैं ये स्मृति पते, या ऑफ़सेट, प्रत्येक पहचानकर्ता को संकलक द्वारा निर्दिष्ट किए जाते हैं।

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

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

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

यह भी देखें

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