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