بخشی از پاورپوینت
اسلاید 1 :
معرفی کامپایلر
فصل اول
اسلاید 2 :
شکل 1-1. ساختار کلی کامپایلر
تعریف: کامپایلر برنامه ای است که به عنوان ورودی، متن یک برنامه را گرفته و سپس آن را به زبان دیگری ترجمه می کند.
1-1 - مقدمه
اسلاید 3 :
C++
کامپایلر
ورودی برنامه اجرایی
خروجی برنامه اجرایی
اسلاید 4 :
Python
مفسر (Interpreter)
ورودی برنامه اجرایی
خروجی برنامه اجرایی
اسلاید 5 :
Java
ماشین مجازی
ورودی برنامه اجرایی
خروجی برنامه اجرایی
اسلاید 6 :
1-2 - اجزای کامپایلر
بخش های مختلف یک کامپایلر به ترتیب شامل:
1) تحلیلگر لغوی2) تحلیلگر نحوی3) تحلیلگر مفهومی
4) مولد کد میانی5) بهینه ساز کد6) مولد کد نهایی
متن برنامه مبدا ابتدا در اختیار تحلیلگر لغوی قرار گرفته و سپس هر واحد عملی را بر روی آن انجام می دهد به طوریکه در نهایت، کد قابل اجرا تولید می شود.
اسلاید 7 :
تحلیل گر لغوی
تحلیلگر لغوی، Lexical Analyzer و یا Scanner نیز نامیده می شود.
تحلیلگر لغوی، وظیفه تشخیص لغات در متن برنامه را به عهده دارد.
لغات تشخیص داده شده، در قالب بسته هایی بنام ”توکن“ به واحد بعدی کامپایلر (تحلیلگر نحوی) ارسال می شود.
تحلیلگر لغوی، در صورت برخورد به حرف یا حروفی خارج از الفبای زبان برنامه نویسی، آن را به عنوان خطا گزارش می دهد.
1-2-1 – تحلیلگر لغوی
اسلاید 8 :
در صورت کشف خطا در این مرحله، تا زمانیکه خطا برطرف نشود، عمل کامپایل متوقف می شود.
انواع توکنها
مثال: a:=b+c*60;
1- کلمات کلیدی
2- عملگر
3- شناسه
4- مقادیر ثابت (اعداد و رشته ها)
5- جدا کننده ها
اسلاید 9 :
Program Test;
Var x : integer ;
Begin
x := 10 ;
s := 12.5 ;
End .
به مثال زیر توجه کنید:
Program
Var
integer
Begin
End
Test
12.5
کلمات کلیدی
شناسه ها
اعداد
عملگرها
سمیکالن ها، نقطه، فاصله ها و tab
اسلاید 10 :
1-2-2 - تحلیل گر نحوی
تحلیلگر نحوی، Parser و یا Syntax Analyzer نیز نامیده می شود.
وظیفه بررسی صحت برنامه ها از لحاظ گرامری را برعهده دارد.
چنانچه متن برنامه با گرامر زبان برنامه نویسی همخوانی نداشته باشد، تحلیلگر نحوی خطا اعلام می کند.
اگر برنامه از نظر نحوی خطایی نداشته باشد، فاز بعدی (تحلیل مفهومی) شروع می شود.
هرنوع خطا که ناشی از عدم همخوانی متن برنامه با گرامر زبان باشد، در این فاز مشخص می شود.
اسلاید 11 :
به مثال زیر توجه کنید:
توکنها در این دستور، توسط تحلیلگر لغوی مشخص می شوند:
در دستور فوق دو خطای نحوی وجود دارد که توسط تحلیلگر نحوی تشخیص داده می شود.
جداکننده کلمه کلیدی عملگر شناسه عملگر شناسه جداکننده شناسه عدد
اسلاید 12 :
1-2-3 - تحلیل گر مفهومی
تحلیلگر مفهومی، تحلیلگر معنایی یا Semantic Analyzer نیز نامیده می شود.
وظیفه تعیین صحت مفهوم و معنای دستورات موجود در برنامه را به عهده دارد.
در زبانهای برنامه نویسی، تحلیل معنایی محدود به آزمون نوع است.
اسلاید 13 :
در موارد زیر، تحلیلگر مفهومی وظیفه بررسی نوع را بر عهده دارد:
الف) انتساب مانند x:=y
ب) عملیات محاسباتی مانند x + y
ج) چک کردن نوع اندیس آرایه ها
د) بررسی تعداد پارامترهای توابع به هنگام فراخوانی
ه) بررسی نوع پارامترهای توابع به هنگام فراخوانی
و) تست در محدوده بودن اندیس آرایه ها (برای اندیسهای ثابت)
اسلاید 14 :
1-2-4 – مولد کد میانی
معمولاً برنامه هایی که توسط برنامه نویسان نوشته می شود، بهینه نیست.
هدف از بهینه سازی 1) کاهش زمان اجرای برنامه و 2) کاهش میزان حافظه مصرفی برنامه است.
به دلیل تعدد و پیچیدگی دستورات برنامه مبدا، امکان بهینه سازی خودکار آن مستقیماً وجود ندارد.
برنامه مبدا به زبانی ساده تر و با دستورات کمتر ترجمه می شود
اسلاید 15 :
1-2-5 – بهینه ساز کد
کدمیانی تولید شده در فاز قبل، توسط بهینه ساز یا Optimizer بهینه می شود.
در بهینه سازی ممکن است تعداد دستورات کمتر شود (برای کاهش زمان اجرا)
در برخی موارد ممکن است تعداد دستورات بهینه بیشتر از قبل شود (مثلاً به خاطر صرفه جویی در حافظه)
اسلاید 16 :
1-2-6 – مولد کد نهایی
وظیفه مولد کد نهایی، تولید کد به زبان ماشین است.
در این فاز کدهای میانی به گونه ای تغییر داده می شوند که قابل اجرا باشند.
مثال:
اسلاید 17 :
مثال
Area:= Pos + Rate * 50
id1:= id2+ id3 * 50
tem1:=into real 50
tem2:=id3 * tem1
tem3:= id2 + tem2
Id1:= tem3
tem1:= id3 * 50.0
Id1:= id2 + tem1
Mov id, R2
Mul 50.0 , R2
Mov R1, id1
تحلیلگر لغوی
تحلیلگر نحوی
تحلیل معنایی
تولید کد میانی
بهینه ساز
تولید کد نهایی
Var Area, Pos, Rate : real;
اسلاید 18 :
مفسرها همگام با ترجمه هر دستور، آنرا به اجرا در می آورند.
معمولاً مفسرها تک گذره اند (یعنی تمام فازهای کامپایل با هم اجرا می شوند)
این ترجمه همراه با اجرا، زمان اجرای برنامه های مفسری را طولانی می کند.
در زبانهای اسکریپتی که برای طراحی صفحات وب استفاده میشوند، کاربرد زیادی دارند.
1-3- مفسرها
اسلاید 19 :
یک تابع ضروری از یک کامپایلر، ثبت شناسه های استفاده شده در برنامه مبدا و جمع آوری اطلاعات درباره انواع صفات هر شناسه می باشد.
اطلاعات مربوط به شناسه ها (تمامی نامهایی که در متن برنامه توسط برنامه نویس تعیین می شود)، در جدولی بنام جدول نمادها یا Symbol Table نگهداری می شود.
این اطلاعات عبارتند از؛ حافظه اختصاص یافته به یک شناسه، نوع آن، محدوده عملکرد آن و در مورد نام رویه ها؛ تعداد و نوع پارامترها و روش ارسال هر پارامتر و نوع نتیجه در صورت وجود.
1-4- جدول نمادها
اسلاید 20 :
در فازهای تحلیل لغوی و نحوی، این جدول پر می شود و در سایر فازها مورد استفاده قرار می گیرد.
در فاز تحلیل مفهومی برای آزمون نوع استفاده می شود.
در فاز تولید کد، به منظور تخصیص حافظه برای متغیرها استفاده می شود.