کامپیوتربرنامه نویسی

پخش - است ... انواع کامپایلر. تبدیل و برنامه های پخش

برنامه، و همچنین مردم را به ترجمه از یک زبان به زبان دیگر نیاز به یک مترجم و یا ترجمه.

مفاهیم اساسی

این برنامه یک نمایش زبانی از محاسبات است: من → P → P (من). یک مترجم برنامه ای است که به برنامه ورودی P و برخی از ورودی x عرضه می شود. آن را در P X را انجام میدهد: من (P، X) = P (X) است. واقعیت این است که تنها یک ترجمه قادر به انجام تمام برنامه های ممکن (که می تواند در سیستم رسمی نمایندگی) وجود دارد تورینگ کشف بسیار عمیق و قابل توجه است.

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

بعضی از انواع مترجمان نام بسیار عجیب و غریب:

  • اسمبلر ترجمه برنامه به زبان اسمبلی به زبان ماشین.
  • کامپایلر یک زبان سطح بالا به زبان کمتر ترجمه.

P → X → Q. است که ∀x: - پخش برنامه ای است که به عنوان داده های ورودی این برنامه در برخی از زبان S و تولید برنامه T در چنین راهی که آنها هر دو به همان معانی است. P (X) = Q (x) را.

اگر پخش کل برنامه را به چیزی تفسیری، آن است که تلفیقی قبل از کامپایل اجرا، و یا AOT به نام. کامپایلر AOT را می توان در سری استفاده می شود، که دومی است که اغلب نصب، برای مثال:

کد منبع کامپایلر → (ترجمه) → → مونتاژ کد اسمبلی (کامپایلر) کد → → ماشین CPU (مترجم).

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

بسیاری از زبان اجازه می دهد برای اجرای کد در زمان کامپایل و کد جدید کامپایل در زمان اجرا.

مرحله ترجمه

پخش شامل مراحل تجزیه و تحلیل و سنتز:

تجزیه و تحلیل کد منبع → → → ژنراتور نمایندگی مفهومی (سینت سایزر) → کد هدف.

این به خاطر این دلایل:

  • هر روش دیگر مناسب نیست. ترجمه کلمه به سادگی کار نمی کند.
  • راه حل های مهندسی خوب: اگر شما می خواهید به ارسال مترجمان برای زبان های M و N منبع هدف قرار نیازی ارسال تنها برنامه های ساده M + N (polukompilyatorov) به جای پیچیده M × N (کل مترجمان).

با این حال، در عمل، یک مفهومی بسیار به ندرت به اندازه کافی رسا و به اندازه کافی قدرتمند برای پوشش هر منبع و هدف قابل تصور زبان. در حالی که برخی قادر به نزدیک به این بود.

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

ترجمه رکورد

منبع، مقصد و پایه: - پخش یک برنامه یا سخت افزار که شامل سه زبان است. آنها را می توان در یک T شکل نوشته شده است، به سمت چپ اصلی، راست و هدف پایه در زیر.

سه نوع از کامپایلر وجود دارد:

  • پخش - samokompilyator است اگر آن را به زبان مبدأ اساسی مطابقت دارد.
  • کامپایلر که زبان مقصد قبل از شروع درمان، به نام samorezidentnym است.
  • پخش - متقاطع-کامپایلر، اگر او را هدف قرار و زبان پایه های مختلف.

چرا این مهم است؟

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

  • متن قالب بندی.
  • نمایش داده شد زبان به پایگاه داده.
  • معماری کامپیوتر پیشرفته،
  • مسائل بهینه سازی کلی؛
  • GUI ها؛
  • زبان های برنامه نویسی؛
  • کنترل؛
  • ماشین های مجازی؛
  • ترجمه ماشینی.

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

شما همچنین می توانید یاد بگیرید که چگونه برای نوشتن برنامه های بهتر، از ایجاد مترجم برای زبان معنی درک بهتری از پیچیدگیهای و ابهامات آن است. در این مطالعه از اصول کلی رادیو و تلویزیون همچنین اجازه می دهد شما را به تبدیل شدن به یک طراح خوب زبان. بنابراین اهمیتی چگونه زبان اگر آن را نمی تواند به طور موثر اجرا شود شیب دار؟

فن آوری جامع

فناوری کامپایلر را پوشش می دهد بسیاری از مناطق مختلف علوم کامپیوتر:

  • نظریه صوری زبان: دستور زبان، تجزیه، محاسبات؛
  • معماری کامپیوتر: مجموعه دستورالعمل، RISC یا CISC، سیکل ساعت هسته پردازش خط لوله، و غیره؛
  • مفاهیم زبان های برنامه نویسی، برای مثال، انجام یک کنترل ترتیب، اجرای شرطی، تکرار، بازگشت، تجزیه کاربردی، پیمانهای بودن، هماهنگ سازی، متا برنامه نویسی، دامنه، ثابت خرده انواع، قالب ها، نوع خروجی، نمونه های اولیه، حاشیه نویسی، جریان، مونادها، صندوق پستی، ادامه ، نویسه عام، عبارت منظم، حافظه کاربردی، وراثت، چند ریختی، تنظیمات حالت، و غیره و غیره.
  • زبان انتزاعی و ماشین های مجازی؛
  • الگوریتم ها و ساختمان داده: عبارات منظم، الگوریتم های تجزیه، الگوریتمهای گرافیکی، برنامه نویسی پویا، آموزش،
  • زبان های برنامه نویسی: نحو، معناشناسی (ایستا و پویا)، پارادایم پشتیبانی (ساختاری، OOP، کاربردی، منطقی، پشته، موازی، متا برنامه نویسی)؛
  • نرم افزار ایجاد (کامپایلرها، معمولا بزرگ و پیچیده): محلی سازی، ذخیره، componentize، API رابط، استفاده مجدد، هماهنگ سازی.

طراحی کامپایلر

برخی از مشکلات مواجه می شوند در توسعه ترجمه واقعی:

  • مشکل با زبان مبدأ. آیا آسان به آن را کامپایل آن؟ است یک پیش پردازنده وجود دارد؟ انواع چگونه است؟ یک کتابخانه وجود دارد؟
  • گروه بندی پاس کامپایلر: یک یا چند راه؟
  • درجه بهینه سازی مورد نظر. برنامه های پخش سریع و نجس با بهینه سازی کمی و یا بدون می تواند طبیعی. کامپایلر بیش از بهینه سازی کند خواهد شد، اما کد بهتر در زمان اجرا ممکن است ارزش آن.
  • درجه های الزامی تشخیص خطا. مترجم می تواند فقط در اولین خطا را متوقف کند؟ هنگامی که آن را باید متوقف کند؟ آیا اعتماد به تصحیح خطا کامپایلر؟
  • در دسترس بودن ابزار. اگر به زبان اصلی بسیار کوچک نیست، اسکنر و ژنراتور تجزیه و تحلیل مورد نیاز است. همچنین، ژنراتور کد وجود دارد، اما آنها خیلی رایج نیست.
  • نوع کد هدف به تولید می شود. از خالص کد ماشین اضافه شده و یا مجازی انتخاب شده است. یا فقط ارسال یک بخش ورود است که ایجاد یک نمایش میانی محبوب مانند LLVM، RTL، یا JVM. و یا یک ترجمه اصلی در کد منبع C یا جاوا اسکریپت.
  • قالب کد هدف. شما می توانید انتخاب زبان اسمبلی، کد دستگاه قابل حمل، تصویر حافظه کد ماشین.
  • Retargeting. هنگامی که مجموعه ای از ژنراتور خوب است که یک بخش ورودی رایج است. به همین دلیل بهتر است به یک ژنراتور برای ورودی از بسیاری از نقاط.

معماری کامپایلر: قطعات

این اجزای اصلی عملکردی یک مترجم که از تولید کد بومی (در صورتی که برنامه خروجی یک برنامه در C یا یک ماشین مجازی است، شما نیاز بسیاری از مراحل نیست) عبارتند از:

  • این برنامه ورودی (علامت های جریان) به اسکنر (تحلیلگر لغوی)، که آن را به یک جریان از نشانه تبدیل تغذیه می کند.
  • تجزیه کننده (تجزیه کننده) ساخت یک درخت نحو انتزاعی.
  • تجزیه و تحلیل معنایی تجزیه اطلاعات معنایی و چک گره های درخت برای خطا است. به عنوان یک نتیجه، ساخته شده نمودار معنایی - درخت نحو انتزاعی با خواص اضافی و لینک است.
  • ژنراتور کد میانی ایجاد یک نمودار جریان (تاپل ها را به بلوک های اصلی گروه بندی می شوند).
  • مستقل از ماشین بهینه ساز کد انجام هر دو بهینه سازی محلی (در واحد پایه) و جهانی (به تمام بلوک) اساسا در روال باقی مانده است. را کاهش می دهد کد کار برکنار و ساده محاسبات. نتیجه یک نمودار جریان اصلاح شده است.
  • ژنراتور متصل کد هدف بلوک های پایه را به یک کد کنترل انتقال راست، ایجاد یک فایل شی نصب ثبات مجازی (احتمالا بی اثر).
  • ماشین وابسته بهینه ساز، لینکر حافظه بین ثبت اختصاص و باعث می شود تیم های برنامه ریزی. انجام این برنامه تبدیل به زبان اسمبلی در این مجمع با استفاده مناسب از خط لوله.

علاوه بر این، استفاده از زیر سیستم های تشخیص خطا بدهید و جداول نماد است.

تجزیه و تحلیل لغوی (اسکن)

اسکنر به یک جریان از نشانه، از بین بردن فضای خالی، نظرات و ماکروها در حال گسترش تبدیل شخصیت منبع جریان.

اسکنر اغلب مشکلات، مانند اینکه آیا یا نه را به حساب مورد، حاشیه، پرش به خط و نظرات جاسازی شده روبرو می شوند.

خطاهایی که ممکن است در طول اسکن رخ می دهد، به نام واژگانی و عبارتند از:

  • شخصیت های که در الفبای نیست؛
  • بیش از تعداد کاراکتر در یک کلمه یا خط.
  • نه نشانه بسته و یا یک رشته.
  • پایان فایل در نظر.

تجزیه (تجزیه و تحلیل)

پارسر دنباله ای از نشانه به یک درخت نحو انتزاعی تبدیل می کند. هر گره در درخت به عنوان یک شی با زمینه های به نام، که بسیاری از گره های درخت می باشند ذخیره می شود. در این مرحله هیچ چرخه وجود دارد. هنگامی که شما یک تجزیه کننده به توجه به سطح پیچیدگی از دستور زبان (LL یا LR) و پیدا کردن که آیا هر گونه ابهامزدایی قوانین وجود دارد لازم است. بعضی از زبان نیاز تجزیه و تحلیل معنایی.

خطاهای یافت شده در این مرحله به نام نحو. به عنوان مثال:

  • K = 5 * (7 - Y؛
  • = / 5 J؛
  • = X * 4 56.

تجزیه و تحلیل معنایی

در طول تجزیه و تحلیل معنایی برای بررسی جواز قوانین و قطعات وابسته درخت تجزیه (اجازه می دهد نام مرجع قرار دادن عملیات برای تبدیل نوع ضمنی، و غیره. D.) برای تشکیل نمودار معنایی.

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

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

نسل

تولید کد میانی تولید نمودار جریان متشکل از تاپل، گروه بندی را به بلوک های اساسی است.

تولید کد تولید کد ماشین واقعی است. در کامپایلر های سنتی برای RISC-ماشین آلات در مرحله اول، شما یک اسمبلر با یک تعداد نامحدود از ثبت مجازی ایجاد کنید. برای CISC ماشین آلات احتمالا اتفاق نخواهد افتاد.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 fa.delachieve.com. Theme powered by WordPress.