Mana parser based on Parsec
This commit is contained in:
parent
00ceb48e2f
commit
49d01e6520
1 changed files with 57 additions and 0 deletions
57
ManaParser.hs
Normal file
57
ManaParser.hs
Normal file
|
@ -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'
|
Loading…
Reference in a new issue