【发布时间】:2017-10-02 22:49:24
【问题描述】:
您好,我收到了这样的代码:
data Digit = Zero | One | Two | Three | Four | Five | Six | Seven | Eight |
Nine
deriving (Eq, Show)
data Number = Single Digit | Many Digit Number deriving (Eq, Show)
data Expr = Lit Number
| Sub Expr
| Sum Expr Expr
| Mul Expr Expr
deriving (Eq, Show)
所以这段代码的想法是有一个字符串,比如* + 2 3 * 2 + 6 - 2,它将表示为((2 + 3) * (2 * (6 - 2))),然后使用它来将部分字符串放入其中。当然最后找到结果,在这种情况下是 40。问题是我对解析不太了解,所以我真的不知道如何解析这样的表达式。我见过一些简单的解析,其中字符串被解析为类型,比如人或其他东西。但我认为这有点复杂。如果有人有任何建议,我会很感兴趣。
【问题讨论】:
-
你确定你的输入不应该是
* + 2 3 * 2 - 6 2吗?这看起来像前缀波兰表示法。 -
与stackoverflow.com/q/46516500/625403比较——我认为某处一定有一些课程将其作为练习。在这种情况下,
-应该是一元负数,而不是二元减法。 -
@Alec
Sum Expr Expr对我来说是正确的。有问题的构造函数是Sub,而不是Sum。 -
另外,如果你写的是 (6 + (-2)) 而不是 (6 - 2),那么你的例子会更清楚,这就是输入的实际代表。
标签: parsing haskell expression