私は現在、単純なプログラミング言語のインタープリターを書いていますが、それに取り組むのが最善のアプローチであると聞きたかっただけです。
プログラムの環境は次のとおりです。
type Env = [[(Var, Int)]]
lookup
andをコーディングしましたupdate
が、各 begin ブロックのスコープをどう処理するかについて、少し行き詰っています。以下に例を示します。
begin [a,b,c]
read i
n = 1
while i < 0 do
begin
n = 2 * n
i = i - 1
end;
write n
end
私の理解では、最初の begin のスコープは [a,b,c,i,n] になり、2 番目の begin には [i, n] が含まれます。
したがって、環境は
[ [ ("a",0), (b",0), ("c",0), ("i",3), ("n",2) ], [("n",8), ("i",0) ] ]`
現在、私のルックアップ関数は変数の最初の出現を返すため、2 番目のスコープ (2 番目の開始) に問題があります。
update
andlookup
関数がその特定のスコープに関連付けられた値を返すようにする方法がよくわかりません。
基本的に、コードは 1 つのbegin
ステートメントで機能していますが、サンプル プログラムの 2 つ以上のステートメントで問題が発生しています。