1
parse' :: Parser a -> String -> [(a,String)]
parse' p inp = p `with` inp
parse :: Parser a -> String -> [a]
parse p inp = [ v | (v,[]) <- parse' p inp ]
mkMany1 :: (Parser a -> Parser [a]) -> Parser a -> Parser [a]
mkMany1 many p = do x <- p
xs <- many p
return (x:xs)
many1L :: Parser a -> Parser [a]
many1L = mkMany1 manyL
manyL :: Parser a -> Parser [a]
manyL p = (many1L p) ||| (success [])
我試圖解析爲多個子的不包含字符'<'
,'>'
或' '
(空間),但我沒有按分析器」的String t似乎終止。有人能給我一些關於我失蹤的指示嗎?哈斯克爾「解析」並無終止對特定類型的字符串
textValid :: Char -> Bool
textValid c = c /= '<' && c /= '>' && not (isSpace c)
text :: Parser String
text = manyL (sat textValid)
當我嘗試運行以下命令時,它永遠不會終止。
parse (manyL text) "abc def <"
'many'和'manyL'是如何定義的?我懷疑'manyL'卡在這個空間。 – 2013-04-24 18:58:47
對不起,它只是'manyL',我已經添加了'manyL'的定義。 – rlhh 2013-04-24 19:06:26
將'textValid'定義爲_not_ something是一個經典的解析錯誤。您允許絕對__any__字符不在「< >」中,而您應該準確指定您允許的內容 - 可能只是字母數字值,以字母開頭?任何事情都不好解析。錯誤地匹配包含在字符串或類似錯誤中的分隔符太容易。 – AndrewC 2013-04-24 20:46:11