تولید کننده کد نهایی:کد میانی بهینه شده در مرحله قبل تبدیل به کدی به نام کد زبان ماشین می شود.
Printable View
تولید کننده کد نهایی:کد میانی بهینه شده در مرحله قبل تبدیل به کدی به نام کد زبان ماشین می شود.
Scanner(پویشگر) :به واحدی از کامپایلر گفته می شود که کار تحلیل واژه را انجام می دهد.
Parser:به واحدی از کامپایلر گفته می شود که تحلیل نحوی را انجام می دهد.(تحلیل نحوی یعنی ترتیب را گارانتر می کند یعنی اول فاعل بیاید بعد مفعول بعد فعل...طبق گرامر عمل میکند).
کار تحلیل گر مفهومی :تعیین صحت مفهوم جملات میباشد؛ممکن است یک جمله از لحاظ نحوی صحیح باشد ولی از بابت مفهومی دارای خطا باشد مثل«علی اتش را خورد».تحلیل گر مفهومی وابسته به نوع اسمی و متغییرها که در جدول نمادها است، می باشد.
مولد کد میانی :بخشی از کامپایلر است که در ورودی خود جملات تشخیص داده شده توسط تحلیل گر مفهومی را پذیرفته و در خروجی کد وابسته یا میانی تولید می کند ،کد میانی به سادگی قابل تبدیل است و به زبان ماشین نزدیک تر می باشد اما مستقل از ساختار و جزیيات هر گونه ماشین می باشد.
هدف از بهینه سازی کد میانی :تقلیل حجم و افزایش سرعت اجرایی کد ماشین حاصل از کار کامپایلرمی باشد.برای این منظور بهینه ساز،کد میانی حاصل از مولد کد میانی را مورد تحلیل قرار می دهد(این قسمت یک فاز اختیاری است)به طور معمول این کار با ازمون نمادی برنامه ها تحقق می یابد،به این ترتیب که مفهوم برنامه ها در زبان کامپایل با تبدیل به کد میانی به یک گراف به نام گراف جریانمورد بررسی قرار می گیرد و سعی می شود تاحجم کد حاصل را تقلیل داده و در صورت امکان کد زاید را مشخص و حذف نماید.در این مرحله برای انجام عمل بهینه سازی و رسیدن به اهداف ان ساختار اسمبلی و کد ماشین و امکانات سخت افزار ماشین در نظر گرفته می شود و از دستورالعمل هایی که سریع تربا حجم کمتر به اجرا در میایند استفاده می شود.البته این مرحله را ممکن است در ایجاد کامپایلر حذف نمود. برای مثال ممکن است فاز بهینه سازی یا تحلیل مفهومی در یک کامپایلر اصلا وجود نداشته باشد و نیز ممکن است کلیه موارد فوق در یک مرحله وبه صورت هم زمان اجرا شود.معمولا عملیات کامپایل برنامه ها در دو قسمت یا به اصطلاح در دو فاز phase انجام می شود.
خطا پرداز یا error handling : هر بار خطایی در یکی از مراحل پیش آید ،رویدادی به نام خطاپرداز فراخوانی می شود،این بخش سعی می کند خطا را به نحوی برطرف کند تا در نتیجه کامپایلر بتواند علاوه بر اینکه تعداد خطاهای بیشتری را تشخیص می دهد با تشخیص اولین خطا متوقف نشود ،وظیفه اصلی این بخش راهنمایی واضح و شفاف برنامه نویس برای رفع خطای برنامه نوشته شده می باشد.معمولا بیشترین خطای تشخیص داده شده در یک کامپایلر در قسمت (scanner,parsser) اتفاق می افتد.
جدول نمادها :یکی از کارهای مهم و اساسی کامپایلر ثبت شناسه های استفاده شده در برنامه ورودی و جمع اوری اطلاعات و مشخصات درباره هر شناسه است. این مشخصات می توانند شامل ادرس حافظه ی اختصاص داده شده به شناسه ،نوع ان،محلی از برنامه که این شناسه تعریف شده(حوضه ی دیدscope )،اسم ان شناسه،در مورد توابع،تعداد ونوع آرگومان های آنها و موارد جزعی از این قبیل می باشد.
در جدول شناسه ها،به ازای هر شناسه یک رکورد مخصوص آن شناسه وجود دارد.این جدول امکان دستیابی سریع به شناسه را دارد و مشخصات انها را به ما می دهد.
در کامپایلر ودر مرحله تحلیل لغوی کلیه شناسه ها پس از اینکه تشخیص داده شدند وارد جدول نشانه ها می شوند و در مرحله دیگر کامپایلر یا فازهای بعدی اطلاعات دیگری به این جدول اضافه می شود ودر فازهای مختلف مورد استفاده قرار می گیرد.
لازم به ذکر است که برای هر کامپایلر یک جدول نشانه های ثابتی از قبیل:کلمات کلیدی،شناسه های معتبرو انواع داده ای وجود دارد.
Front_end ـ 5 فاز اول ابتدای کامپایلر که وابسته به زبان منبع است و مستقل از زبان ماشین می باشد و شامل مراحل زیر است:
- متن برنامه مورد کامپایل
- تحلیل گر لغوی
- تحلیل گرنحوی
- تحلیل گر مفهومی
- مولد کد میانی
Back_End به 3 فاز اخر کامپایلر که وابسته به زبان ماشین است و شامل مراحل زیر است :
یادآوری :
- بهینه سازی
- مولد کد
- بهینه ساز کد میانی
به سه نحو می توانیم یک درخت را پیمایش کنیم:
- PREORDER (چپ-ریشه-راست)
- POSTORDER (چپ-راست-ریشه)
- INORDER (ریشه-چپ-راست)
نکته : مولد کد نهایی یک ماژول است و بستگی به سخت افزار ماشین زبان مقصد دارد.