]> git.unchartedbackwaters.co.uk Git - francis/ofc.git/commitdiff
Fix integer and float parsing.
authorFrancis Russell <francis@unchartedbackwaters.co.uk>
Fri, 14 Sep 2012 13:38:16 +0000 (14:38 +0100)
committerFrancis Russell <francis@unchartedbackwaters.co.uk>
Fri, 14 Sep 2012 13:38:16 +0000 (14:38 +0100)
src/Parsing.hs

index ecafd982e4bad22a01be34a4fb00092faa52536f..6af4767a187dcc8f7d9738e744d2d8f584b456f5 100644 (file)
@@ -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"