我现在正在使用Parsec和boolExpr http://hpaste.org/86299的示例版本。我正在通过GHC在Windows上进行编译。
上面的代码会匹配一个布尔表达式,例如3 < 4
或a not 3
,但它与3
,true
或(((3 < 1)))
这样的表达式不匹配。任何人都可以就如何将3
和(((3 < 1)))
这样的表达式与3 > 0
和(((3 < 1))) > 0
相匹配给出建议,其中在RHS上自动假设/添加&gt; 0没有表达?
答案 0 :(得分:2)
这看起来像是在尝试将语言的语义推送到语法解析器中。从编程语言的角度来看,“正确”的做法是在语法树中接受数字和布尔值表达式。然后,在稍后阶段 - 类型重建不解析 - 决定数值表达式添加单个“&gt; 0”,而布尔值表达式不添加。