Compiler - Session 2
Compiler - Session 2
❖ تحلیل نحوی ) :Syntax analysis (parsingشناسایی این که چگونه این قطعات با هم مربوطند.
❖ تحلیل معنایی ) :(Semantic Analysisشناسایی معنای ساختار کلی
❖ تولید کد میانی :IR(intermediate representation) Generationطراحی یک ساختار ممکن
❖ بهینه سازی کد میانی :IR Optimizationساده کردن کد مقصد
❖ تولید :Generationایجاد ساختار
❖ بهینه سازی :Optimizationبهبود ساختار نتیجه
❖ پیش پردازشگر
❖ کامپایلر
❖ اسمبلر
❖ویرایشگر الحاق
❖ بارکننده
پيش پردازشگر
جمع آوری ماژولهای برنامه مبدا موجود در فایلهای جداگانه
اسكلت برنامه مبدا تبدیل بخشهای خالصه شده بنام درشت دستورات به احکام زبان مبدا
پيش پردازشگر
برنامه مبدا
كامپايلر
اسمبل مقصد
ي برنامه
اسمبلر
كد ماشي
سه فاز تحليل در عمل كامپايل
Count
Count==count
count++increment
increment تحلیل لغوی عبارت دستوری
تحليل گر لغوي
تحليل گر لغوي
تحليل گر نحوي
( تجزيه كننده)
Panic mode
✓ ساده ترین شیوه پوشش خطا
✓ حذف کاراکترهای متوالی از باقیمانده ورودی تا پیدا شدن نشانه قابل قبول توسط تحلیل گر لغوی
✓ کافی بودن برای یک سیستم محاسباتی محاوره ای
Symbol Table تشکيل جدول نماد
جدولی ساخته شونده توسط فازهای تحلیل ،مورد استفاده فازهای تولید کد
ذخیره رشته کاراکتری تشکیل دهنده شناسه در جدول. فاز تحليل لغوي
اضافه کردن نوع شناسه ،مورد استفاده(رویه ،متغیر و).. فاز تحليل نحوي
استفاده از اطالعات جدول برای دسترسی به متغیر و تولید کد فاز توليد كد
جدول نماد -روالها
اگر sدر جدول است ،اندیس آن بر می گردد اگر نه ،صفر بر میگردد اندیس وارده جدید مربوط به رشته sنشانه tرا بر می گرداند.
id
نوشتن تحلیلگر لغوی به زبانهای متداول برنامه نویسی روشهای پیاده سازی
سیستم و خواندن رشته ورودی با تسهیالت I/O
32
این بخش از برنامه اصلی ،که توکن ◼
بر اساس آن ساخته می شود ،لغت
) (Lexemeگفته می شود.
33
گاهی اوقات یک لغت ذخیره نمیشود و
نادیده گرفته میشود .فضای خالی هیچ
معنایی برای برنامه ندارد .بنابراین نادیده
گرفته می شود.
34
برخی از توکن ها خصیصه ای دارند که ◼
اطالعات اضافه درباره توکن را نگهداری
میکند.
35
هدف از تحليل لغوي
هر توکن یک بخش منطقی از فایل مبدأ را نشان میدهد مثل یک کلمه کلیدی ،نام متغیر و ...
هر توکن میتواند خصیصهای داشته باشد که از متن به دست می آید مثل مقدار عدد ◼
36
انتخاب توكن
چه توکنهایی مفید هستند؟ ◼
for (int k = 0; k < myArray[5]; ++k) {
cout << k << endl;
}
For {
int }
<< ;
= <
( [
) ]
++
Identifier
IntegerConstant
37
انتخاب توكن هاي خوب
معموال: ◼
لغتهای نمایشگر شناسه ها ،ثابتهای عددی ،رشته ها و غیره با هم گروه بندی میشوند.
38
پيچيدگيها
در fortranهمه فضاهای خالی حذف می شوند. ◼
در زبان PL/1کلمات کلیدی می توانند به عنوان شناسه استفاده شوند. ◼
39
چالش ها
اگر چند روش برای پویش ورودی وجود دارد ،چگونه بدانیم کدام را انتخاب کنیم؟ ◼
40