From 49d01e6520958b814a5df2aaa84c4bd1c073d83a Mon Sep 17 00:00:00 2001 From: Correl Roush Date: Fri, 2 Mar 2012 10:50:49 -0500 Subject: [PATCH] Mana parser based on Parsec --- ManaParser.hs | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 ManaParser.hs diff --git a/ManaParser.hs b/ManaParser.hs new file mode 100644 index 0000000..3520162 --- /dev/null +++ b/ManaParser.hs @@ -0,0 +1,57 @@ +module ManaParser where + +import Mana +import Text.ParserCombinators.Parsec + +mana :: Parser Cost +mana = do + colorless' <- (many colorless) + colored' <- (many colored) + hybrid' <- (many hybrid) + phyrexian' <- (many phyrexian) + eof + return $ Cost (colorless' ++ colored') hybrid' phyrexian' + +standard :: Parser Standard +standard = colorless <|> colored + +colorless :: Parser Standard +colorless = do + mana <- many1 digit + return $ Standard (read mana :: Int) Colorless + +colored :: Parser Standard +colored = + do + mana <- many1 (oneOf ("Uu")) + return $ Standard (length mana) Blue + <|> do + mana <- many1 (oneOf ("Rr")) + return $ Standard (length mana) Red + <|> do + mana <- many1 (oneOf ("Bb")) + return $ Standard (length mana) Black + <|> do + mana <- many1 (oneOf ("Gg")) + return $ Standard (length mana) Green + <|> do + mana <- many1 (oneOf ("Ww")) + return $ Standard (length mana) White + +hybrid :: Parser Hybrid +hybrid = + do + char '(' + standard' <- standard + char '/' + standard'' <- standard + char ')' + return $ Hybrid standard' standard'' + +phyrexian :: Parser Phyrexian +phyrexian = + do + char '(' + standard' <- standard + string "/p)" + return $ Phyrexian standard'