From 83336e6e5cf0b0a2969c12d44356cc6b34dd1eb4 Mon Sep 17 00:00:00 2001 From: Francis Russell Date: Fri, 14 Sep 2012 14:38:16 +0100 Subject: [PATCH] Fix integer and float parsing. --- src/Parsing.hs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) 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" -- 2.47.3