| パラダイム | 命令的 |
|---|---|
| デザイン: | カーステン・K・ゴマール、ニール・D・ジョーンズ、ジョン・ハットクリフ |
| 初登場 | 1989年、1993年、1998年 |
フローチャート言語(FCL) は、プログラム分析と特殊化、特に部分評価の基本概念を説明する目的で設計された、シンプルな命令型プログラミング言語です。この言語は、1989 年に Carsten K. Gomard と Neil D. Jones によって初めて発表されました。[1]その後、1993 年に Peter Sestoft との共著[2]や、1998 年に John Hatcliff の講義ノート[3]で再登場しました。以下は、John Hatcliff の講義ノートに登場した FCL について説明しています。
FCL は、フォン ノイマン コンピューターがプログラムを実行する方法に近い命令型プログラミング言語です。プログラムは、暗黙の状態、つまりグローバル メモリを維持しながら、一連のコマンドに従って順番に実行されます。FCL には手順の概念はありませんが、条件付きジャンプと無条件ジャンプが用意されています。FCL プログラムの抽象呼び出しグラフは単純なフロー チャートであるため、FCL はその名前にふさわしいものです。
FCL プログラムは、名前付きの値の有限の系列をパラメータとして入力し、結果として値を生成します。
構文
FCL の構文はBackus-Naur 形式を使用して指定します。
FCL プログラムは、正式なパラメータ宣言のリスト、エントリ ラベル、および一連の基本ブロックです。
< p > ::= "(" < x > * ")" "(" < l > ")" < b > +
当初、この言語では負でない整数変数のみが許可されます。
基本ブロックは、ラベル、割り当てのリスト、およびジャンプで構成されます。
< b > ::= < l > ":" < a > * < j >
代入は、式に変数を割り当てます。式は、定数、変数、または組み込みの n 項演算子の適用のいずれかです。
< a > := < x > ":= < e >
< e > := < c > | < x > | < o > "(" < e > * ")"
プログラム全体で出現する変数名は、プログラムの先頭で宣言する必要はありません。プログラムの先頭で宣言された変数は、プログラムへの引数を指定します。
値は負でない整数のみであるのと同様に、定数も同様です。副作用がない限り、一般的な演算のリストは無関係ですが、例外として 0 による除算などがあります。
< c > ::= "0" | "1" | "2" | ...
< o > ::= "+" | "-" | "*" | "=" | " < " | " > " | ...
ここで、=、< 、... は C と同じ意味を持ちます。-の意味は、xy<0 の場合、xy=0 となるということです。
例
n>2 の場合に n番目の フィボナッチ数を計算するプログラムを作成します。
(名詞)
(初期化)
初期化: x1 = 1
x2 = 1
嘘: x1 = x1 + x2
t = x1
x1 = x2
x2 = t
n = -(n 1)
if >(n 2) then fib else exit
終了: 戻り値 x2
ここで、 fibのループ不変量は、x1 が (i+2-1)番目、x2 が (i+2) 番目のフィボナッチ数であることです。ここで、i はfibがジャンプした 回数です。
プログラムの実行トレースを表示することで、n=4 の場合のメソッドの正しさを確認できます。
はプログラムの最終状態を示し、戻り値は です。
バリエーション
可逆フローチャート言語
可逆フローチャート言語(RL)は、各計算プロセスが可逆である可逆コンピューティング用に設計された、シンプルな可逆命令型プログラミング言語です。[4] RLは、ステップ、テスト、アサーションを組み合わせて、プログラムの可逆性を保証します。
RL では、決定論的な逆方向計算を可能にし、処理中に情報が失われないようにする可逆プログラムの構築を重視しています。この特性により、RL は、通常は不可逆な操作を伴う従来のフローチャート言語とは区別されます。RL の構文とサンプル プログラムは、従来のフローチャート言語によく似ていますが、可逆性を確保するための制約が追加されています。これには、可逆ループ、可逆条件、アトミック計算ステップの可逆性が含まれます。
可逆性制約のため、RL は従来のチューリングマシンよりも計算能力は劣りますが、可逆チューリングマシン (RTM) と同等であり、可逆プログラミングの基礎を築きます。たとえば、構造化プログラム定理の可逆バリアントは、RL を使用して効果的に分析でき、可逆コンピューティングの理論的基礎におけるその重要性を示しています。また、RL の構造化バリアント (SRL: 構造化可逆フローチャート言語) [4]もあり、これは、プログラムの可逆性を保証する方法でシーケンス、選択、および反復を組み合わせています。
参考文献
- ^ Carsten K. Gomard および Neil D. Jones。部分評価によるコンパイラ生成。GX Ritter 編『Information Processing '89』。IFIP 11th World Computer Congress Proceedings、1139~1144 ページ。IFIP、北ホラント、1989 年。
- ^ Neil D. Jones、Carsten K. Gomard、Peter Sestoft。部分評価と自動プログラム生成。LO Andersen と T. Mogensen の章を含む。Prentice Hall International、1993 年 6 月。xii + 415 ページ。ISBN 0-13-020249-5。http : //www.itu.dk/~sestoft/pebook/pebook.html から無料で入手可能。
- ^ John Hatcliff。シンプルなフローチャート言語を使用したオンラインおよびオフラインの部分評価入門。部分評価 - 実践と理論、DIKU 1998 国際サマースクール、John Hatcliff、Torben Æ. Mogensen、Peter Thiemann (編)。1998 年、Springer-Verlag、ロンドン、英国、20-82 ページ。
- ^ ab 横山哲夫; ホルガー・ボック・アクセルセン; ロバート・グリュック (2016年1月). 「可逆フローチャート言語の基礎」.理論計算機科学. 611 : 87–115. doi : 10.1016/j.tcs.2015.07.046 .
