Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- data ::= usefulData data | invalidData data
- -- usefulData ::= keyAndId value
- -- keyAndId ::= firstPart id lastPart eol
- -- firstPart ::= "any_"
- -- id ::= digits
- -- lastPart ::= "_shape"
- -- value ::= symbols eol
- -- invalidData ::= symbols eol
- -- eol ::= end of line
- test :: String -> Either ParseError [(String,String)]
- test str = parse parser "" str
- parser = do result <- Text.Parsec.Prim.try (many1 parKV) <|> Text.Parsec.Prim.try (many1 orPar)
- return result
- orPar = Text.Parsec.Prim.try parKV <|> Text.Parsec.Prim.try remaining
- remaining = do skipMany (noneOf "\n")
- eol
- return [] >> orPar
- parKV = do
- id <- tagLine
- name <- nameLine
- return (id,name)
- tagLine :: GenParser Char st String
- tagLine = do result <- (between firstPart lastPart id)
- eol
- return result
- where
- firstPart = string "any_"
- id = many digit
- lastPart = string "_shape"
- nameLine :: GenParser Char st String
- nameLine = do name <- (many $ noneOf "\n")
- eol
- return name
- eol :: GenParser Char st Char
- eol = char '\n'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement