2

私は現在、単純なプログラミング言語のインタープリターを書いていますが、それに取り組むのが最善のアプローチであると聞きたかっただけです。

プログラムの環境は次のとおりです。

type Env = [[(Var, Int)]]

lookupandをコーディングしました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 番目の開始) に問題があります。

updateandlookup関数がその特定のスコープに関連付けられた値を返すようにする方法がよくわかりません。

基本的に、コードは 1 つのbeginステートメントで機能していますが、サンプル プログラムの 2 つ以上のステートメントで問題が発生しています。

4

0 に答える 0