0

我正在使用 Haskell 进行文件解析,并且我同时使用Data.Attoparsec.Char8Data.ByteString.Char8. 我想解析一个可以包含符号的表达式:- / [ ] _ 。(减号、斜线、括号和下划线)。

我写了以下解析器

import qualified Data.ByteString.Char8 as B
import qualified Data.Attoparsec.Char8 as A

identifier' :: Parser B.ByteString
identifier' = A.takeWhile $ A.inClass "A-Za-z0-9_//- /[/]"

...但它不像预期的那样工作。

ghc>  A.parse identifier' (B.pack "EMBXSHM-PortClo")
Done "-PortClo" "EMBXSHM"

ghc> A.parse identifier' (B.pack "AU_D[1].PCMPTask")
Done ".PCMPTask" "AU_D[1]"

有人能帮我吗。

谢谢你的时间。

4

2 回答 2

1

您希望'-'在标识符中允许字符,但A.inClass用于'-'范围。您必须将其放在范围字符串的开头或结尾:

要将文字添加'-'到集合中,请将其放在字符串的开头或结尾。

attoparsec 文档

于 2012-02-03T15:30:38.103 回答
1

看看文档:http ://hackage.haskell.org/packages/archive/attoparsec/0.10.1.0/doc/html/Data-Attoparsec-ByteString-Char8.html#g:9

要将“-”添加到集合中,请将其放在字符串的开头或结尾。

后者不会解析,因为您的课程列表中没有点。

于 2012-02-03T15:33:49.897 回答