Hallo.
Habe gerade noch ein Problem festgestellt!
Folgende Funktion geht tadellos:
x^2+1
Jedoch macht folgende Probleme:
x^(2)+1
Es wird stattdessen die Funktion "x^3" verwendet!
Wie kann ich das Problem am besten umgehen?
Mein Code für die Operatorendefinition lautet so:
Delphi-Quellcode:
class procedure THAMSimpleOperators.RegToParser(Parser: THAMParser);
begin
with Parser do
begin
THAMSimpleOperators(AddOperator('+', otBinary, 1, Self)).fType := 1;
THAMSimpleOperators(AddOperator('-', otBinary, 1, Self)).fType := 2;
THAMSimpleOperators(AddOperator('*', otBinary, 2, Self)).fType := 3;
THAMSimpleOperators(AddOperator('/', otBinary, 2, Self)).fType := 4;
THAMSimpleOperators(AddOperator('^', otBinary, 3, Self)).fType := 10;
THAMSimpleOperators(AddOperator('-', otunaryPrefix, 1, Self)).fType := 0;
THAMSimpleOperators(AddOperator('+', otunaryPrefix, 1, Self)).fType := 20;
// change EvalDir from LeftToRight(2^2^3 -> (2^2)^3) to RightToLeft(2^2^3 -> 2^(2^3)) for the Power-Operator
OperatorByName['^'].EvalDir := edRightToLeft;
end;
end;
procedure THAMSimpleOperators.Call(const Args: THAMVariableArray;
const Result: THAMVariable);
begin
case fType of
1: Result.Value := Args[0].Value + Args[1].Value;
2: Result.Value := Args[0].Value - Args[1].Value;
3: Result.Value := Args[0].Value * Args[1].Value;
4: Result.Value := Args[0].Value / Args[1].Value;
10: Result.Value := Power(Args[0].Value, Args[1].Value);
0: Result.Value := -Args[0].Value;
20: Result.Value := Args[0].Value;
end;
end;