, 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],
parseIdentifier = oflIdentifier <?> "identifier"
parseAssignment :: Parsec String OFL ()
-parseAssignment = do { lhs <- parseIdentifierAccess;
+parseAssignment = do { lhs <- parseExpression;
oflSymbol "=";
rhs <- parseExpression;
modifyState(\x -> addAssignment x lhs rhs)
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"