Parsing 哈斯克尔标识符识别
我使用Haskell进行文件解析,我同时使用Parsing 哈斯克尔标识符识别,parsing,haskell,regular-language,Parsing,Haskell,Regular Language,我使用Haskell进行文件解析,我同时使用Data.attopassec.Char8和Data.ByteString.Char8。我想解析一个表达式,它可以包含如下符号:-/[].(减号、斜线、空格和下划线) 我已经编写了以下解析器 import qualified Data.ByteString.Char8 as B import qualified Data.Attoparsec.Char8 as A identifier' :: Parser B.ByteString identifi
Data.attopassec.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]"
有人能帮我吗
谢谢您的时间。您想在标识符中允许
'-'
字符,但A.inClass
使用'-'
表示范围。必须将其置于范围字符串的开始或结束处:
若要将文字'-'
添加到集合中,请将其放置在字符串的开头或结尾
-
请查看文档: 若要向集合中添加“-”,请将其放置在字符串的开头或结尾
后者不会解析,因为类列表中没有点。@FOPALéonConstantin如果A.inClass的参数中没有点,只需添加它@FOPALéonConstantin,你找错位置了。答案看起来像字符串结果的
Done剩余部分