# Native Code > برنامه نویسی با C > بحث و گفتگوی فنی - خانواده C > سوال: وقتی می خوایم یه متغیر رو نامگذاری کنیم چرا نمی تونیم کارکتر اول رو عدد بذاریم؟

## mn4030

سلام
دوستان من می خوام بدونم چرا وقتی می خوایم یه متغیر رو نامگذاری کنیم چرا نمی تونیم کارکتر اول رو عدد بذاریم؟؟؟یعنی وقتی متغیر با عدد شروع میشه کامپایلر ایراد میگیره!!!
من دنبال دلیل منطقی هستم!؟؟؟
و می دونم که چون این برای کامپالیر پیش فرضه که متغیر نمی تونه با عدد شروع شه.
فقط دنبال دلیل منطقیش می گردم.
فکر نمی کنم دلیلش این باشه که برای بالا رفتن سرعت کامپایلر و یا آسونی گرامر این فرضی رو برای کامپایلر تعریف کرده باشند!!!
به نظر شما دلیل منطقیش چی می تونه باشه؟؟؟؟

----------


## mehdi.mousavi

> سلام دوستان من می خوام بدونم چرا وقتی می خوایم یه متغیر رو نامگذاری کنیم چرا نمی تونیم کارکتر اول رو عدد بذاریم؟؟؟یعنی وقتی متغیر با عدد شروع میشه کامپایلر ایراد میگیره!!! من دنبال دلیل منطقی هستم!؟؟؟ و می دونم که چون این برای کامپالیر پیش فرضه که متغیر نمی تونه با عدد شروع شه. فقط دنبال دلیل منطقیش می گردم. فکر نمی کنم دلیلش این باشه که برای بالا رفتن سرعت کامپایلر و یا آسونی گرامر این فرضی رو برای کامپایلر تعریف کرده باشند!!! به نظر شما دلیل منطقیش چی می تونه باشه؟؟؟؟


سلام.
فرض کنید میشد اینکارو کرد، اونوقت چطوری باید 

اعداد Hex رو نشون میدادیم؟ (مثل 0x100 که میشه 256 دسیمال)اعداد Oct رو نشون میدادیم؟ (مثل 0144U که میشه 100 دسیمال)اعداد Dec رو مشخص میکردیم؟ (مثل 300U که میشه 300 دسیمال)اعداد Float رو نشون میدادیم؟ (مثل 12.85f)و ...
این خط کد رو بطور نمونه در نظر بگیرید:

const float pi = 3.14f;

اینجا، ما یه سری Token داریم، یه سری Pattern داریم و یک سری Lexeme. در مثال فوق، Token ما id هستش (از دید Lexical Analyzer در Compiler ها)، pi یک Lexeme محسوب میشه و pattern مربوطه نیز میگه که این identifier باید "با حرف شروع بشه و پشتش حرف یا عدد بیاد". این مساله باعث ساده تر شدن کار پردازش Token ها بطرز چشمگیری میشه، علاوه بر اینکه در بسیاری از موراد نیز باعث ابهام زدایی میشه. اگر Lexeme میتونست با عدد شروع بشه، اونوقت نوشتن یک (یا چند) Regular Expression برای پردازش Token ها با دردسرهای عجیب و غریبی روبرو میشد، AST پیچیده میشد و Symbol Table ها باید اطلاعات فربه تری رو در خودشون نگه میداشتن. برای اینکه متوجه جزییات مساله بشه، لطفا به کتابی در مورد Compiler ها و طرز کار اونها رجوع کنید.

موفق باشید.

----------


## NilooooliN

> سلام
> دوستان من می خوام بدونم چرا وقتی می خوایم یه متغیر رو نامگذاری کنیم چرا نمی تونیم کارکتر اول رو عدد بذاریم؟؟؟یعنی وقتی متغیر با عدد شروع میشه کامپایلر ایراد میگیره!!!
> من دنبال دلیل منطقی هستم!؟؟؟
> و می دونم که چون این برای کامپالیر پیش فرضه که متغیر نمی تونه با عدد شروع شه.
> فقط دنبال دلیل منطقیش می گردم.
> فکر نمی کنم دلیلش این باشه که برای بالا رفتن سرعت کامپایلر و یا آسونی گرامر این فرضی رو برای کامپایلر تعریف کرده باشند!!!
> به نظر شما دلیل منطقیش چی می تونه باشه؟؟؟؟


ببینید در واقع با این سوال شما دو سوال دیگه  مطرح میشه: *نتونستند یا نمی خواستن* که رقم در ابتدای شناسه ها قرار بگیره؟ در این مورد باید گفت که *نمی خواستند،* چون در صورتی که نام شناسه ها با رقم شروع شود، در این صورت شبیه عبارات ریاضی می شود و خوانایی برنامه پایین میاید و در هنگام خواندن برنامه ممکن است به اشتباه آن را عبارات ریاضی در نظر بگیریم، نه یک شناسه!!!! همش همینه :لبخند:

----------


## h_motamed123

> ببینید در واقع با این سوال شما دو سوال دیگه  مطرح میشه: *نتونستند یا نمی خواستن* که رقم در ابتدای شناسه ها قرار بگیره؟ در این مورد باید گفت که *نمی خواستند،* چون در صورتی که نام شناسه ها با رقم شروع شود، در این صورت شبیه عبارات ریاضی می شود و خوانایی برنامه پایین میاید و در هنگام خواندن برنامه ممکن است به اشتباه آن را عبارات ریاضی در نظر بگیریم، نه یک شناسه!!!! همش همینه


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

----------

