آموزش طراحی سایت

ساخت کامپایلر

ساخت کامپایلر

به این مطلب امتیاز دهید

ساختار کامپایلر (Compiler)

همانطور که در مقالهی قبل گفته شد کامپایلر نوعی نرم افزار است که دستوراتی که برنامه نویس در قالب کد مینویسد را به زبان ماشین تبدیل میکند؛ تا CPU آنها را فهمیده و اجرا کند. این کاری که انجام میدهد شامل مراحلی است که میخواهیم دربارهی هرکدام صحبت کنیم و جزیی تر به این فرایند نگاه کنیم.

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

مراحل Compiler:

pastedGraphic.png

  • Lexical Analysis (تجزیه و تحلیل واژگان):

این فاز در ابتدا مانند یک اسکنر عمل میکند و در آن کدها به صورت مجموعهای از کاراکترها اسکن شده و تبدیل به واژگان معنیدار میشود. تحلیل گر، واژهها را به صورت نشانه (token) هایی به شکل زیر درمیاورد و آنها را به یکدیگر مرتبط میکنند.

pastedGraphic_1.png

Syntax Analyzer (تجزیه و تحلیل سینتکس):

در این فاز tokenهای به وجود آمده در فاز قبل را به صورت ورودی دریافت کرده و بررسی میکند که با کاربردشان مطابقت دارند یا خیر؟ و از آنها یک درخت درست میکند (Syntax tree) و در آن tokenها از لحاظ گرامری بررسی میشوند.

pastedGraphic_2.png

Semantic Analyzer :

این فاز درخت خروجی در فاز قبل را به عنوان ورودی دریافت میکند و وظیفهی چک کردن موارد آن را از لحاظ معنایی، type، label و flow control را دارد. ساختار Token به وسیله مفسر و کامپایلر معنا پیدا میکند و در نهایت Object code تولید میشود. در این مرحله تمامی کدها به دستوراتی تبدیل میشوند که برای پردازنده قابل فهم باشند و در نهایت برنامه اجرا خواهد شد.

pastedGraphic_3.png

Intermediate Code Generation

بعد از اینکه آنالیز معنایی (Semantic) صورت گرفت، کامپایلر شروع به تولید کردن یک کد میانی (Intermediate Code) از روی کد اصلی برای ماشین مورد نظر میکند. زمانی که کد میانی تولید میشود، این کد بخش آنالیز را برای همهی compilerها یکسان نگه میدارد؛ به همین علت هر دستگاه جدید، دیگر نیازی به یک کامپایلر کامل ندارد.

pastedGraphic_4.png

Code Optimizer

این فاز کد میانی تولید شده در فاز قبل را بهینه سازی میکند و بر روی آن کارهایی مانند حذف خطوط غیر ضروری در کد و مجموعهای از کارهای دیگر که منجر به اجرای سریعتر برنامه بدون اتلاف منابع (CPU, Memory) میشود، انجام میدهد.

pastedGraphic_5.png

یک فرایند بهینه سازی کد (Code optimizer) باید از سه قانون پیروی کند:

  1. کد خروجی نباید به هیچ وجه معنی برنامه را تغییر دهد.
  2. بهینه سازی باید سرعت کد را افزایش دهد و در صورت امکان، برنامه باید تعداد کمتری از منابع را در خواست کند.
  3. بهینه سازی باید خود سریع عمل کند و نباید روند کامپیال را به تاخیر اندازد.

بهینه سازی (optimization) به دو نوع تقسیم میشود:

بهینه سازی مستقل از ماشین ( Machine-independent optimization)

  • کامپایلر کد میانی را میگیرد و قسمتی از کد را که حاوی ثبت CPU و حافظه کامل نیست را تغییر میدهد. بعنوان مثال:

این نوع نه تنها سیکلهای CPU را ذخیره میکند، بلکه میتواند در هر پردازندهای مورد استفاده قرار بگیرد.

بهینه سازی وابسته به ماشین ( Machine-dependent optimization)

  • زمانی انجام میشود که target code تولید شده و سپس بر طبق نوع ماشین تغییر پیدا کرده باشد. این نوع شامل CPU و حافظهی کامل است. این روش تمام تلاش خود را میکند که از حافظه حداکثر استفاده را ببرد.

ساختار کامپایلر (Compiler)

Target Code Generation

در این فاز تولید کنندهی کد، کد بهینه شده در فاز قبل را به مجموعهای از کدهای ماشین با قابلیت       جابجایی تبدیل میکند.

Symbol Table

یک ساختار دادهی مهم است که کل فازهای کامپایلر و نیز تمام نام شناسههای موجود و نوع آنها در اینجا نگهداری میشوند. این جدول کمک میکند که کامپایلر سریعتر یک شناسه را پیدا کرده و بازیابی کند.

جدول نمادها با توجه به زبانی که در دست استفاده است میتواند اهداف زیر را ارائه دهد:

  • ذخیره کردن تمام اسامی موجودات در یک ساختار و در یک مکان مشخص.
  • بررسی کردن اینکه یک متغیر شناسایی شده است یا خیر.
  • چک کردن اینکه تمامی تکالیف و اصطلاحات در کد منبع از نظر معنایی درست باشند.
  • مشخص کردن دامنهی یک نام.

جدول نمادها صرفا یک جدول است که میتواند هم بصورت جدول خطی و هم ترکیبی(hash) باشد. Symbol table ورودی را برای هر نام در قالب زیر حفظ میکند:

ساختار کامپایلر (Compiler)

بعنوان مثال اگر یک جدول نماد مجبور است اطالاعات مربوط به جمله متغیر زیر را دخیره کند:

ساختار کامپایلر (Compiler)

باید به این صورت ذخیره شود:

ساختار کامپایلر (Compiler)

ساختار کامپایلر را همانطور که مشاهده کردیم بسیار گستره و پیچیده است و برای انجام یک فرایند که تبدیل کدهای برنامه نویسی به کد ماشین است باید مراحلی را طی کند که به این هدف برسد. جالب بود که تمام این مراحل جز به جز به هم وابسته هستند مثل بقیه چیزهایی که دارای ساختاری هستند و برای یک هدف به هم پیوستهاند و هر یک وظایفشان را انجام میدهند. امیدوارم که این مقاله برای شما مفید واقع شود.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا