[英]Haskell Parser Fails on “|” Read
我正在使用Parsec在Haskell中分析器。 問題在於讀取字符串"| "
。 當我嘗試閱讀以下內容時,
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") ...)
所以問題是(a) 管道在Haskell字符串中是否有特殊行為,也許僅在<|>
鏈中? ,以及(b) 如何避免這種行為? 。
人物|
可以是一組保留字符。 測試其他字符,例如^
,我認為它也會同樣失敗。 解決此問題的唯一方法可能是更改保留字符集或解釋器的結構。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.