آموزش زبان با داستان انگلیسی

همان‌طور كه مي‌دانيم براي آن‌كه يك برنامه نوشته شده به زبان‌هاي سطح بالا، در رايانه قابل اجرا باشند بايد به زبان ماشين ترجمه شوند كه اين كار توسط دو دسته از نرم‌افزارها قابل انجام است. به يك دسته از آنها مفسر يا Interpreter گفته مي‌شود و دسته ديگر مترجم ياCompiler نام دارند.
در ادامه قصد داريم به طريقه كاركرد يك كامپايلر بپردازيم و آن را با نگاهي جزئي‌تر بررسي كنيم. آشنايي با طرز كار كامپايلرها و مفسرها و درك مفاهيم موجود در آنها به برنامه‌نويس كمك مي‌كند تا برنامه‌هاي بهتر و بهينه‌اي بنويسد.
يافتن خطا
بخش مهمي از فرآيند ترجمه مربوط به يافتن خطا در برنامه و اعلام آن به برنامه‌نويس است. در يك برنامه انواع مختلفي خطا ممكن است وجود داشته باشد كه بخشي از آنها توسط كامپايلر قابل تشخيص است و بخش ديگر تنها با تست و آزمون يافت مي‌شود و بايد توسط برنامه‌نويس رفع شود.

همان‌طور كه مي‌دانيم براي آن‌كه يك برنامه نوشته شده به زبان‌هاي سطح بالا، در رايانه قابل اجرا باشند بايد به زبان ماشين ترجمه شوند كه اين كار توسط دو دسته از نرم‌افزارها قابل انجام است. به يك دسته از آنها مفسر يا Interpreter گفته مي‌شود و دسته ديگر مترجم ياCompiler نام دارند.
در ادامه قصد داريم به طريقه كاركرد يك كامپايلر بپردازيم و آن را با نگاهي جزئي‌تر بررسي كنيم. آشنايي با طرز كار كامپايلرها و مفسرها و درك مفاهيم موجود در آنها به برنامه‌نويس كمك مي‌كند تا برنامه‌هاي بهتر و بهينه‌اي بنويسد.
يافتن خطا
بخش مهمي از فرآيند ترجمه مربوط به يافتن خطا در برنامه و اعلام آن به برنامه‌نويس است. در يك برنامه انواع مختلفي خطا ممكن است وجود داشته باشد كه بخشي از آنها توسط كامپايلر قابل تشخيص است و بخش ديگر تنها با تست و آزمون يافت مي‌شود و بايد توسط برنامه‌نويس رفع شود.



يك كامپايلر تنها در صورتي برنامه نهايي و فايل اجرايي را توليد مي‌كند كه هيچ‌گونه خطاي قابل تشخيص توسط خود را در برنامه پيدا نكند. هنگام بيان طرز كار كامپايلر، به خطاهايي كه ممكن است رخ دهد اشاره خواهيم كرد.

هزاران زبان برنامه‌سازي با تنوع كاربرد و نحوه كار تاكنون طراحي شده است كه بسياري از آنها نيز به جاي آن‌كه زبان مبدا را به زبان ماشين تبديل كنند، آن را به زبان ديگري تبديل مي‌كنند؛ اما صرف‌نظر از اين تنوع، طرز كار كامپايلرهاي آنها از يك‌سري قواعد و اصول واحد پيروي مي‌كند و تنها تفاوت بين آنها در پياده‌سازي و جزييات كار آنهاست.

بخش‌هاي كامپايلر
هر كامپايلر را مي‌توان به دو بخش عمده تقسيم كرد. يك بخش آن براي عمل خواندن متن برنامه و تجزيه آن به اجزاي تشكيل‌دهنده و توليد يك نمايش مياني از برنامه مبدا است كه به آن تحليل گفته مي‌شود. در اين مرحله با استفاده از جداكننده‌ها و كاراكترهاي كنترلي موجود در برنامه، تك‌تك كلمات تشخيص داده مي‌شود و نقش آنها مشخص مي‌شود و پس از آن يك نمايش جديد از برنامه با استفاده از اين تحليل توليد مي‌شود.
بخش دوم كار كامپايلر مربوط به ايجاد برنامه مقصد از اين نمايش مياني حاصل از بخش تحليل است كه به آن عمل سنتز گفته مي‌شود.
بخش اول كار يعني بخش تحليل، پيچيدگي‌ چنداني ندارد و اكثر جزييات و تكنيك‌هاي خاص مربوط به بخش سنتز خواهد بود. حين تحليل برنامه، اجزا و همچنين اعمالي كه توسط برنامه انجام مي‌شود توسط كامپايلر مشخص شده و در يك ساختار سلسله مراتبي به نام درخت ثبت مي‌شود كه اين درخت در مرحله سنتز به كار گرفته مي‌شود. نرم‌افزارهاي مختلفي هستند كه برنامه‌هاي مبدا را دستكاري مي‌كنند و به عبارتي نوعي تحليل روي برنامه‌ها انجام مي‌دهند كه از جمله مي‌توان بهPretty Printer ، بررسي‌ كننده‌هاي ايستا و ويرايشگرهاي ساختار اشاره كرد.

Pretty Printer
يك Pretty Printer ابزاري است كه يك برنامه را تحليل مي‌كند و آن را به گونه‌اي تغيير مي‌دهد كه ساختار برنامه واضح و خوانا شود. اين وضوح و خوانايي مي‌تواند تغيير قلم (font) بخش‌هاي بخصوصي از برنامه يا ايجاد تورفتگي در ساختار برنامه باشد.
در اينجا خوب است به اين نكته اشاره كنيم كه تورفتگي اصطلاحا به شروع نوشتن كد از چند كاراكتر جلوتر از ابتداي خط جديد گفته مي‌شود. اين كار براحتي ساختارهاي تو در تو را قابل تشخيص كرده و خوانايي برنامه را بالا مي‌برد.
تعداد كاراكترهايي كه بايد در تورفتگي از ابتداي خط جديد در نظر گرفت، به عمق يك ساختار در برنامه بستگي دارد.

بررسي‌‌كننده‌هاي ايستا
يك بررسي‌كننده ايستا سعي بر آن دارد كه برنامه را خوانده و بدون اجراي برنامه بعد از تحليل، خطاهاي نهفته در برنامه را پيدا كند. به عنوان مثال، يك بررسي‌كننده ايستا ممكن است بخش‌هايي از برنامه را كه هرگز اجرا نمي‌شوند پيدا كند و به برنامه‌نويس اعلام كند. با توجه به اين اعلام يا اشكالي در برنامه وجود دارد كه اجازه نمي‌دهد برنامه هرگز به آن قسمت از كد برسد كه برنامه‌نويس با پي بردن به اين مساله، اشكال را رفع كرده و آن بخش را دسترسي‌پذير مي‌كند و يا با صلاحديد خود آن بخش را حذف مي‌كند تا از حجم كد كم كند. البته اين امكان نيز وجود دارد كه برنامه‌نويس به منظور خاصي آن بخش را به برنامه خود اضافه كرده باشد.
يك بررسي‌كننده ايستا همچنين مي‌تواند متغيرهايي را كه قبل از تعريف به كار گرفته شده‌اند، تشخيص دهد و يا متغيرهاي تعريف شده بلااستفاده را به برنامه‌نويس اعلام كند. اين نوع بررسي‌كننده، برنامه‌نويس را در تشخيص و رفع بسياري از خطاهاي منطقي ياري مي‌رساند.

ويرايشگر ساختار
يك ويرايشگر ساختار، رشته‌اي از دستورات را براي ايجاد يك برنامه مبدا به عنوان ورودي دريافت مي‌كند. اين ويرايشگر نه تنها اعمال ايجاد و اصلاح يك متن از ويرايشگر متن معمولي را انجام مي‌دهد، بلكه متن برنامه را تحليل كرده و يك ساختار سلسله مراتبي مناسب روي برنامه مبدا قرار مي‌دهد. بنابراين ويرايشگر ساختار، قادر به انجام كارهاي بيشتري است كه براي آماده‌سازي برنامه‌ها مفيد هستند. براي مثال مي‌تواند بررسي كند كه ورودي به طور صحيح وارد شده باشد. قادر است كلمات كليدي را به طور خودكار در برنامه قرار دهد. به عنوان مثال زماني كه كاربر كلمه While را كه يك كلمه كليدي از ساختار گردشي است، تايپ مي‌كند، ويرايشگر، كلمه كليدي ديگر اين ساختار يعني do را به طور خودكار در متن قرار مي‌دهد و به كاربر يادآوري مي‌كند كه بين آنها بايد يك شرط قرار گيرد.
همچنين مي‌تواند از كلمه begin كلمه end و از پرانتز باز، براكت باز يا آكولاد باز، به ترتيب پرانتز بسته، براكت بسته و آكولاد بسته را نتيجه بگيرد و آن را در متن برنامه قرار دهد تا علاوه بر سرعت بخشيدن به برنامه‌نويسي، از بسياري خطاها پيش‌گيري كند.

پيش‌پردازشگر
علاوه بر كامپايلر، چندين برنامه ديگر ممكن است براي ايجاد يك زبان مقصد قابل اجرا، لازم باشد. برنامه مبدا ممكن است به ماژول‌هايي تقسيم شود كه در فايل‌هاي مجزا ذخيره شده‌اند. كار جمع‌آوري برنامه مبدا گاهي اوقات به يك برنامه مجزا به نام پيش‌پردازشگر محول مي‌شود. اين پيش‌پردازشگر ممكن است بخش‌هاي خلاصه شده‌اي را به احكام زبان مبدا تبديل كند.
برنامه مقصدي كه توسط كامپايلر ايجاد مي‌شود، قبل از اين‌كه قابل اجرا باشد، ممكن است نياز به پردازش‌هاي بيشتري داشته باشد. كامپايلر كد زبان اسمبلي توليد مي‌كند كه توسط اسمبلر به كد ماشين ترجمه شده و سپس با تعدادي روال كتابخانه‌اي ادغام شده و بعد به كدي تبديل مي‌شود كه عملا روي ماشين قابل اجراست.
در يك جمع‌بندي كلي مي‌توان اين طور بيان كرد كه اسكلت برنامه مبدا به پيش‌پردازشگر تحويل داده مي‌شود.
پيش‌پردازشگر پس از انجام امور اوليه، خروجي خود را به عنوان برنامه مبدا به كامپايلر مي‌دهد. كامپايلر پس از انجام امور مربوط به كامپايل، در صورتي كه با هيچ‌گونه خطاي قابل تشخيصي مواجه نشد، كد زبان مقصد يعني اسمبلي توليد مي‌كند و آن را به عنوان ورودي به اسمبلر مي‌سپارد و اسمبلر آن را به كد ماشين جابه‌جا‌پذير تبديل مي‌كند. اين كد ماشين هنوز قابل اجرا نيست. در اين مرحله ممكن است به تعدادي روال كتابخانه‌اي نيز نياز باشد.
اين روال‌ها به همراه كد ماشين جابجا‌پذير به بار كننده و پيوند دهنده داده مي‌شود تا در نهايت كد ماشين قابل اجرا توليد شود.

 

 

لینک کوتاه پست
  • نکات مهم
    1- لطفا نظر خود را با زبان فارسی بیان کنید
    2- رایتم نظرات اسپم و تبلیغی شما را تایید نمی کند
    3- لطفا نظرات شما بدون ابهام و واضح باشد
  • نام
    ایمیل (منتشر نمی‌شود) (لازم)
    وبسایت
    :):(;):D;)):X:?:P:*=((:O@};-:B/:):S
    نظر خصوصی
    مشخصات شما ذخیره شود ؟[حذف مشخصات] [شکلک ها]
    کد امنیتی