haskell标识符识别

时间:2012-02-03 15:19:32

标签: parsing haskell regular-language

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

我写了以下解析器

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]"

有人可以帮助我。

感谢您的时间。

2 个答案:

答案 0 :(得分:1)

您希望在标识符中添加'-'个字符,但A.inClass使用'-'作为范围。你必须把它放在范围字符串的开头或结尾:

  

要向文本'-'添加文字{{1}},请将其放在字符串的开头或结尾。

     

- attoparsec documentation

答案 1 :(得分:1)

查看文档:{​​{3}}

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

后者无法解析,因为您的班级列表中没有点。