распознавание идентификатора haskell - PullRequest
0 голосов
/ 03 февраля 2012

я работаю в парсинге файлов с использованием Haskell, и я использую и Data.Attoparsec.Char8 и Data.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]"

может кто-нибудь мне помочь.

Спасибо за ваше время.

Ответы [ 2 ]

1 голос
/ 03 февраля 2012

Ознакомьтесь с документацией: http://hackage.haskell.org/packages/archive/attoparsec/0.10.1.0/doc/html/Data-Attoparsec-ByteString-Char8.html#g:9

Чтобы добавить «-» в набор, поместите его в начало или конец строки.

Последний не анализируется, потому что у вас нет точек в списке классов.

1 голос
/ 03 февраля 2012

Вы хотите разрешить '-' символов в идентификаторах, но A.inClass использует '-' для диапазонов.Вы должны поместить его в начало или конец строки диапазона:

Чтобы добавить литерал '-' в набор, поместите его в начало или конец строки.

- документация attoparsec

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...