تولید کد
در علوم رایانه، تولید کد فرایندی است که طی آن، تولید کننده کد یک مترجم، برخی نمایش میانی کد منبع را به یک فرم تبدیل میکند (به طور مثال، زبان ماشین) که میتواند به آسانی توسط ماشین اجرا شود. مترجم های سطح بالا معمولاً چندین گذر بر فرم های میانی انجام می دهند. این فرایند چند مرحله ای به خاطر اینکه الگوریتم های بسیاری برای بهینه سازی کد راحتترند در آن واحد اعمال شوند، یا به خاطر اینکه ورودی یک بهینه سازی بستگی به فرایند کامل شده، اجرا شده توسط بهینه سازی دیگری دارد، استفاده می شود. این بهینه سازی، همچنین ایجاد یک مترجم واحد را که میتواند چندین ساختار را هدف قرار دهد را تسهیل می کند، که فقط آخرین مرحله تولید کد لازم است از هدفی به هدف دیگر تغییر کند. ورودی مولد کد، معمولاً شامل یک درخت تجزیه یا یک درخت نحو انتزاعی است. درخت به یک دنباله خطی از فرمان ها، معمولاً در یک زبان متوسط مثل کد سه آدرسه، تبدیل می شود. مراحل بعد از ترجمه، ممکن یا ناممکن است به عنوان "تولید کد"، بسته به اینکه آیا مستلزم یک تغییر قابل توجه در نمایش برنامه است، اشاره می شود.
وظایف عمده در تولید کد
به علاوهٔ تبدیل ابتدایی از یک نمایش میانی به یک دنباله خطی از فرامین ماشین، یک مولد کد معمولی سعی میکند کد تولید شده را به نحوی بهینه کند. وظایفی که معمولاً قسمتی از فاز مولد کد یک مترجم سطح بالا است، شامل موارد زیر است:
- انتخاب فرمان: کدام فرامین استفاده شوند.
- زمانبندی فرمان: در کدام دستور، آن فرامین قرار داده شوند. زمانبندی، یک بهینه سازی سرعت است که میتواند تأثیر بحرانی بر ماشینهای خط لوله داشته باشند.
- تخصیص ثبات: تخصیص متغیرها به ثباتهای پردازنده.
- اشکال زدایی تولید کد دادهها اگر لازم باشد، از اینرو کد میتواند اشکال زدایی شود.
انتخاب فرمان، معمولاً با انجام دادن پیمایش بازگشتی درخت بر درخت نحو انتزاعی، مطابق پیکربندی بخصوص درخت مقابل الگوها، انجام میشود؛ برای مثال، درخت ((W := ADD(X,MUL(Y,Z
ممکن است به یک دنباله درختی از فرامین توسط تولید کردن بازگشتی دنبالههایی برای t1 := X
و (t2 := MUL(Y,Z
و بعد بیرون دادن فرمان ADD w, t1, t2
مبدل شود.
در یک مترجم که از یک زبان متوسط استفاده میکند، ممکن است دو مرحله انتخاب فرمان وجود داشته باشد. یکی برای تبدیل درخت تجزیه به کد میانی، و فاز دوم که خیلی بعدتر، کد میانی را به فرامین از مجموعه فرامین ماشین هدف تبدیل میکند. این فاز دوم، درخت پیمایش لازم ندارد. میتواند بهطور خطی انجام شود و معمولاً درگیر یک جایگزینی سادهٔ عملیات زبان متوسط با شناسندههای مربوطه است. هرچند، اگر مترجم در واقع یک مترجم زبان است، آنگاه فاز دوم تولید کد، درگیر ساختن یک درخت از کد میانی خطی است.
زمان اجرای تولید کد
وقتی تولید کد در زمان اجرا اتفاق می افتد، مثلاً در ترجمۀ بموقع، مهم است که تمام فرایند با رعایت مقدار فضا و زمان، کافی باشد. برای مثال، وقتی عبارات منظم تفسیر شده اند و برای تولید کد در زمان اجرا استفاده می شوند، یک ماشین حالت متناهی غیرقطعی، اغلب به جای ماشین قطعی تولید می شود. زیرا معمولاً غیرقطعی، سریعتر ایجاد میشود و فضای حافظه کمتری از قطعی اشغال می کند. بااینکه به طور کلی کد کافی کمتری تولید می کند، تولید کد بموقع میتواند از شکل دادن اطلاعات که فقط در زمان اجرا در دسترس است، فایده ببرد.
منابع
مشارکتکنندگان ویکیپدیا. «(Code generation (compiler». در دانشنامهٔ ویکیپدیای انگلیسی.