PDA

View Full Version : کامپایلر ها چگونه کار می کنند



Seyyed ali
چهارشنبه 06 شهریور 1387, 10:48 صبح
راستش من قبلا فکر می کردم کامپایلر برنامرو به زبان ماشین تبدیل می کنه اما تو این عکس دیدم که به یک زبان میانی تبدیل می کنه
می خواستم بدونم این زبان میانی چیست؟

http://i34.tinypic.com/16ljv3n.jpg

esalat83
چهارشنبه 06 شهریور 1387, 15:18 عصر
با سلام خدمت دوست عزیز

این کد میانی برای این در نظر گرفته می شه که یک برنامه از یک زبان به زبان ماشین ترجمه اش مثل j2ee که یک ماشین ترجمه کد جاوا یا واسط بر روی ماشین های دیگه هست عمل می کنه ؛ رو راحت تر بکنه و این کد میانی یک جورایی مثل زبان اسمبلی که بین زبان ماشین و زبان های برنامه نویسی در نظر گرفته می شه ،شباهت داره.

Seyyed ali
چهارشنبه 06 شهریور 1387, 16:22 عصر
من هم در مورد این نوع فناوری ها مثل .net و java اطلاع داشتم اما این مطلب رو برای gcc و زبانهای c ,c++, Fortran دیدم
آیا تمام کامپایلر ها اینجوری عمل می کنند؟

saed2006
چهارشنبه 06 شهریور 1387, 17:05 عصر
بله
اكثر كامپايلر ها مرحله تبيديل كد مياني هم دارند
و هدف اصلي شم اينه كه تا قبل از توليد كد مياني 90 در صد از كارهاي كامپايل انجام ميشه
و 10 در صد باقي مانده رو بسته به زبان مقصد انجام ميدهند بنابراين 90 كار براي همه زبان هاي مقصد يكسان ميباشد.

Seyyed ali
پنج شنبه 07 شهریور 1387, 06:32 صبح
این کد میانی مثل اسمبلی است؟

saed2006
پنج شنبه 07 شهریور 1387, 08:52 صبح
خير اسمبلي ميتواند كد نهايي باشد.
syntax كد مياني operator a1,a2,a3
يك عملگر و حداكثر سه دستور
مثل:t2,104,t1,*
اين همانند دستور mul اسمبلي عمل ميكتد.

Seyyed ali
پنج شنبه 07 شهریور 1387, 11:13 صبح
چجوری می تونم در مورد این کد میانی اطلاعات بیشتری بدست بیارم
سایت-مرجع -کتاب؟

Seyyed ali
پنج شنبه 07 شهریور 1387, 11:14 صبح
یه چیز دیگه این کد میانی تفسیر میشه یا ترجمه؟

mehdad.koulab
پنج شنبه 07 شهریور 1387, 15:37 عصر
سلام دوستان
يك سوال ساده دارم كه چند وقتي بود ميخواستم بپرسم كه حالا ميپرسم اصلا اين كامپايلر چيكار ميكنه؟ ميگيم برنامه رو به زبان ماشين تبديل ميكنه قبول اما چجوري مثلا دستور زيرو به چي تبديل ميكنه؟ با تشكر


for(i=0;i<n;i++)
{
...
}

saed2006
پنج شنبه 07 شهریور 1387, 17:37 عصر
در جواب اقای mehdad.koulab
کامپایلر عمل کامپایل رو توی چند مرحله انجام میده:که سه مرحله مربوط به تحلیل و مراحل پایانی تولید نامیده میشود.
1-تحلیل لغوی
2-تحلیل نحوی
3-تحلیل معنایی
4-تولید کد میانی
5-بهینه سازی کد میانی
6-تولید کد نهایی

saed2006
پنج شنبه 07 شهریور 1387, 17:46 عصر
تحلیل لغوی:
همون طور که از اسمش پیداست هر لغت برنامه رو با syntax زبان مقایسه کرده در صورت قانونی بودن اون لغت لغت بعدی رو میخونه.
و این کار رو تا ÷ایان یافتن برنامه ادامه میده.
به این میگن شناسایی توکن ها.

saed2006
شنبه 09 شهریور 1387, 10:59 صبح
بنا بر این
ابتدا تمام لغتها یکی یکی شناسایی شده و مشخصاتشون تو جدول ذخیره میشوند.لغات کلیدی زبان معمولا از قبل داخل جدول ذخیره شده اند.
÷س ابتدا for به عنوان یک توکن شناسایی میشه مشخصاتش از جدول خوانده شده و به مرحله تحلیل نحوی داده میشود.تحلیل نحوی هم شروع میکنه به بسط دادن درخت پارس و اونو تا اونجایی که میتونه گسترش میده.
اگه در این مورد سوالی بود مطرح کنین تا پاسخ بدم.

mehdad.koulab
شنبه 09 شهریور 1387, 12:00 عصر
سلام وتشكر
راستشو بخواين من اصلا از طريقه كار كامپايلرها سر در نميارم. اگه سوالام ساده است شرمنده.
اين درخت پارس چيه؟ و گفتين كه for به عنوان يه توكن شناخته ميشه و مشخصاتص از جدول خوانده ميشه كدوم جدول؟ با تشكر

saed2006
شنبه 09 شهریور 1387, 14:02 عصر
بعد از شناسایی توکن مشخصات اونها در جدولی به نام symble table ذخیره میشه.
مثلا اگه توکن از نوع متغیر بود مشخصاتی از قبیل نوع اسم و بعد اون متغیر میره تو جدول ذخیره میشه.
بنابراین واسه هر نوع توکنی (متغیر ها,کلمات کلیدی,عملگرها ...)مقادیری توی جدول علائم ذخیره میشه.
و در طول کام÷ایل مکررا مورد استفاده قرار میگیرد.

saed2006
شنبه 09 شهریور 1387, 14:12 عصر
ساخت درخت پارس از روی گرامر های اون زبان بدست میاید.
درخت پارسی کام÷ایلر واسه این عبارت میسازه رو میتونید از لینک زیر ببیند
a+n)*1)

http://buildfarm.st.ewi.tudelft.nl/releases/strategoxt2/strategoxt-manual/unstable/manual/chunk-chapter/tutorial/xt/parsing/parse-tree.png
البته این درخت به صورت یکجا ساخته نمیشه و با خواندن هر توکن گسترش میابد.