2013-04-22 117 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」,而布爾值表達式則不會。