Haskell坚持解析布尔逻辑

时间:2012-05-30 13:24:10

标签: haskell parsec

我正在为一种简单的编程语言编写解析器。它到了那里但是我无法解析布尔逻辑语句,例如“i == 0 AND j == 0”。我所得到的只是“非详尽的模式”

当我自己解析一个布尔表达式时,它工作得很好,例如“我== 0”。注意“i == 0 a”也会返回一个布尔语句,但“i == 0 AND”不会返回任何内容。

有人可以帮忙吗?

虽然上述方法适用于输入,例如run parseBoolean“i == 0”

1 个答案:

答案 0 :(得分:2)

正如@hammar指出的那样,你应该使用Text.Parsec.Expr来做这种事情。但是,既然这是作业,也许你必须这么做!

问题出在parseArithmetic,您允许anyChar成为运算符,但在case语句中,您只允许+-,{{ 1}},*/%。当^尝试解析parseArithmetic时,它会使用第一个i == 0作为运算符,但无法从第二个=解析intExp2,并且失败在进入案例陈述之前,在monad和回溯中。但是,当您尝试解析=时,它会获得i == 0 AND j == 0部分,但之后它会认为存在i ==的算术表达式,其中0 A ND是运算符,并且A是某个变量的名称,因此它适用于案例,繁荣

顺便说一句,不是使用解析器匹配字符串,然后使用case语句再次匹配它,您可以让解析器返回函数而不是字符串,然后直接应用函数:

ND