2012-02-03 161 views
0

我在使用Haskell進行文件解析工作,我正在使用Data.Attoparsec.Char8Data.ByteString.Char8。我想解析一個表達式,其中可以包含如下符號:-/[] _。(減號,斜線,布拉克和下劃線)。haskell標識符識別

我已經寫了下面的解析器

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

有人可以幫助我。

謝謝你的時間。

回答

1

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

添加一個「 - 」一組,將它放在一個開頭或字符串的結尾。

後者不解析,因爲您的班級列表中沒有點。

+0

@sdv非常感謝,但關於(。)怎麼樣? – 2012-02-03 15:36:43

+0

@FOPALéonConstantin你對A.inClass的論點沒有意義 - 只需添加它即可! – sclv 2012-02-03 15:50:28

+0

@FOPALéonConstantin,你看錯了位置。答案看起來像'完成rest_of_string結果' – luqui 2012-02-03 19:06:57

1

您想允許標識符中使用'-'個字符,但A.inClass使用'-'作爲範圍。您必須將它放在範圍字符串的開頭或結尾:

要將字面值'-'添加到集合中,請將其放在字符串的開頭或結尾。

- attoparsec documentation

+0

非常感謝,但關於(。)怎麼樣? – 2012-02-03 15:48:09