Add Expression Expression |
Sub Expression Expression |
Power Expression Expression |
- Component Expression String |
+ PositionComponent String |
Derivative Expression String deriving Show
data Assignment = Assign Expression Expression deriving Show
getType ofl (Add a b) = promote (getType ofl a) (getType ofl b)
getType ofl (Sub a b) = promote (getType ofl a) (getType ofl b)
getType ofl (Power a b) = promote (getType ofl a) (getType ofl b)
-getType ofl (Component e i) = Function
+getType ofl (PositionComponent _) = Function
getType ofl (Derivative e i) = getType ofl e
emptyOFL :: OFL
}
-validateExpression ofl (Component e i) = do {
- validateExpression ofl e;
+validateExpression ofl (PositionComponent i) = do {
indexExists ofl i;
}
oflOperandTypes = ["Real", "Function", "Integer"]
oflKeywords = oflIndexTypes ++
oflOperandTypes ++
- ["^", "+", "-", "*", "/", "laplacian", "inner", "sum", "derivative", "component", "target"]
+ ["^", "+", "-", "*", "/", "laplacian", "inner", "sum", "derivative", "r", "target"]
oflDef = emptyDef{ commentStart = ""
, commentEnd = ""
do { oflReserved "inner"; inner <- oflParens parseInner; return inner} <|>
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 { oflReserved "r"; index <- oflBrackets parseIdentifier; return $ PositionComponent index} <|>
do { number <- oflNaturalOrFloat;
return $ case number of
Left i -> ConstInteger i
parseDerivative = do { e1 <- parseExpression; oflSymbol ","; index <- parseIdentifier; return $ Derivative e1 index} <?> "derivative"
-parseComponent = do { e1 <- parseExpression; oflSymbol ","; index <- parseIdentifier; return $ Component e1 index} <?> "component access"
-
parseIdentifierAccess = do { identifier <- parseIdentifier;
indices <- option [] (oflBrackets $ oflCommaSep parseIdentifier);
return $ IndexedIdentifier identifier indices