**جعبه ابزار مهندسی مجدد نرم‌افزار DMS** مجموعه‌ای اختصاصی از ابزارهای تبدیل برنامه است که برای خودکارسازی برنامه منبع برنامه‌های ویژه، اصلاح، ترجمه یا تولید سیستم‌های نرم‌افزاری برای مخلوط‌های دلخواه از زبان‌های مبدأ برای سیستم‌های نرم‌افزاری در مقیاس بزرگ موجود است.

طریقه استفاده
-------------

DMS برای پیاده‌سازی طیف وسیع ای از ابزارهای عملی مورد استفاده قرار گرفته‌است، شامل زبان‌های اختصاصی دامنه (مانند تولید کد برای کنترل کارخانه)، قابل پوشش تست و ابزارهای پروفایل، شناسایی clone , ابزار مهاجرت به زبان، مهندسی مجدد جزء ++C. , و برای تحقیق در مورد موضوعات پیچیده مانند قابلیت اطمینان مجدد ++C.

این مجموعه ابزار ابزاری برای تعریف دستور زبان در اختیار ما قرار می‌دهد وparser تولید می‌کند که به‌طور خودکار درخت‌های انتزاعی انتزاعی (ASTs) را ایجاد می‌کنند، و زیبا را برای تبدیل ASTهای اصلی یا اصلاح شده به متن منبع کامپایل شده تبدیل می‌کند. ضبط درختان پارس، و زیباترین چاپگرها، جزئیات کاملی در مورد برنامه منبع اصلی از جمله منبع منبع، نظرات، ردیف و قالب اعداد و غیره را بازسازی می‌کنند تا اطمینان حاصل کنند که متن منبع بازسازی شده به همان اندازه مدول متن اصلی برای یک برنامه‌نویس قابل تشخیص است. هرگونه تحول کاربردی

بسیاری از ابزارهای تجزیه و تحلیل و تحول برنامه محدود به مجموعه شخصیت‌های ASCII یا اروپای غربی مانند ISO-8859 است. DMS می‌تواند UTF-8، UTF-16، EBCDIC , Shift-JIS و انواع رمزگذاری کاراکترهای مایکروسافت را از این طریق کنترل کند.

DMS از فناوری تجزیه و تحلیل GLR استفاده می‌کند، این امکان را می‌دهد تا همه دستور زبان‌های بدون متن را عملی کند. گزاره‌های معنایی این قابلیت را به گرامرهای جالب بدون عارضه گسترش می‌دهد (Fortran نیاز به تطبیق حلقه‌های DO چندگانه با عبارات اشتراک گذاری CONTINUE مشترک با برچسب دارد؛ GLR با گزاره‌های معنایی پارسر DMS Fortran را قادر می‌سازد تا ASTها را برای حلقه‌های به‌صورت صحیح توخالی همان‌طور که تجزیه می‌کند) تولید کند.

DMS ارزیاب گرامر صفت را برای محاسبه آنالیزهای سفارشی از طریق ASTها، مانند اندازه‌گیری‌ها، و از جمله پشتیبانی ویژه برای ساخت جدول نمادها فراهم می‌کند. سایر واقعیت‌های برنامه را می‌توان با موتورهای کنترل جریان داخلی و تجزیه و تحلیل داده‌ها، تجزیه و تحلیل نشانگر محلی و جهانی، استخراج نمودار تماس با برنامه کامل، و تجزیه و تحلیل دامنه نمادین با تفسیر انتزاعی استخراج کرد.

تغییر در ASTs می‌تواند با استفاده از هر دو روش تشریفاتی رمزگذاری شده در PARLANSE و تبدیل درخت به منبع کدگذاری شده به عنوان بازنویسی قوانین با استفاده از نحو سطح شرط شده توسط هر واقعیت برنامه استخراج شده، با استفاده از زبان خصوصیات قانون DMS (RSL) انجام شود. موتور قاعده بازنویسی که از RSL پشتیبانی می‌کند، قوانین مقدماتی و ارتباطی را کنترل می‌کند. یک قانون بازنویسی برای C برای جایگزین کردن شرایط پیچیده توسط عملگر `?:` صورت زیر نوشته می‌شود: 

```
  rule simplify_conditional_assignment(v:left_hand_side,e1:expression,e2:expression,e3:expression)
    :statement->statement
= "if (\e1) \v=\e2; else \v=e3; "
  -> "\v=\e1?\e2:\e3; "
  if no_side_effects(v);

```
 بازنویسی **قانون** دارای نامهایی است، به عنوان مثال **ساده‌سازی\_قسمت\_اسلامی**. هر قانون دارای یک *"مطابقت با این"* و *"جایگزین که"* جفت الگوی هم جدا شده توسط **->،** در مثال ما، در خطوط جداگانه برای خوانایی. الگوهای باید با دسته‌بندی‌های نحوی زبان مطابقت داشته باشند. در این مورد، هر دو الگو باید از نحو دسته **بیانیه** همچنین در همدردی با الگوهای از هم جدا می‌شود **->.** زبان هدف (به عنوان مثال، C) نحو سطح در داخل متن نقل قول‌ها کدگذاری شده‌است **"**، برای جدا کردن نحو قاعده بازنویسی از زبان مقصد. نمایش‌های برگشتی در داخل نقل قول‌ها، فرار از دامنه را نشان می‌دهد، برای نشان دادن متغیرهای الگوی متا (به عنوان مثال، **\ v** , **\ e1**، **\ e2**) که مطابق با هر ساختار زبانی مطابق با اعلامیه قابل مشاهده در خط امضا است، به عنوان مثال، **e1** باید از دسته نحوی باشد: *(هر) بیان* اگر یک متغیر متغیر در الگوی *مسابقه* چندین بار ذکر شده باشد، باید با زیر درختان یکسان مطابقت داشته باشد. همان شکل **v** باید در هر نمونه در الگوی مسابقه در این مثال رخ دهد. Metavariables در الگوی *جایگزین* توسط بازی مربوطه، از سمت چپ جایگزین شده‌است. شرط مشروط **اگر** شرط دیگری **را** فراهم کند که باید این قاعده را رعایت کند، مثلاً اینکه metavariable **v** یکسان، یک سمت چپ دلخواه است، نباید عوارض جانبی داشته باشد (مثلاً، نمی‌تواند از نوع **a باشد. [++i]**؛ محمول **no\_side\_effects** توسط آنالایزر ساخته شده با سایر مکانیسم‌های DMS تعریف شده‌است).

دستیابی به یک تغییر و تحول پیچیده بر روی کد با ارائه تعدادی از قوانین که برای دستیابی به اثر مطلوب همکاری می‌کنند، انجام می‌شود. این آیین‌نامه بر روی بخش‌هایی از برنامه توسط برنامه‌های برنامه‌نویسی رمزگذاری شده در PARLANSE متمرکز شده‌است.

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

DMS دارای انواع مختلفی از زبان‌های مقدماتی از پیش تعریف شده‌است که اکثر لهجه‌های واقعی C و ++C شامل C ++ 0x، C #، جاوا، پایتون، PHP , EGL، Fortran، COBOL، Visual Basic , Verilog، VHDL و حدود ۲۰ یا بیشتر را در بر می‌گیرد. زبان‌ها. زبانهای از پیش تعریف شده به شخصی سازان این امکان را می‌دهند که بلافاصله بر روی وظیفه مهندسی مجدد خود تمرکز کنند تا جزئیات جزئیات زبانهایی که باید پردازش شوند.

DMS علاوه بر این غیر معمول است که با یک زبان برنامه‌نویسی موازی، PARLANSE اجرا می‌شود، که از چند پردازنده متقارن موجود در ایستگاه‌های کاری کالا استفاده می‌کند. این DMS را قادر می‌سازد پاسخهای سریع تری را برای آنالیزها و تبدیلهای سیستم بزرگ ارائه دهد.

DMS در ابتدا توسط نظریه ای برای حفظ طرح‌های نرم‌افزاری به نام *Design Maintenance Systems* انگیزه داده شد *.*

DMS و «سیستم تعمیر و نگهداری طراحی» علائم تجاری ثبت شده از طراحی‌های معنایی هستند.

منابع
-----

1. ↑  *DMS: Program Transformations for Practical Scalable Software Evolution*. Proceedings International Conference on Software Engineering 2004 Reprint
2. ↑  Branch Coverage for Arbitrary Languages Made Easy
3. ↑  «*Clone Detection Using Abstract Syntax Trees*. Proceedings International Conference on Software Maintenance 1998». بایگانی‌شده از اصلی در ۱۰ اکتبر ۲۰۱۲. دریافت‌شده در ۲۰ دسامبر ۲۰۱۹.
4. ↑  "Case study: Re-engineering C++ component models via automatic program transformation". doi:10.1016/j.infsof.2006.10.012. `{{cite journal}}`: Cite journal requires `|journal=` (help)
5. ↑  *Small Business Innovation Research (DoE): Refactor++*
6. ↑  *Design Maintenance Systems*. Communications of the ACM 1992Reprint

پیوند به بیرون
--------------

* صفحه اصلی راهنمای ابزار مهندسی مجدد نرم‌افزار DMS
* Invited Google TechTalk: *DMS: Software Tool Infrastructure* در یوتیوب
* نوسازی سیستم‌های نرم‌افزاری B-2 Spirit Bomber B-2 توسط ابتکار بودجه Northrop Grumman که راهکاری مقرون به صرفه برای ترجمه نرم‌افزار (JOVIAL) ایجاد کرده‌است ، ارجاع شده‌است.
* پارلمان
* طرح‌های معنایی