簡體   English   中英

Haskell Parser未能通過“ |”讀取

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM