我目前正在为一种简单的编程语言编写解释器,只是想问最好的方法是解决它。
一个程序的环境如下:
type Env = [[(Var, Int)]]
所以我已经编写了lookup
andupdate
但我有点坚持如何处理每个 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) ] ]`
目前我的查找函数返回第一次出现的变量,所以我遇到了第二个作用域(第二个开始)的问题。
我不太确定如何使update
andlookup
函数返回与该特定范围关联的值。
基本上我的代码适用于一个begin
语句,但我在示例程序中遇到了 2 个或更多语句的问题。