Advertisement
Guest User

Untitled

a guest
May 12th, 2012
31
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- data ::= usefulData data | invalidData data | eol
  2. -- usefulData ::= keyAndId value
  3. -- keyAndId ::= firstPart id lastPart eol
  4. -- firstPart ::= "any_"
  5. -- id ::= digits
  6. -- lastPart ::= "_shape"
  7. -- value ::= string eol
  8. -- invalidData ::= string ivalidData | digit invalidData | eol
  9. -- eol ::= end of line
  10.  
  11.  
  12.  
  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