我正在尝试用 x = 4 和 pritn x 实现一些语言,使用 haskell 构建快乐到目前为止,我已经定义了这样的语法
terms
: term { [$1] }
| term terms { $1 : $2 }
term
: var '=' int { Assign $1 $3 }
| print var { Print $2 }
当我在类似的东西上运行它时
x = 4
print x
y = 5
print y
我明白了
[Assign "x" 4, Print "x", Assign "y" 5, Print "y"]
现在我想做实际的实现,但我不知道如何实现“分配”
虽然我不擅长 haskell,但从快乐的文档中,我看到了“让”实现,并得到了一些环境 p 的想法,并在
Exp : let var '=' Exp in Exp { \p -> $6 (($2,$4 p):p) }
| Exp1 { $1 }
Exp1 : Exp1 '+' Term { \p -> $1 p + $3 p }
| Exp1 '-' Term { \p -> $1 p - $3 p }
| Term { $1 }
Term : Term '*' Factor { \p -> $1 p * $3 p }
| Term '/' Factor { \p -> $1 p `div` $3 p }
| Factor { $1 }
Factor
: int { \p -> $1 }
| var { \p -> case lookup $1 p of
Nothing -> error "no var"
Just i -> i }
| '(' Exp ')' { $2 }
我猜“分配”实现必须对这个环境做一些事情,但我找不到任何例子。如何实现分配和打印,或者在哪里可以找到相关信息或示例?