1
我正在使用Parsec處理Haskell中的解析器。問題在於閱讀字符串"| "
。當我嘗試閱讀以下內容時,Haskell Parser在「|」上失敗閱讀
parseExpr = parseAtom
-- | ...
<|> do string "{|"
args <- try parseList <|> parseDottedList
string "| "
body <- try parseExpr
string " }"
return $ List [Atom "lambda", args, body]
我得到一個分析錯誤,如下所示。
Lampas >> {|a b| "a" }
Parse error at "lisp" (line 1, column 12):
unexpected "}"
expecting letter, "\"", digit, "'", "(", "[", "{|" or "."
另一個失敗的案例是^
承擔以下。
Lampas >> {|a b^ "a" }
Parse error at "lisp" (line 1, column 12):
unexpected "}"
expecting letter, "\"", digit, "'", "(", "[", "{|" or "."
但是,它的工作原理當字符串"| "
被替換"} "
預期。
parseExpr = parseAtom
-- | ...
<|> do string "{|"
args <- try parseList <|> parseDottedList
string "} "
body <- try parseExpr
string " }"
return $ List [Atom "lambda", args, body]
以下是上述修改後的REPL行爲。
Lampas >> {|a b} "a" }
(lambda ("a" "b") ...)
所以,問題是(一)沒有管在哈斯克爾串的特殊行爲,也許只有在<|>
鏈?,和(b)這種行爲是如何避免的?。
什麼是'parseList'和'parseDottedList'? – Ankur
@Ankur其他的「讀入」函數,如'char'或'spaces'。 – matt3141
嘗試改變它與另一個'char',一個沒有用在解析中,就像你選擇的'}',看看是否Haskell或你的語法 – chamini2