Alg*_*fic 6 evaluation parsing haskell
我编写了读取字符串输入的解析器.这样可行.我还写了一个评估员,它会吐出结果.但是有一个小细节,我在实施时遇到了麻烦.请看以下示例:
+(sw+(2,2),sr)
Run Code Online (Sandbox Code Playgroud)
这种小语言的sw结构假设要评估"+(2,2)"并将其存储在某处.sr结构将读取此存储区域.整个表达式将评估为8.
我对它的想法是为函数eval使用一个额外的参数来存储结果.但是,我看不出这种情况.注意我是haskell的新手,所以请善待.哦,这是功课.所以不要给我一个解决方案,给我一个提示.
由于表达式可以读写存储区,因此评估函数应将内存状态作为参数,并在结果中返回新状态.
evaluate :: Expr -> Int -> (Float, Int)
Run Code Online (Sandbox Code Playgroud)
[ Int存储的类型在哪里,Float是结果的类型,当然你可以改变它].
实现时evaluate (Sum a b),需要将内存传递给内存evaluate a,获取新的内存值并将其赋予evaluate b.
|
| m
\ /
|----------| x
|evaluate a|--------|
|----------- |
| |
| m' |
\ / \ /
|----------| y ---
|evaluate b|----->| + |
|----------| ---
| |
| |
\ / \ /
final final
value of result
memory
Run Code Online (Sandbox Code Playgroud)
使用模式匹配.你开始吧let (x,m') = evaluate a m in ....