آی‌ام‌پی (زبان برنامه‌نویسی)

این مقاله در مورد Irons' IMP است. برای زبان برنامه‌نویسی معاصر و نا مربوط است.
**IMP** یک زبان برنامه‌نویسی بود که توسه داده شد توسط E. T. Irons در اواخر ۱۹۶۰ و زود تر از ۱۹۷۰.
برخلاف دیگر سیستم‌های برنامه‌نویسی ای پی ام یک زبان توسعه گر نحوی بود.

با وجود این که طراحی این زبان پایش زبان الگول است. ای پی ام بسیاری ویژگی هارو تعریف می‌کند؛ که زبان الگول اون هارو ساپورت نمی‌کند مثل: توسعهٔ نحوی

کامپایلر برای ای پی ام در اوایل سال ۱۹۶۵ به وجود آمد؛ که استفاده می‌شد برای زبان برنامه‌نویسی (سیستم اشتراک زمان CDC-6600)و مورد استفاده در موسسه‌های دفاعی از سال ۱۹۶۷ قرار گرفت. اگر چه کامپایلر ان در مقایسه با زبان‌های غیرقابل توسعه کندتر بود ولی برای کار تولید عملی استفاده می‌شود.

کامپایلر IMP برای CDC-6600، کری، PDP-10 و PDP-11 کامپیوتر تهیه شده‌است. نسخه مهم IMP IMP65، IMP70 و **آی‌ام‌پی (زبان برنامه‌نویسی)** بود.

## نحوهٔ نوشتن در IMP
IMP به برنامه نویسان خود امکان گسترش نحو خود را می‌دهد. البته نه به اون معنای خاص که می‌تواند ساختار یا نوع داده هارو عوض کنه مقصود توسعهٔ نحوی است.
IMP از یک الگوریتم تجزیه قدرتمند که پایهی ان گراف و ماتریس‌های متصل هستند استفاده می‌کند. برنامه‌نویس ممکن است تولیدات جدید BNF به نمودار اضافه کنید.

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

در واقع این بینیه نحوی است که توسط bnf آماده شده با معنیه مرتبط اضافه شده در سمت راست :
 
```abnf
<class> ::= syntax-part ::= semantic-part
```

به‌طور مثال: اضافه شدن ساختار شرح داده شده توسطBNFزیر
 
```abnf
<EXP> ::= INCREMENT <VBL>
```

برای این که جملهی `INCREMENT V`تبدیل بشود به جملهی `V ← V + 1`برنامه‌نویس تنها نیاز به وارد کردن بیانیه IMP زیر است:

```abnf
<EXP> ::= INCREMENT <VBL,A> ::= "A←A+1"
```

معنایی بخشی همچنین می‌تواند حاوی تماس به روال معنایی باشد، که در بیانیه کد زیر است:

```abnf
<ATOM> ::= ABS ( <ATOM,A> ) ::= DEWOP(214B,AREG1(1,13),A)
```

بخش معنایی این بیانیه حاوی تماس با روال معنایی است `DEWOP`. این استدلال برمبنای هشت است`214B` . روال معنایی خوانده می‌شود `AREG1(1,13)`,و`A`,کدام مقدار در حال حاضر در راس پشته قراردارد. `dewop`یک روش معنایی است کهبه عنوان آرگومان‌هایش pdp-10 machine language opcode و register objectرا می‌گیرد و هر شی دیگری یک شی تولید می‌کند که مقدارش، نتیجهی اجرای machine instructionمعین شده‌است. با استفاده از فیلد آدرس شی ای که آخرین آرگومانش است در این مثال مشخص opcode 214bمشخص می‌کند ساختار ` load machine `و بنابراین نتیجه سینتکس بالا کد را کامپایل می‌کند تا محاسبه شود مقدار دقیق `A`

## سیستم عامل فرهنگ عامه
IMPیک زبان است که استفاده می‌شود دراژانس امنیت ملی ایالت متحده آمریکا

## منابع
  
* *Experience with an Extensible Language*, Irons E.T. , **CACM**, Vol. 13, No. 1, January 1970.
* *Syntax Extension and the IMP72 Programming Language*, Walter Bilofsky, Yale University, **SIGPLAN Notices**, May 1974.

## پیوند به بیرون
* PDP-10 IMP72 Reference Manual
* IMP72 Sources 
رده:زبان‌های برنامه‌نویسی با نحو گسترش‌پذیر
رده:زبان‌های برنامه‌نویسی سیستمی
رده:آژانس امنیت ملی ایالات متحده آمریکا