| パラダイム | マルチパラダイム:手続き型、命令型、構造化型 |
|---|---|
| 家族 | アルゴル |
| デザイン: | ニクラウス・ヴィルト、トニー・ホーア |
| 初登場 | 1966年 |
| タイピングの規律 | 静的、強い |
| 範囲 | 語彙 |
| 実装言語 | PL360 |
| プラットフォーム | IBM システム/360 |
| OS | OS/360、MTS |
| 影響を受けた | |
| アルゴル60 | |
| 影響を受けた | |
| パスカル、モジュラ2 | |
ALGOL W はプログラミング言語です。これは、Niklaus WirthとTony HoareによるALGOL 60の後継としてのALGOL Xの提案に基づいています。ALGOL W は、オリジナルの ALGOL 60 の比較的単純なアップグレードであり、 文字列、ビット文字列、複素数、レコードデータ型への参照、結果による呼び出しによるパラメータの受け渡し、文の導入、文への置き換えなどが追加され、言語が全体的に強化されています。
whileswitchcase
Wirth のエントリは ALGOL 60 に対する進歩としては少なすぎるとみなされ、非常に論争の多い会議で、後にALGOL 68となるAdriaan van Wijngaardenのより複雑なエントリが選ばれました。Wirth は後に、彼のバージョンをA contributing to the development of ALGOLとして出版しました。[1]いくつかの小さな追加を経て、最終的に ALGOL W になりました。
ヴィルトはスタンフォード大学でIBM System/360用の高品質な実装を監督し、広く配布された。[2] [3]この実装はヴィルトが設計したALGOLに似たアセンブリ言語であるPL360で書かれた。この実装には、効果的なデバッグ機能とプロファイリング機能が含まれている。
ALGOL W はPascal言語の基礎として機能し、ALGOL W の構文は Pascal の経験がある人なら誰でもすぐに理解できるでしょう。主な違いは、Pascal でのレコード処理の改善と、奇妙なことに、実行時に配列の長さを定義する ALGOL W の機能がなくなったことです。これは Pascal で最も不満の多い機能の 1 つです。
構文と意味
ALGOL Wの構文はEBCDIC 文字エンコーディングセットのサブセットに基づいて構築されています。ALGOL 60では予約語は明確な語彙項目でしたが、ALGOL Wでは単なる文字のシーケンスであり、ストロップする必要はありません。予約語と識別子はスペースで区切られます。[2]このように、ALGOL Wの構文はPascal以降の言語 の構文に似ています。
ALGOL W言語記述[4]は、バッカス・ナウア記法(BNF)に似た接辞文法でALGOL Wを定義している。この形式文法は、ヴァン・ウィンガーデン文法の前身である。[1] [5]
ALGOL Wの意味論の多くは文法的に定義されている: [4]
- 識別子は、現在のスコープ内での定義によって区別されます。たとえば、 a は
⟨procedure identifier⟩プロシージャ宣言によって定義された識別子であり、 a はgoto⟨label identifier⟩ラベルとして使用されている識別子です。 - 変数と式の型は接尾辞によって表されます。たとえば、は型 の値を返す関数の構文エンティティです。現在のスコープ内で識別子が整数関数として宣言されている場合、 は に展開されます。
⟨τ function identifier⟩τ⟨integer function identifier⟩ - 型エラーは文法エラーです。たとえば、
⟨integer expression⟩ / ⟨integer expression⟩と は⟨real expression⟩ / ⟨real expression⟩式を表す有効だが別個の構文エンティティですが、⟨real expression⟩ DIV ⟨integer expression⟩(つまり、浮動小数点値に対して実行される整数除算) は無効な構文エンティティです。
例
これは、ALGOL W のレコードタイプ機能を示しています。
レコード人物(文字列( 20 )名前;整数年齢;論理男性;参照(人物)父、母、末っ子、兄姉) ;
REFERENCE ( PERSON ) PROCEDURE YOUNGESTUNCLE ( REFERENCE ( PERSON ) R ) ; BEGIN REFERENCE ( PERSON ) P , M ; P := YOUNGESTOFFSPRING ( FATHER ( FATHER ( R ))) ; WHILE ( P ¬ = NULL ) AND ( ¬ MALE ( P )) OR ( P = FATHER ( R )) DO P := ELDERSIBLING ( P ) ; M := YOUNGESTOFFSPRING ( MOTHER ( MOTHER ( R ))) ; WHILE ( M ¬ = NULL ) AND ( ¬ MALE ( M )) DO M := ELDERSIBLING ( M ) ; P = NULLの場合、M、そうでない場合、 M = NULL の場合、 P、そうでない場合、 AGE ( P ) < AGE ( M )の場合、P 、そうでない場合、 M終了
参考文献
- ^ ab Wirth, Niklaus ; Hoare, CAR (1966年6月). 「ALGOLの開発への貢献」. Communications of the ACM . 9 (6): 413–432. doi : 10.1145/365696.365702 . S2CID 11901135. 2020年10月7日閲覧– Association for Computing Machinery経由.
- ^ ab Bauer, Henry R.; Becker, Sheldon I.; Graham, Susan L.; Forsythe, George E.; Satterthwaite, Edwin H. (1968 年 3 月)。技術レポート番号: CS-TR-68-89。コンピュータサイエンス学科(レポート)。スタンフォード大学。(スタンフォードの 1972 年の ALGOL W 実装に関するさまざまなドキュメント。このレポートには、ALGOL W 言語記述が含まれています。)
- ^ Sites, Richard. 「ALGOL W リファレンスマニュアル」(PDF) . i.stanford.edu . スタンフォード大学. 2022 年7 月 24 日閲覧。
- ^ ab Bauer, Henry R.; Becker, Sheldon I.; Graham, Susan L.; Satterthwaite, Edwin H.; Sites, Richard L. (1972 年 6 月). ALGOL W 言語記述(PDF) (レポート).
- ^ van Wijngaarden, Adriaan (1965年10月22日). Orthogonal Design and Description of a Formal Language: MR76 (PDF) (レポート).アムステルダム、オランダ: Mathematical Centre. 2019年10月29日時点のオリジナル(PDF)よりアーカイブ。2020年10月7日閲覧– Ernst-Abbe-Hochschule Jena、University of Applied Sciences、ドイツ経由。
外部リンク
- aw2c – Glyn Webster によるLinux用 ALGOL W コンパイラ
- 畏敬の念 - グリン・ウェブスターによる現在のバージョン
- ALGOL W @ Everything2 – 元ユーザーによる非公式だが詳細な言語の説明。教育用プログラミング言語としてPascalよりも ALGOL W を賞賛するサイドバー付き。
- 1969 ALGOL W コンパイラーのリスト (bitsavers.org)
- ミシガン端末システムマニュアル、第 16 巻: MTS の ALGOL W
- ALGOL W 資料 200 以上の ALGOL W プログラムとドキュメント
