我最近一直在为基本编程语言编写一个解释器,一切都很顺利。但是有人可以告诉我关于添加双打支持的最佳方法。目前只支持Ints,但我也希望增加对双打的支持。
答案 0 :(得分:4)
输入Env a = [[Var,a]]
这是一个类型的家庭。 Env Int
是一个int环境,Env Double
是一个双重环境,依此类推。这不是一种可以同时保持整数和双精度的类型,这可能就是你所需要的。
可以包含整数和双精度的类型可能如下所示:
data Val = IntNum Int | DoubleNum Double
然后您可以将您的环境设为
type Env = [ (Var, Val) ]
(我不知道你为什么在这里使用列表列表。)
您需要为IntNum
和DoubleNum
个案分别定义算术运算(如果您的语言支持,也可能用于混合操作数)。
添加布尔值和列表非常简单,只需将另外几个案例添加到Val
。
您必须处理语言中出现的类型错误,因为它开始支持多种类型。我不认为这个简单的设计非常适合静态类型安全的语言。如果你想要,那么必须对设计进行重大调整。
答案 1 :(得分:2)
简单的答案是定义一个可以保存以太Int
或Double
s的变体类型,例如
data Value = Int Int
| Double Double
并相应地修改Env
和其他类型的定义:
type Env = [[(Var, Value)]]
data ValExpr = IVar Var
| IVal Value
...
但如果您打算添加更多类型,我会考虑使用GADT s。
编辑:错字