شناسه (زبان‌های کامپیوتری)
در زبان‌های برنامه‌نویسی کامپیوتر، یک شناسه توکن لغوی است (نماد نیز نامیده می‌شود، اما نباید با نماد نوع داده اولیه اشتباه گرفته شود) که موجودیت‌های زبان را نام‌گذاری می‌کند. برخی از انواع موجودیت‌هایی که یک شناسه ممکن است نشان دهد شامل متغیرها، انواع داده‌ها، برچسب‌ها، زیرروال‌ها و ماژول‌ها می‌شود.
اینکه کدام توالی از کاراکترها شناسه‌ها را تشکیل می‌دهد، به دستور لغوی زبان بستگی دارد. یک قانون رایج، دنباله‌های حرفی عددی است، که استفاده از زیرخط نیز در آن مجاز است (در برخی زبان‌ها، _ مجاز نیست)، و این شرط را هم دارد که نمی‌تواند با یک رقم شروع شود (برای ساده‌تر کردن واژگان با اجتناب از اشتباه گرفتن با لفظ اعداد صحیح) – پس codice_1 مجاز هستند، اما codice_2 نیست - این تعریفی است که در نسخه‌های قبلی C و C++، Python و بسیاری از زبان‌های دیگر استفاده می‌شود. نسخه‌های بعدی این زبان‌ها، همراه با بسیاری از زبان‌های مدرن دیگر، از کاراکترهای یونیکد بیشتری در یک شناسه پشتیبانی می‌کنند. با این حال، یک محدودیت رایج اجازه ندادن کاراکترهای فضای خالی و عملگرهای زبان است. این کار توکن‌سازی را با مستقل از فرم و مستقل از متن کردن ساده می‌کند. به عنوان مثال، منع codice_3 در شناسه‌ها به دلیل استفاده از آن به عنوان یک عملیات باینری به این معنی است که codice_4 و codice_5 می‌توانند به‌طور یکسان تبدیل به توکن بشوند، در حالی که اگر codice_3 مجاز بود، codice_4 به‌جای جمع، یک شناسه محسوب می‌شد. فضای سفید در شناسه به ویژه مشکل‌ساز می‌شود، زیرا اگر فاصله در شناسه‌ها مجاز باشد، عبارتی مانند codice_8 با codice_9 به عنوان یک شناسه، قانونی است درحالی که نشانه‌گذاری آن مستلزم بافت عبارتی بودن در شرط if است. با این حال برخی از زبان‌ها فاصله‌ها را در شناسه‌ها مجاز می‌شمارند، مانند ALGOL 68 و برخی از انواع ALGOL - برای مثال، این عبارت معتبر است: codice_10 که می‌تواند به عنوان codice_11 وارد شود (کلمات کلیدی به صورت پررنگ، مشخصا از طریق stropping نشان داده می‌شوند). در ALGOL این امکان‌پذیر بود زیرا کلمات کلیدی از نظر نحوی متمایز می‌شوند، بنابراین خطر برخورد یا ابهام وجود ندارد، فضاها در فاز بازسازی خط حذف می‌شوند و منبع از طریق تجزیه بدون اسکنر پردازش می‌شود، بنابراین واژگان می‌تواند حساس به متن باشند.
در بیشتر زبان‌ها، برخی از دنباله‌های کاراکتر شکل لغوی یک شناسه را دارند، اما به عنوان کلمات کلیدی شناخته می‌شوند - برای مثال، codice_12 اغلب یک کلمه کلیدی برای یک جمله شرطی if است، اما از نظر لغوی به همان شکل codice_13 یا codice_14 یعنی دنباله‌ای از حروف است. این همپوشانی می‌تواند به روش‌های مختلفی مدیریت شود: ممکن است آن‌ها از شناسه بودن منع شوند- که نشانه‌سازی (توکن سازی) و تجزیه را ساده می‌کند - در این صورت آن‌ها کلمات رزرو شده هستند؛ هر دوی آنها ممکن است مجاز باشند، اما از راه‌های دیگر، مثلاً از طریق stropping، متمایز شوند؛ یا توالی کلمات کلیدی ممکن است به عنوان شناسه مجاز باشند و از طریق معنا از متن تعیین شوند، که در این صورت به یک واژگان حساس به زمینه نیاز است. کلمات غیرکلیدی نیز، به ویژه برای سازگاری پیشرو، ممکن است کلمات رزرو شده (ممنوع به عنوان شناسه) باشند و این به این دلیل است که ممکن است یک کلمه در آینده تبدیل به یک کلمه کلیدی شود. در چند زبان، به عنوان مثال PL/1، این تمایز روشن نیست.
دامنه یا دسترسی در برنامه یک شناسه می‌تواند محلی یا سراسری باشد. یک شناسه سراسری خارج از توابع اعلام می‌شود و در سراسر برنامه در دسترس است. یک شناسه محلی در یک تابع خاص اعلام می‌شود و فقط در آن تابع موجود است.
برای پیاده‌سازی زبان‌های برنامه‌نویسی که از کامپایلر استفاده می‌کنند، شناسه‌ها اغلب فقط موجودیت‌های زمان کامپایل هستند. این به این معنی است که در زمان اجرا، برنامه کامپایل شده به جای توکن‌های شناسه متنی، ارجاعاتی به آدرس‌ها و آفست‌های حافظه دارد (این آدرس‌های حافظه یا آفست‌ها توسط کامپایلر به هر شناسه اختصاص داده شده‌اند).
در زبان‌هایی که از بازتاب پشتیبانی می‌کنند، مانند ارزیابی تعاملی کد منبع (با استفاده از یک مفسر یا یک کامپایلر افزایشی)، شناسه‌ها نیز موجودیت‌های زمان اجرا هستند که گاهی اوقات حتی به عنوان اشیاء درجه یک هستند که می‌توانند آزادانه دستکاری و ارزیابی شوند. در Lisp به این نمادها می‌گویند.
کامپایلرها و مفسرها معمولاً هیچ مفهوم معنایی را بر اساس توالی کاراکترهای واقعی استفاده شده به یک شناسه اختصاص نمی‌دهند. با این حال، استثنائاتی وجود دارد. برای مثال:
در برخی از زبان‌ها مانند Go، منحصربه‌فرد بودن شناسه‌ها بر اساس املا و نمایان بودن آن‌ها است.
در HTML یک شناسه یکی از ویژگی‌های احتمالی عنصر HTML است که در داخل سند (document) منحصر به فرد است.