From: Francis Russell Date: Fri, 14 Sep 2012 13:38:16 +0000 (+0100) Subject: Fix integer and float parsing. X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=83336e6e5cf0b0a2969c12d44356cc6b34dd1eb4;p=francis%2Fofc.git Fix integer and float parsing. --- diff --git a/src/Parsing.hs b/src/Parsing.hs index ecafd98..6af4767 100644 --- a/src/Parsing.hs +++ b/src/Parsing.hs @@ -31,8 +31,7 @@ TokenParser { reserved = oflReserved , brackets = oflBrackets , symbol = oflSymbol , parens = oflParens - , float = oflFloat - , integer = oflInteger + , naturalOrFloat = oflNaturalOrFloat } = makeTokenParser oflDef oflOperatorTable = [[Infix (do { oflSymbol "^"; return (\x y -> Power x y) }) AssocLeft], @@ -65,7 +64,7 @@ parseIndexDeclaration = do { indexType <- parseIndex; parseIdentifier = oflIdentifier "identifier" parseAssignment :: Parsec String OFL () -parseAssignment = do { lhs <- parseIdentifierAccess; +parseAssignment = do { lhs <- parseExpression; oflSymbol "="; rhs <- parseExpression; modifyState(\x -> addAssignment x lhs rhs) @@ -78,8 +77,11 @@ parseTerm = do { oflReserved "laplacian"; operand <- oflParens parseExpression; do { oflReserved "sum"; sum <- oflParens parseSum; return sum} <|> do { oflReserved "derivative"; derivative <- oflParens parseDerivative; return derivative} <|> do { oflReserved "component"; component <- oflParens parseComponent; return component} <|> - do { float <- oflFloat; return $ ConstReal float } <|> - do { integer <- oflInteger; return $ ConstInteger integer } <|> + do { number <- oflNaturalOrFloat; + return $ case number of + Left i -> ConstInteger i + Right r -> ConstReal r + } <|> oflParens parseExpression <|> parseIdentifierAccess "term"