**CMS-2** یک زبان برنامه‌نویسی سیستم‌های جاسازی شده‌است که به وسیلهٔ نیروی دریایی ایالات متحده استفاده شده‌است. آن اوایل تلاش به منظور توسعه یک زبان برنامه‌نویسی کامپیوتری سطح بالای استاندارد شده برای بهبود کد قابل حمل و استفاده مجدد انجام می‌شد. CMS-2 درجه اول برای سیستم‌های داده‌های تاکتیکیروی نی دریایی ایالات متحده توسعه یافت. (NTDS).

CMS-2 توسط شرکت رند در اوایل دهه ۱۹۷۰ توسعه داده شد و مخفف "سیستم نظارت کامپایلر" است. بعد از نام "CMS-2" یک حرف قرار می‌گیرد که تعیین کنندهٔ نوع سیستم هدف است. برای مثال CMS\_2M پردازنده‌های ۱۶ بیتی نیروی دریایی را هدف قرار می‌دهد، مانند /AYK-14.

تاریخچه
-------

CMS-2 برای FCPCPAC (ناوگان برنامه‌نویسی کامپیوتر مرکز اقیانوس آرام) در San Diego,CA توسعه داده شد و توسط تشکیلات علوم کامپیوتر در سال ۱۹۶۸ با کمک طراحی از Intermetrics پیاده‌سازی شد. این زبان ادامه پیدا کرد تا مورد توسعه قرار گرد و در نهایت تعدادی از کامپیوترها را پشتیبانی کرد از جمله کامپیوترهای AN/UYK-7 و AN/UYK-43 و UYK-20 و UYK-44.

ویژگی‌های زبان
--------------

CMS-2 برای تشویق برنامه ماژولار، اجازهٔ کامپایل مستقل بخش‌های یک سیستم کامل طراحی شد. این زبان توضیح گرا است. منبع به شکل آزاد است و ممکن است برای برنامه‌نویسی راحت سازماندهی شود. انواع داده‌ها شامل اعداد ثابت، اعداد ممیز شناور، بولی، حروف و وضعیت است. ارجاع مستقیم، دستکاری حروف و های رشته های بیتی مجاز است. کد نمادین دستگاه ممکن است شامل کدی به عنوان کد مستقیم باشد.

ساختار برنامه
-------------

یک برنامهٔ CMS-2 تشکیل شده از بخش‌ها است. بخش‌ها ساخته شده از نمادها هستند که به وسیلهٔ یک جداکننده از هم جدا شده‌اند. این دسته از نمادها عبارتند از عملگرها، شناسه‌ها و ثابت‌ها. عملگرها شکل‌های اولیهٔ زبان هستند که به وسیلهٔ کامپایلر برای یک عمل خاص یا تعریفی خاص در یک برنامه اختصاص داده شده‌اند. شناسه‌ها نام‌های منحصر به فردی هستند که توسط برنامه‌نویس برای داده‌های بخش‌ها، عناصر برنامه و برچسب‌های بخش تخصیص می‌یابند. ثابت‌ها مقدارهای مشخص شده‌ای هستند که ممکن است عددی، رشته‌های Hollerith، مقدارهای وضعیت‌ها یا بولی باشد.

بخش‌های CMS-2 به شکل آزاد هستند و با یک علامت دلار خاتمه می‌یابند. یک برچسب بخش ممکن است در ابتدای توضیحات برای ارجاع به آن قرار داده شود.

یک برنامهٔ منبع CMS-2 از دو نوع توضیحات تشکیل شده‌است. بخش‌های اعلانی اطلاعات کنترلی اساسی را برای کامپایلر محیا می‌کند و ساختار داده‌های مرتبط با یک برنامهٔ خاص را تعریف می‌کند. بخش‌های پویا باعث می‌شوند که کامپایلر دستورالعمل‌های اجرایی دستگاه را تولید کند.

بخش‌های اعلانی که داده‌ها را برای یک برنامه تعریف می‌کنند در واحدهایی دسته‌بندی می‌شوند که طراحی‌های داده‌ها نامیده می‌شوند. طراحی‌های داده‌ها متشکل از تعریف‌های دقیق برای مناطق ذخیره‌سازی داده‌های موقتی و دائم، ورودی‌ها، خروجی‌ها و واحدهای خاص داده‌ها است. بخش‌های پویا که بر روی داده‌ها عمل می‌کنند ویا محاسبات را انجام می‌دهند به صورت متدها دسته‌بندی می‌شوند. طراحی‌های داده و متدها بار دیگر به صورت عناصر سیستم یک برنامهٔ CMS-2 دسته‌بندی می‌شوند. کامپایلر عناصر سیستم را به یک سیستم زمان کامپایل ترکیب می‌کند. یک سیستم زمان کامپایل مکن است مستقل یا بخشی از برنامهٔ بزرگتر باشد.

بخش‌های اعلانی داده‌ها
----------------------

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

### سوئیچ‌ها

سوئیچ‌ها برای انتقال کنترل برنامه به یک مکان خاص در سیستم زمان کامپایل مورد استفاده قرار می‌گیرند. آن‌ها شامل یک مجموعه از شناسه‌ها یا نقاط سوئیچ کردن هستند که انتقالات برنامه و شاخه‌ها را تسهیل می‌کنند. سوئیچ آدرس برنامهٔ یک برچسب بخش یا نام متد را نشان می‌دهد.

### متغیرها

یک متغیر یک تکه از داده‌ها است. ممکن است شامل یک بیت، چندین بیت یا چندین کلمه باشد. ممکن است یک مقداری در زمان تعریف متغیر به آن اختصاص داده شود. متغیرها ممکن است یک مقدار ثابت یا یک مقدار قابل تغییر را در خود نگه دارند. انواع داده شامل اینتیجر، اعداد ممیز شناور، اعداد ثابت، رشته‌های حروف Hollerith، وضعیت یا بولی باشند.

### مجموعه‌ها

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

بخش‌های پویا
------------

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

### عملگرهای بخش

عملگرهای اصلی CMS-2 در زیر آمده‌اند.

| عملگر | نقش |
| --- | --- |
| SET | محاسبات را انجام می‌دهد یا برای تخصیص مقدار استفاده می‌شود |
| SWAP | محتوای دو واحد داده را جابه‌جا می‌کند |
| GOTO | جریان اجرایی یک برنامه را تعییر می‌دهد یا یک بخش سوئیچ را صدا می‌زند |
| IF | یک مقایسه یا عبارت بولی را برای اجرای شرطی بیان می‌کند |
| VARY | یک چرخهٔ برنامه را ایجاد می‌کند |
| FIND | یک جدول را برای داده‌ای جستجو می‌کند |

### عملگرهای ویژه

عملگرهای ویژه ارجاع به ساختارهای داده و عملیات بر روی آن‌ها را تسهیل می‌کند.

| اپراتور | تابع |
| --- | --- |
| BIT | به یک رشته از بیت‌ها در یک عنصر داده ارجاع می‌دهد |
| CHAR | به یک رشته کاراکتر ارجاع می‌دهد |
| CORAD | به یک آدرس هسته ارجاع می‌دهد |
| ABS | مقدار مطلق یک عبارت را به دست می‌آورد |
| COMP | مکمل یک عبارت بولی |

برنامه ساختار اعلان‌ها
----------------------

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

| آغاز حائل | پایان حائل | هدف |
| --- | --- | --- |
| سیستم | پایان-سیستم | یک سیستم زمان کامپایل را حائل می‌شود |
| SYS-DD | پایان-SYS-DD | Delimits یک سیستم طراحی داده در سیستم کامپایل شده |
| SYS-مجموعه مقالات | پایان-SYS-مجموعه مقالات | Delimits یک سیستم متدی در یک سیستم زمان کامپایل |
| LOC-DD | پایان-LOC-DD | Delimits محلی طراحی داده‌ها در یک سیستم روش |
| روش | پایان-مجموعه مقالات | Delimits یک متد در یک متد سیستم |
| EXEC-مجموعه مقالات | پایان-مجموعه مقالات | Delimits یک روش وظیفه-حالت در یک متد سیستم(XCMS-2 تنها، تنها به نام از اجرایی-دولت روش) |
| تابع | END-FUNCTION | Delimits یک تابع در متد سیستم |
| SYS-PROC-REN | پایان-SYS-PROC | Delimits یک متد سیستم reentrant در یک سیستم زمان کامپایل(XCMS-2) |
| AUTO-DD | پایان-AUTO-DD | Delimits ناحیهٔ داده پویا در یک متد سیستم reentrant است که باید هر دفعه اختصاص داده شود. متد سیستم reentrant برای اجرا آغاز می‌شود (XCMS-2) |
| HEAD | END-HEAD | Delimits یک بسته هدر در یک سیستم زمان کامپایل |

ورودی/خروجی سطح بالای بخش‌ها
----------------------------

ورودی/خروجی بخش‌ها ارتباط با دستگاه‌های سخت‌افزاری را در حالی که در محیط غیر بلادرنگ در یک سیستم نظارتی در حال اجرا است را مهیا می‌کند.

| عملگر | تابع |
| --- | --- |
| FILE | محیط و بقیهٔ اطلاعات مورد نیاز برای یک ورودی و خروجی را تعریف می‌کند |
| OPEN | کارهای عادی I/O را مقداردهی اولیه می‌کند |
| CLOSE | یک فایل را غیرفعال می‌کند و علامت پایان فایل را می‌نویسد |
| INPUT | یک عمل ورودی را از یک دستگاه خارجی به یک قسمت میانگیر فایل هدایت می‌کند |
| OUTPUT | یک عمل خروجی را از یک قسمت میانگیر فایل به یک دستگاه خروجی هدایت می‌کند |
| FORMAT | تبدیل دلخواه بین بلوک‌های دادهٔ خارجی و تعریف‌های دادهٔ داخلی را مشخص می‌کند |
| ENCODE | عناصر داده را به یک قسمت خاص منتقل می‌کند که این انتقال با یک فرمت خاص تطبیق می‌کند. |
| DECODE | عملیات عکس ENCODE |
| ENDFILE | یک نشانهٔ پایان فایل مناسب را قرار می‌دهد |
| POS | عملگر ویژه برای قراردادن یک نوار فایل مغناطیسی |
| LENGHT | عملگر ویژه برای به دست آوردن طول یک ورودی/خروجی |

سیستم نظارت کامپایلر 2 (CMS-2)
------------------------------

سیستم نظارت کامپایلر 2 (CMS-2) یک سیستم بود که بر روی UNIVAC CP-642B (AN/USQ-20) اجرا شد. نرم‌افزار سیستم شامل مانیتور، کامپایلر، بارکنندهٔ کتابخانهٔ CP-642 و نوار ابزار و فلوچارت بود.

### مانیتور MS-2

یک سیستم عامل پردازش دسته‌ای که که اجرای اجزاء CMS-2 و کارهای اجرا شدهٔ کاربر در کامپیوتر CP-642 را کنترل می‌کند. ورودی و خروجی، نرم‌افزار امکانات کتابخانه و ابزارهای اشکال‌زدایی را فراهم می‌کند. کار حسابداری نیز ارائه شده‌است.

### کامپایلر CMS-2

یک کامپایلر برای CS-1 و زبان CMS-2 که تولیدکنندهٔ کد هدف برای کامپیوترهای CP-642, L-304, AN/UYK-7,1830A و ۱۲۱۸/۱۲۱۹ است. در طول دهه ۱۹۷۰ نسخه‌های مختلف کامپایلر CMS-2 وجود داشت که بسته به کامپیوتر مورد استفاده، برای کامپایل مورد استفاده قرار می‌گرفت. قسمتی از کد منبع باید بازنویسی می‌شد تا برای اجرای بعضی توابع به کار آیند؛ و نسخه‌های مختلف CMS-2 مشکلاتی با ابزار اشکال زدایی داشتند.

### کامپایلر XCMS-2

کامپایلر توسعه یافتهٔ CMS-2 با اضافه کردن ویژگی‌های زبان برای کامپیوتر AN/UYK-7 است و تنها کد هدف AN/UYK-7 را تولید می‌کند.

### کتابخانهٔ CMS-2

یک سیستم مدیریتی است که ذخیره‌سازی و دسترسی به منبع و کد هدف را فراهم می‌کند.

### بار کنندهٔ کد هدف CP-642

دو بارکنندهٔ کد هدف برای بارگذاری کد هدف مطلق یا جابه‌جا پذیر.

### نوار ابزار

مجموعه‌ای از ابزارها برای مدیریت داده‌ها بر روی نوار مغناطیسی است.

### فلوچارت ساز CMS-2

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

جستارهای وابسته
---------------

* Ada
* AN/AYK-14
* AN/UYK-7
* AN/UYK-20
* AN/UYK-43
* AN/UYK-44
* AN/USQ-17
* AN/USQ-20
* JOVIAL
* Naval Tactical Data System
* TACPOL

منابع
-----

1. 1 2 3 4 5 6 7 8 9 10  U.S. Navy (1978), *Digital Computer Basics Rate Training Manual, NAVEDTRA 10088-B*, U.S. Navy
2. 1 2  Neal Ziring (1998-10-19). "CMS-2". Ziring MicroWeb. Archived from the original on 14 December 2016. Retrieved 2014-07-08.`{{cite web}}`: نگهداری یادکرد:ربات:وضعیت نامعلوم پیوند اصلی (link)
3. ↑  Mark Wilson - personal experience working with UYK-20 and UYK-44 on Aegis ORTS
4. ↑  Fleet Combat Direction Systems Support Activity (1986), *CMS-2Y Programmers Reference Manual for the AN/UYK-7 and AN/UYK-43 Computers*, U.S. Navy

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

* CMS-2Y Programmers Reference Manual for the AN UYK-7 and AN UYK-43 (اکتبر ۱۹۸۶)
* the Feasibility of Emulating the AN/UYK-7 Computer on the AADC Signal Processing Element
* Dictionary of Programming Languages entry for CMS-2