Advertisement
Guest User

Untitled

a guest
May 14th, 2012
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- data ::= usefulData data | invalidData data
  2. -- usefulData ::= keyAndId value
  3. -- keyAndId ::= firstPart id lastPart eol
  4. -- firstPart ::= "any_"
  5. -- id ::= digits
  6. -- lastPart ::= "_shape"
  7. -- value ::= symbols eol
  8. -- invalidData ::= symbols eol
  9. -- eol ::= end of line
  10.  
  11.  
  12. test :: String -> Either ParseError [(String,String)]
  13. test str = parse parser "" str
  14.  
  15. parser = do result <- Text.Parsec.Prim.try (many1 parKV) <|> Text.Parsec.Prim.try (many1 orPar)
  16.             return result
  17.  
  18. orPar = Text.Parsec.Prim.try parKV <|> Text.Parsec.Prim.try remaining            
  19.  
  20. remaining = do skipMany (noneOf "\n")
  21.                eol
  22.                return [] >> orPar
  23.  
  24. parKV = do
  25.           id <- tagLine
  26.           name <- nameLine
  27.           return (id,name)
  28.  
  29. tagLine :: GenParser Char st String
  30. tagLine = do result <- (between firstPart lastPart id)
  31.              eol
  32.              return result
  33.              where
  34.                 firstPart = string "any_"
  35.                 id = many digit
  36.                 lastPart = string "_shape"
  37.  
  38. nameLine :: GenParser Char st String
  39. nameLine = do name <- (many $ noneOf "\n")
  40.               eol
  41.               return name
  42.  
  43. eol :: GenParser Char st Char
  44. eol = char '\n'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement