موضوع مقاله: شناسه (زبان‌های کامپیوتری) | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # شناسه (زبان‌های کامپیوتری) | مقدمه: در زبان‌های برنامه‌نویسی کامپیوتر، یک شناسه توکن لغوی است (نماد نیز نامیده می‌شود، اما نباید با نماد نوع داده اولیه اشتباه گرفته شود) که موجودیت‌های زبان را نام‌گذاری می‌کند. | ## بخش 1: شناسه (زبان‌های کامپیوتری) | برخی از انواع موجودیت‌هایی که یک شناسه ممکن است نشان دهد شامل متغیرها، انواع داده‌ها، برچسب‌ها، زیرروال‌ها و ماژول‌ها می‌شود. فرم لغوی اینکه کدام توالی از کاراکترها شناسه‌ها را تشکیل می‌دهد، به دستور لغوی زبان بستگی دارد. یک قانون رایج، دنباله‌های حرفی عددی است، که استفاده از زیرخط نیز در آن مجاز است (در برخی زبان‌ها، _ مجاز نیست)، و این شرط را هم دارد که نمی‌تواند با یک رقم شروع شود (برای ساده‌تر کردن واژگان با اجتناب از اشتباه گرفتن با لفظ اعداد صحیح) – پس foo, foo1, foo_bar, _foo مجاز هستند، اما 1foo نیست - این تعریفی است که در نسخه‌های قبلی C و C++، Python و بسیاری از زبان‌های دیگر استفاده می‌شود. نسخه‌های بعدی این زبان‌ها، همراه با بسیاری از زبان‌های مدرن دیگر، از کاراکترهای یونیکد بیشتری در یک شناسه پشتیبانی می‌کنند. با این حال، یک محدودیت رایج اجازه ندادن کاراکترهای فضای خالی و عملگرهای زبان است. به عنوان مثال، منع + در شناسه‌ها به دلیل استفاده از آن به عنوان یک عملیات باینری به این معنی است که a+b و a + b می‌توانند به‌طور یکسان تبدیل به توکن بشوند، در حالی که اگر + مجاز بود، a+b به‌جای جمع، یک شناسه محسوب می‌شد. | ## بخش 2: شناسه (زبان‌های کامپیوتری) | در ALGOL این امکان‌پذیر بود زیرا کلمات کلیدی از نظر نحوی متمایز می‌شوند، بنابراین خطر برخورد یا ابهام وجود ندارد، فضاها در فاز بازسازی خط حذف می‌شوند و منبع از طریق تجزیه بدون اسکنر پردازش می‌شود، بنابراین واژگان می‌تواند حساس به متن باشند. در بیشتر زبان‌ها، برخی از دنباله‌های کاراکتر شکل لغوی یک شناسه را دارند، اما به عنوان کلمات کلیدی شناخته می‌شوند - برای مثال، if اغلب یک کلمه کلیدی برای یک جمله شرطی if است، اما از نظر لغوی به همان شکل ig یا foo یعنی دنباله‌ای از حروف است. این همپوشانی می‌تواند به روش‌های مختلفی مدیریت شود: ممکن است آن‌ها از شناسه بودن منع شوند- که نشانه‌سازی (توکن سازی) و تجزیه را ساده می‌کند - در این صورت آن‌ها کلمات رزرو شده هستند؛ هر دوی آنها ممکن است مجاز باشند، اما از راه‌های دیگر، مثلاً از طریق stropping، متمایز شوند؛ یا توالی کلمات کلیدی ممکن است به عنوان شناسه مجاز باشند و از طریق معنا از متن تعیین شوند، که در این صورت به یک واژگان حساس به زمینه نیاز است. کلمات غیرکلیدی نیز، به ویژه برای سازگاری پیشرو، ممکن است کلمات رزرو شده (ممنوع به عنوان شناسه) باشند و این به این دلیل است که ممکن است یک کلمه در آینده تبدیل به یک کلمه کلیدی شود. برای پیاده‌سازی زبان‌های برنامه‌نویسی که از کامپایلر استفاده می‌کنند، شناسه‌ها اغلب فقط موجودیت‌های زمان کامپایل هستند. این به این معنی است که در زمان اجرا، برنامه کامپایل شده به جای توکن‌های شناسه متنی، ارجاعاتی به آدرس‌ها و آفست‌های حافظه دارد (این آدرس‌های حافظه یا آفست‌ها توسط کامپایلر به هر شناسه اختصاص داده شده‌اند). | ## بخش 3: شناسه (زبان‌های کامپیوتری) | در زبان‌هایی که از بازتاب پشتیبانی می‌کنند، مانند ارزیابی تعاملی کد منبع (با استفاده از یک مفسر یا یک کامپایلر افزایشی)، شناسه‌ها نیز موجودیت‌های زمان اجرا هستند که گاهی اوقات حتی به عنوان اشیاء درجه یک هستند که می‌توانند آزادانه دستکاری و ارزیابی شوند. کامپایلرها و مفسرها معمولاً هیچ مفهوم معنایی را بر اساس توالی کاراکترهای واقعی استفاده شده به یک شناسه اختصاص نمی‌دهند. برای مثال: در پرل یک متغیر با استفاده از پیشوندی به نام sigil نشان داده می‌شود که جنبه‌هایی از نحوه تفسیر متغیر در عبارات را مشخص می‌کند. در Ruby اگر شناسه یک متغیر با حرف بزرگ شروع شود، به‌طور خودکار تغییرناپذیر در نظر گرفته می‌شود. در فرترن، حرف اول در نام متغیر نشان می‌دهد که آیا به‌طور پیش‌فرض به‌عنوان متغیر عدد صحیح یا ممیز شناور ایجاد می‌شود. در Go، حروف بزرگ اول نام متغیر، نمایان بودن آن را تعیین می‌کند (حروف بزرگ برای عمومی، حروف کوچک برای خصوصی). | ## جمع‌بندی | در برخی از زبان‌ها مانند Go، منحصربه‌فرد بودن شناسه‌ها بر اساس املا و نمایان بودن آن‌ها است.