PDA

View Full Version : سوال درباره کامپایلرها



hamid411
سه شنبه 03 دی 1387, 09:06 صبح
آقایون من چند تا سوال دارم،
اولین سوال که نزدیک بود سرش با استادمون دعوا کنم این بود که من می گفتم بهینه سازی یه فاز اختیاریه ولی استاد می گفت نه،حالا به نظر شما کی درست گفته ؟؟؟

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

ممنون

manager
سه شنبه 03 دی 1387, 09:25 صبح
می شه همیشه غذا رو خام خام خورد ؟ اگر می شه می تونیم بگیم پخت غذا اختیاریه و نه اجباری. در هنگام تولید کد به شدت کدهای نا مناسب تولید می شه این کدها یا باید برای معماری ماشین خاص بهینه بشه مثلا برای پشتیبانی از خط لوله یا برای افزایش سرعت و حذف کدهای اضافی. اصلا این روزها بحث در مورد کامپایلرها به بحث در مورد بهینه سازی محدود شده و این مطلب حاکی از اینه که کامپایلر این روزها به جز بهینه سازی بخشی برای بحث بیشتر ندارد و مسائل آن تقریبا حل شده است.

در مورد سوال دوم که در مورد ترتیب اجرای تحلیلگرهاست باید بگم. آیا ترتیب ریختن غذا تو بشقاب، خوردن و سپس شستن بشقاب و .. مهمه ؟ خوب تا Token نباشه که Syntax Analyzer نمی تونه کاری بکنه تا کد نباشه که Optimizer چی رو بهینه کنه ؟!!

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

hamid411
سه شنبه 03 دی 1387, 11:47 صبح
سلام و دستت درد نکنه بابت جوابها
درمورد سوال آخرقانع شدم
در مورد سوال اول راستش نه،خب پس چجوریه که تو ویژوال استودیو میشه از تو تنظیمات بهینه سازی رو برداشت ؟بعدشم تو یکی از کتابهای آقای جعفرنژاد خونده بودم که اختیاریه
اما سوال دوم هم راجع به lexical درسته ولی درباره syntax و semantic چی ؟a

Mehdi Asgari
سه شنبه 03 دی 1387, 13:19 عصر
صفحۀ 5 کتاب Aho (http://www.amazon.com/Compilers-Principles-Techniques-Tools-2nd/dp/0321486811/ref=pd_lpo_k2_dp_k2a_1_img?pf_rd_p=304485601&pf_rd_s=lpo-top-stripe-2&pf_rd_t=201&pf_rd_i=0201100886&pf_rd_m=ATVPDKIKX0DER&pf_rd_r=1DES7TMDMV4AE59786X5)

Since optimization is
optional, one or the other of the two optimization phases shown in Fig. 1.6 may
be missing.
صفحۀ 25 کتاب Compilers and Compiler Generators (http://scifac.ru.ac.za/compilers/):

A code optimizer may optionally be provided, in an attempt to improve the intermediate code in
the interests of speed or space or both
بله دوست عزیز بهینه سازی یک مرحلۀ اختیاریه (گرچه تقریبا تمام کامپایلر ها این کار رو انجام میدن)

manager
سه شنبه 03 دی 1387, 13:39 عصر
من هم که بهتون گفتم مثل خام خواریه !!!

در مورد ترتیب اجرای Syntax Analyzer و Semantic Analyzer باید بگم خود شما وقتی یک جمله رو می بینی اگر به هم ریخته باشه و جای فعل و فاعل عوض شده باشه یا کلمات اشتباه داخلش به کار رفته باشه خودتو درگیر فهم معنی اون جمله نمی کنی چون جمله ذاتا اشتباهه و ممکنه هر معنی داشته باشه ولی اگر یک جمله صحیح رو به شما بدن یعنی اینکه قبلا از نظر نگارش و نحو تائید شده تازه روی معنای جمله فکر می کنی، درسته ؟!
در ضمن اون تنظیمات بهینه سازی تو ویژوال استادیو یک فاز بسیار پیشرفته تر و کندتر الحاقیه که کاربر می تونه در مورد انجام شدن یا نشدنش تصمیم بگیره و جزء فازهای اصلی کامپایل به حساب نمی یاد. یعنی اگر تیکش رو بر داری دلیل بر این نیست که کدهای شما بهینه سازی نشده اند.
در ضمن آقای جعفرنژاد که از خودش کتاب نداره ...احتمالا منظور شما همون آلفرد ایهو بوده ...

hamid411
سه شنبه 03 دی 1387, 15:38 عصر
دست گل همتون درد نکنه،مشکلم تقریبا حل شد،
فقط خیلی خوشحال میشم یه کم بیشتر راجع به این که گفتی تو ویژوال استودیو اگر هم تیکشو بردارم باز هم بهینه میشه؟؟؟پس اون تیک دقیقا برای چیه ؟