在实现解释器时处理嵌套变量作用域

时间:2012-06-08 09:22:55

标签: haskell interpreter

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

程序的环境如下:

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

所以我编写了lookupupdate,但我对如何处理每个开始块的范围有点困惑。示例如下所示:

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]

因此env将是

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

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

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

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

0 个答案:

没有答案
相关问题