IMP(プログラミング言語)

インプ
パラダイムマルチパラダイム手続き型命令型構造化拡張可能
家族アルゴル
デザイン:エドガー・T・アイアンズ
開発者国家安全保障局
初登場1965 (1965年
安定版リリース
IMP72 / 1972 (1972年
タイピングの規律静的強い
範囲語彙
実装言語アルゴル60
プラットフォームCDC 6600クレイPDP-10PDP-11
OSCOSSCOPETOPS-10Unix、その他
ライセンス独自の
主要な実装
IMP65、IMP70、IMP72
影響を受けた
アルゴル60

IMPは、1960年代後半から1970年代初頭にかけて、国家安全保障局(NSA)でエドガー・T・アイアンズによって開発された初期のシステムプログラミング言語です。他の多くのシステム言語とは異なり、IMPは構文拡張可能なプログラミングをサポートしています。

設計者はこの言語を「 ALGOLベース」と呼んでいますが、IMP では ALGOL 言語の特徴の多くを除外し ALGOL とはまったく異なる機能である構文拡張性をサポートしています。

IMP 用のコンパイラ1965 年にはすでに存在し、 1967 年から国防分析研究所で使用されていたCDC 6600タイムシェアリング システムのプログラミングに使用されていました。このコンパイラは、拡張不可能な言語用の同等のコンパイラよりも遅いものの、実用的な製品開発に使用されてきました。

IMPコンパイラは、CDC 6600CrayPDP-10PDP-11コンピュータ用に開発されました。重要なIMPバージョンはIMP65、IMP70、IMP72です。

IMP72の拡張可能な構文

IMPは拡張可能な構文プログラミング言語であるため、プログラマーが構文を拡張することができますが、新しいデータ型や構造を追加するための具体的な手段は提供されていません。構文拡張性を実現するために、IMPは構文グラフと複数の接続行列に基づく強力な解析アルゴリズムを使用しています。プログラマーは、新しいバッカス・ナウア記法(BNF)構文を構文グラフに追加することができます。

IMP72の構文は、ソースコードプログラムに含まれる拡張BNF構文文によって拡張されます。このメカニズムは非常に強力であるため、言語自体の実装、つまり構文文のみで構成されたIMP72ソースファイルを単純なコンパイラに入力することで、最も単純な構文文を翻訳することが可能です。また、一般ユーザーには マクロのように見える単純な構文文も存在します。

基本的に、構文ステートメントは、右側に 関連するセマンティクスが追加された拡張 BNF 生成物です。

<クラス> :: =構文部分:: =意味部分

たとえば、次の BNF で記述された構造を追加するには:

< EXP > :: = INCREMENT < VBL > 

INCREMENT Vを に変換するセマンティクスを使用する場合V ← V + 1、プログラマは次のIMP ステートメントを挿入するだけで済みます。

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

セマンティック部分には、次の構文ステートメントのように、 セマンティック ルーチンへの呼び出しを含めることもできます。

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

この文のセマンティック部分は、セマンティックルーチン の呼び出しから構成されますDEWOP。引数は、8進定数214B、セマンティックルーチン呼び出しAREG1(1,13)、および でA、これは、この生成物が呼び出された時点でスタックの先頭にあるオブジェクトです。DEWOPは、それぞれ PDP-10 マシン言語オペコード、レジスタオブジェクト、およびその他のオブジェクトを引数として受け取り、最後の引数であるオブジェクト をアドレスフィールドとして使用して指定されたマシン命令を実行した結果を値とするオブジェクトを生成するセマンティックルーチンです。この例では、オペコード が命令214Bを指定しているLoad Magnitudeため、上記の構文文の結果は の絶対値を計算するコードをコンパイルすることとなりますA

フォークロアオペレーティングシステム

IMPは、NSAが独自に開発したタイムシェアリングオペレーティングシステムFolklore」で使用されていた言語である。[ 1 ]

参照

参考文献

  1. ^コッター、ジョージ. 「国家安全保障局における高性能コンピューティング」 .スーパーコンピューティングの最前線 II . カリフォルニア大学出版局. 2012年5月25日閲覧