[英]Haskell parse expression
嗨,我得到了这样的代码:
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。问题是我对解析不了解很多,所以我真的不知道如何解析这样的表达式。 我看到了一些简单的解析,其中将字符串解析为类型,例如person或其他内容。 但是我认为这有点复杂。 如果有人有任何建议,我将很感兴趣。
虽然Haskell有完善的解析库,并且对于此任务将非常有用,但您的输入格式非常简单,以至于手动进行解析不是很费力,而递归函数将消耗输入并返回解析后的表达式和其余部分字符串继续解析。
这是它的外观框架:
parse :: String -> (String, Expr)
parse (' ':more) = parse more
parse ('-':more) = let (remainder, e) = parse more
in (remainder, Sub e)
parse ('+':more) = undefined -- TODO
parse ('*':more) = undefined -- TODO
parse s@(num:more) | isDigit num = parseNumber s
parse s = error ("unexpected input: " ++ s)
parseNumber :: String -> (String, Expr)
parseNumber s = undefined
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.