Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import Text.Parsec
- import Text.Parsec.String
- import Text.Parsec.Expr
- import Text.Parsec.Token
- import Text.Parsec.Language
- data Field = Field { name :: String
- , dataType :: String
- , flag :: String
- , format :: String}
- deriving (Show, Eq)
- getFieldName :: Parser String
- getFieldName = many1 $ alphaNum <|> char '-'
- getDataType :: Parser String
- getDataType = many1 $ alphaNum <|> oneOf "-[]"
- getFlag :: Parser String
- getFlag = many1 $ oneOf "vimc" --view component, index member,
- --mandatory, and case sensitive are the
- --flags used by progress
- getFormat :: Parser String
- getFormat = many $ noneOf " \n"
- fieldsWithoutFlags :: Parser Field
- fieldsWithoutFlags = do
- iName <- getFieldName
- spaces
- iType <- getDataType
- spaces
- iFormat <- getFormat
- newline
- return $ Field {name = iName
- , dataType = iType
- , flag = ""
- , format = iFormat}
- fieldsWithFlags :: Parser Field
- fieldsWithFlags = do
- iName <- getFieldName
- spaces
- iType <- getDataType
- spaces
- iFlag <- getFlag
- spaces
- iFormat <- getFormat
- return $ Field {name = iName
- , dataType = iType
- , flag = iFlag
- , format = iFormat}
- testLine = "system-id char i X(12)"
- --Setup I'm trying to get working
- --field :: Either ParseError Field
- --field = case parse fieldsWithFlags "(test)" testLine of
- --Left err -> noFlags
- --Right res -> return Right res
- --where noFlags = case parse fieldsWithoutFlags "(test)" testLine of
- --Left err -> return Left err
- --Right res -> return Right res
- --Ideal:
- --main = case field of
- --Left err -> print err
- --Right res -> print res
- -- Latest working
- main = case parse fieldsWithFlags "(test)" testLine of
- Left err -> noFlags
- Right res -> print res
- where noFlags = case parse fieldsWithoutFlags "(test)" testLine of
- Left err -> print err
- Right res -> print res
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement