ورود

View Full Version : آموزش: آموزش اصول طراحی کامپایلر



mohamadkazemi
جمعه 05 تیر 1394, 03:46 صبح
توضیح : منبع آموزشی ، مطالب درسی دانشگاه استنفرد . در ضمن آموزش ، جاهایی که به الگوریتم ها رسیدیم روش های پیاده سازی توضیح داده خواهد شد. آموزش از پایه شروع خواهد شد و به مراحل بالاتر ختم میشود.

*نظراتتون میتونه خیلی مفید و موثر باشه.

قسمت اول :

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

حالا که اهمیت طراحی کامپایلر رو فهمیدیم ببینیم مراحل طراحی کامپایلر چی هست :

1.فرض کنید برنامه نویس یک برنامه نوشته ، در مرحله اول برنامه ی نوشته شده از لحاظ لغوی بررسی میشه که به تحلیل لغوی برنامه معروف هست (Lexical analysis) . در این مرحله کامپایلر فارغ از اینکه برنامه مفهوم خاصی دارد یا خیر ، تک تک کلمات نوشته شده توسط برنامه نویس رو چک میکند ، که آیا این کلمه جزء زبان برنامه نویسی ( مانند جاوا ، سی پلاس پلاس و.. ) هست یا خیر ، اصولا کلمات زبان برنامه نویسی توی 4 تا دسته قرار میگیرند : 1. متغیرها .2. کلمات رزرو شده .3. اعداد . 4. علامت ها و عملگر ها .
توی این مرحله کامپایلر کلمه به کلمه برنامه ی نوشته شده رو چک میکنه ، ابتدا چک میکنه آیا این کلمه ، کلمه ی رزرو شده ی زبان هست یا خیر ، اگر نبود چک میکند متغییر هست یا خیر و به همین صورت سپس اعداد و علامت ها . اگر تمام کلمات جزء یکی از این 4 دسته قرار گرفتند برنامه از نظر لغوی خطایی ندارد ، اما اگر حتی یکی از کلمات توی این 4 دسته نباشند ، کامپایلر اعلام خواهد کرد که برنامه از نظر لغوی دارای ایراد هست ، یعنی کلمه ای توسط برنامه نویس نوشته شده که جزء زبان نیست .

مثال : فرض کنید کد زیر داخل کامپایلر سی پلاس پلاس نوشته شده است ، کامپایلر کلمه به کلمه چک میکنه ، در ابتدا کلمه while چک میشه و این کلمه داخل دسته ی کلمات رزرو شده قرار میگیره ، بعد } و این کلمه داخل علامات ، سپس z و این کلمه داخل دسته متغییر ها و به همین صورت تاآخر ، ولی کلمه ی y! داخل هیچ دسته ای قرار نمیگیره چون نه کلمه ی کلیدی هست ، نه از قوانین نامگذاری متغییرها تبعیت کرده و نه جزو اعداد و علامات هست ، پس کامپایلر گزارش خطا میدهد .


while (z){
x = !y
}

2.مرحله ی تحلیل نحوی (syntax analysis)، بعد از مرحله lexical مشخص میشه که هر کلمه از چه نوعی هست ، در مرحله ی بعدی ورودی کامپایلر همین lex ها هستند که ساخته شده ، در این مرحله کامپایلر تشخیص میده که آیا نحوه ی قرار گرفتن این اجزا در کنار هم صحیح هست یا خیر. برای مثال اول باید if نوشته شود و بعد else ، در این مرحله کامپایلر به معنای جملات اهمیت نمیده ، فقط چک خواهد کرد که آیا اجزای زبان درست در کنار هم قرار گرفته اند یا خیر ، مثلا سمت چپ = فقط یک متغیر قرار گرفته باشد ، اما اینکه آیا این انتساب از لحاظ معنایی صحیح هست یا خیر را درک نمیکند .

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

4.کامپایلر کدنوشته شده رو به صورت مستقیم به کدماشین تبدیل نمیکنه ، بلکه کدنوشته شده رو به کدی به اسم IR یا کد واسط تبدیل میکنه . در مرحله ی 4ام این کد توسط کامپایلر تولید میشود و سپس بهینه میشه .

5. تولید کد ماشین ، چون دستورات ماشین های مختلف باهم تفاوت دارد در این مرحله بسته به نوع سیستم عامل و cpu ، کد واسط به کد ماشین تبدیل میشود .

قسمت دوم : LEXICAL ANALYSIS

ضمیمه : اسلاید های مربوطه ، دانشگاه استنفرد (http://cld.persiangig.com/dl/MHFEe/12uFms50t2/Slides00.pdf)

zzkz95
جمعه 15 آبان 1394, 20:09 عصر
سلام
برای انجام یک پروژه میخوام ک شروع کنم و کامپایلر رو بخونم یاد بگیرم.مرجعی میتونید معرفی کنید؟
یا میشه بگید اسلاید های مربوط به دانشگاه استنفرد رو از کجا میتونم پیدا کنم؟
خیلی ممنون

CodeforLife
پنج شنبه 28 آبان 1394, 19:18 عصر
سلام .متشکرم . خیلی عالیه .لطفا به کارتون ادامه بدین .سپاسگزارم

png_92
جمعه 13 آذر 1394, 13:13 عصر
سلام
بهترین کتاب کامپایلر برای مطالعه کنکور ارشد چی هست؟

sabagch
پنج شنبه 03 دی 1394, 11:54 صبح
Www.hamiproje.com

JustCompiler
جمعه 21 اسفند 1394, 06:18 صبح
پس این آموزش چی شد؟؟؟؟؟؟؟؟؟؟