parseFortranParamProperty :: OFLParser FortranParameterProperty
parseFortranParamProperty =
- parseNameProperty <|> parseTypeProperty <|> parseSpaceProperty <|> parseIndexedProperty <?> "Fortran parameter property" where
- parseNameProperty = do _ <- lSymbol "name"; name <- lParens lStringLiteral; return $ ParamName name
- parseTypeProperty = do _ <- lSymbol "type"; fType <- lParens parseFortranType; return $ ParamType fType
- parseSpaceProperty = do _ <- lSymbol "space"; info <- lParens parseSpaceInfo; return $ Space info
- parseSpaceInfo = do
- _ <- lSymbol "psinc_fine_grid"; indices <- lParens $ lCommaSep1 lIdentifier; return $ FinePsinc indices
- <|> do _ <- lSymbol "psinc_coarse_grid"; indices <- lParens $ lCommaSep1 lIdentifier; return $ CoarsePsinc indices
- parseIndexedProperty = do _ <- lSymbol "indexed"; indices <- lParens $ lCommaSep1 lIdentifier; return $ Indexed indices
+ parseNameProperty
+ <|> parseTypeProperty
+ <|> parseSpaceProperty
+ <|> parseIndexedProperty
+ <?> "Fortran parameter property" where
+ parseNameProperty = do
+ _ <- lSymbol "name"
+ name <- lParens lStringLiteral
+ return $ ParamName name
+ parseTypeProperty = do
+ _ <- lSymbol "type"
+ fType <- lParens parseFortranType
+ return $ ParamType fType
+ parseSpaceProperty = do
+ _ <- lSymbol "space"
+ info <- lParens parseSpaceInfo
+ return $ Space info
+ parseSpaceInfo = parseFineGrid <|> parseCoarseGrid
+ parseFineGrid = do
+ _ <- lSymbol "psinc_fine_grid"
+ indices <- lParens $ lCommaSep1 lIdentifier
+ return $ FinePsinc indices
+ parseCoarseGrid = do
+ _ <- lSymbol "psinc_coarse_grid"
+ indices <- lParens $ lCommaSep1 lIdentifier
+ return $ CoarsePsinc indices
+ parseIndexedProperty = do
+ _ <- lSymbol "indexed"
+ indices <- lParens $ lCommaSep1 lIdentifier
+ return $ Indexed indices
parseFortranType :: OFLParser FortranType
parseFortranType = do
- baseType <- parseBaseType;
+ baseType <- parseBaseType
maybeIndices <- optionMaybe parseArrayIndices
case maybeIndices of
Nothing -> return baseType
parsePPDFunctionSetProperty :: OFLParser PPDFunctionSetProperty
parsePPDFunctionSetProperty =
- parseBasisProperty <|> parseDataProperty <?> "PPD function set property" where
- parseBasisProperty = do _ <- lSymbol "basis"; ident <- lParens lIdentifier; return $ PPDBasis ident
- parseDataProperty = do _ <- lSymbol "data"; ident <- lParens lIdentifier; return $ PPDData ident
+ parseBasisProperty
+ <|> parseDataProperty
+ <?> "PPD function set property" where
+ parseBasisProperty = do
+ _ <- lSymbol "basis"
+ ident <- lParens lIdentifier
+ return $ PPDBasis ident
+ parseDataProperty = do
+ _ <- lSymbol "data"
+ ident <- lParens lIdentifier
+ return $ PPDData ident
runOFLParser :: String -> Either ParseError OFL
runOFLParser inputString = runParser parseOFL emptyOFL "" inputString