X
命令型コード(および周囲のプログラム)のチャンクが与えられた場合、そのコードが参照透過性であるかどうかを判断できるアルゴリズムはありますか?
私がこれまでに持っているのは:
コードの一部は、次の場合はRTです。
制御フローがXを離れた後、Xで割り当てられた非参照変数は読み取られません。
参照が解除され、Xで割り当てられているすべての参照変数は、ルール1に従って変数を参照していることを証明できます。
scanf()
変数が読み取られたり、関数が呼び出されたりすることはありません。その値は実行時の状態(つまり、、)に依存しますtime()
。argv
編集:コメントを参照
このアルゴリズムの完全な精度は絶対に必要というわけではありませんが、望ましいです。(これは実際の生活であり、CSクラスではないので、ある人が「正しいよりも単純である方が少し良い」と言っています。)
編集2:
抽象構文木として表される、参照やポインターのない単純化された言語のアルゴリズムスケッチ/アイデア:
- 原因と結果のペアを見つける(つまり、変数の割り当てと使用)
- 各ペアについて、ASTの親ノードを、最も低い共通の祖先までの非RTとしてマークします。
問題:初期化子についてどうすればよいですか?それらは割り当てとしてカウントされますか?