PDA

View Full Version : چرا شناسه ها نمیتوانند با عدد شروع شوند؟



c_doost
شنبه 27 آبان 1391, 15:04 عصر
سلام

چرا شناسه ها یا متغیرها در زبان های برنامه سازی (ظاهرا در تمام زبان ها برنامه نویسی اینجوریه)نمیتوانند با عدد شروع شوند و حتما باید با کاراکتر شروع شوند؟

ali.bahrami
شنبه 27 آبان 1391, 19:12 عصر
دوست عزیز الان اگر شما جای کامپایلر بودید از کجا تفاوت بین عدد و نام متغیر را در کد زیر تشخصی میدادید؟
int 17 = 497;
int 42 = 6 * 9;
String 1111 = "Totally text";

c_doost
شنبه 27 آبان 1391, 19:39 عصر
این حرفت درست ولی اگه چنین متغیری تعریف کنیم چی :
1total

میبینید که متغیر با یک عدد شروع شده

c_doost
شنبه 27 آبان 1391, 20:00 عصر
دوست عزیز الان اگر شما جای کامپایلر بودید از کجا تفاوت بین عدد و نام متغیر را در کد زیر تشخصی میدادید؟
int 17 = 497;
int 42 = 6 * 9;
String 1111 = "Totally text";
این حرف شما در مورد متغیرهای رشته ای درسته ؟

string s="student";

ali.bahrami
شنبه 27 آبان 1391, 23:39 عصر
این حرفت درست ولی اگه چنین متغیری تعریف کنیم چی :
1total

میبینید که متغیر با یک عدد شروع شده

اگر اینجوری تعریف کرده باشیم ...
int total
بعد متغیر دیگه ای به این صورت
int 1total
اینجوری کامپایلر نمیتونه متوجه بشه که شاید منظور شما این بوده که مثلا 1 را با total جمع کنید و عملگر را فراموش کردید.
با یه چیز دیگه چرا برای رشته ها از " " استفاده میکینم ؟

ali.bahrami
شنبه 27 آبان 1391, 23:41 عصر
این حرف شما در مورد متغیرهای رشته ای درسته ؟

string s="student";

به همین دلیله که کاربر برای رشته ها بایستی از " " استفاده کنه مگرنه نیازی نبود . به این صورت می نوشتیم :

string s = string
الان کامپایلر متوجه نمیشه که کدوم string ‌رشته و کدوم کلاس هست

ali.bahrami
شنبه 27 آبان 1391, 23:58 عصر
دوست عزیز اگر کتاب کامپایلرها نوشته اولمن مترجم قُلزم را مطالعه بفرمایید دقیقا متوجه خواهید شد.
وقتی کامپایلر میخواد دستورات شما را از نظر لغوی و نحوی بررسی کنه میاد تک تک کاراکترها را بررسی میکنه و تا به جدا کننده برسه که در اکثر زبانها جدا کننده ها فاصله است . سپس کلمه یا عدد بدست امده را با جدول خودس که به اسم Symbol Table‌هست مقایسه میکنه ببینه آیا چیزی که بدست آورده جزو کلمات کلیدی هست یا نه . اگر کلمه کلیدی بود به همون کلمه را مستقیما به فاز بعدی ترجمه میفرسته در غیر این صورت به فاز بعدی نوع را ارسال میکنه مثلا رشته یا عدد.
حال اگر متغیر در ابتدا با یک عدد شروع بشه کامپایلر به محض خوندن عدد digit‌ را به فاز بعد ارسال میکنه و بعد از اون انتظار حضور اعداد دیگه را داره مثلا بعد از 2 مثلا انتظار داره عدد دیگری باشه یا یک جدا کننده یا symboli که اونو میشناسه مثلا + در صورتی که بی اینها نرسه خطا اعلام میکنه. این به صورت جزپی و مختصر از نحوه کار کامپایلر هست. حالا اگر بخوایم ایتدی متغیرها عدد قرار بدیم کار کامپایلر سخت میشه برای تشخیص عدد بودن یا رشته بودن یا شناسه و ...

c_doost
یک شنبه 28 آبان 1391, 06:37 صبح
اگر کسی یه کتاب یا منبع میشناسه برای این سوال معرفی کنه

حسین شهریاری
یک شنبه 28 آبان 1391, 06:59 صبح
سلام

چرا شناسه ها یا متغیرها در زبان های برنامه سازی (ظاهرا در تمام زبان ها برنامه نویسی اینجوریه)نمیتوانند با عدد شروع شوند و حتما باید با کاراکتر شروع شوند؟
این سوال شما مثل اینه که یکی بپرسه چرا کره زمین گرده؟
خوب دوست عزیز بیاین به این همه تحقیق و بررسی تیم های مطالعاتی در شرکتهای معتبر نرم افزاری دنیا اعتماد کنیم.
البته نمیگم اونا از اشتباه مبرا هستند، ولی حداقل توی این زمینه بهشون اعتماد کنین.

ali.bahrami
یک شنبه 28 آبان 1391, 11:47 صبح
اگر کسی یه کتاب یا منبع میشناسه برای این سوال معرفی کنه

کتاب " کامپایلرها اصول ، روش ها و ابزارها"
نوشته : جفری د.اولمن
مترجم : مهندس حسین ابراهیم زاده قلزم
فصل 1 تا 5

c_doost
یک شنبه 28 آبان 1391, 17:47 عصر
این سوال شما مثل اینه که یکی بپرسه چرا کره زمین گرده؟
خوب دوست عزیز بیاین به این همه تحقیق و بررسی تیم های مطالعاتی در شرکتهای معتبر نرم افزاری دنیا اعتماد کنیم.
البته نمیگم اونا از اشتباه مبرا هستند، ولی حداقل توی این زمینه بهشون اعتماد کنین.


این سوال مربوط به درس طراحی پیاده سازی زبان های برنامه سازی هست و برای اینکار دلیل میخوام

Ahmad765
یک شنبه 28 آبان 1391, 21:28 عصر
<ident>->letter{letter|digit}

در طراحی زبان به این صورت تعریف شده (ebnf)هست.

مثل اینه که بپرسی چرا از IF یا ELSE استفاده میشه.

ولی به هر حال یه نگاهی اینجا بندازید.

http://stackoverflow.com/questions/342152/why-cant-variable-names-start-with-numbers

c_doost
جمعه 03 آذر 1391, 22:10 عصر
اگر میشه یک منبع فارسی معرفی کنین

plus
شنبه 04 آذر 1391, 00:45 صبح
برای سادگی کار کامپایل و کمتر پیش اومدن اشتباه توسط برنامه نویس...وگرنه میشه کامپایلر رو طوری طراحی کرد که شناسه ها با عدد هم شروع بشن البته:
برای اینکه اگه با عدد بتونن شروع بشن بعد باید این قانون رو گذشت که حداقل یک حرف غیر عددی داشته باشن تا با اعداد اشتباه نشن.