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