2013-04-22 53 views
2

我现在使用的是Parsec和示例版本的boolExpr http://hpaste.org/86299。我正在通过GHC在Windows上编译。Haskell parsec match if(3)as if(3> 0)

上面的代码将匹配一个布尔表达式像3 < 4a not 3但是它不会匹配像3true(((3 < 1)))的表达式。任何人都可以给我建议如何匹配3(((3 < 1)))3 > 0(((3 < 1))) > 0相同的表达式,其中> 0是假定/自动添加在RHS-less表达式上吗?

+2

澄清:你想把字符串'“3”'解析成与'“3> 0”'相同的结构? – 2013-04-22 06:51:35

+0

ie:'3> 0'导致表达式验证if(expr)expr;然而'(3> 0)'导致(expr),因此,如果没有RHS,我必须能够解析括号内的任何单个项大于0。 (((3))) - >(((3> 0)> 0)> 0)> 0,除非你知道一个更好的方法来做这个表达式,例如'while(1)','while 1))'和'while((x> 2))'是有效的。 – kvanberendonck 2013-04-22 06:54:44

回答

2

这看起来像是试图将语言的语义推入语法解析器。从编程语言角度来看,“正确”的做法是在语法树中接受数字和布尔值表达式。然后,在稍后的阶段 - 类型重构而不是解析 - 确定数值型表达式将添加到它们中的单个“> 0”,而布尔值表达式则不会。