2

我目前正在为一种简单的编程语言编写解释器,只是想问最好的方法是解决它。

一个程序的环境如下:

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

所以我已经编写了lookupandupdate但我有点坚持如何处理每个 begin 块的范围。一个例子如下所示:

begin [a,b,c] 
    read i
    n = 1
    while i < 0 do
        begin
        n = 2 * n
        i = i - 1
        end;
    write n
end

据我了解,第一个开始的范围是 [a,b,c,i,n] 然后第二个开始将包含 [i, n]

因此环境将是

[ [ ("a",0), (b",0), ("c",0), ("i",3), ("n",2) ], [("n",8), ("i",0) ]    ]` 

目前我的查找函数返回第一次出现的变量,所以我遇到了第二个作用域(第二个开始)的问题。

我不太确定如何使updateandlookup函数返回与该特定范围关联的值。

基本上我的代码适用于一个begin语句,但我在示例程序中遇到了 2 个或更多语句的问题。

4

0 回答 0