Einzelnen Beitrag anzeigen

Benutzerbild von ---Bernhard---
---Bernhard---

Registriert seit: 26. Dez 2003
Ort: Abensberg
111 Beiträge
 
Delphi 2006 Professional
 
#39

Re: Der HAM-Parser

  Alt 7. Feb 2006, 22:21
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;
Bernhard Doll
Das Leben ist ein sch*** Spiel... aber eine super Grafik!!
http://www.doll-online.net
  Mit Zitat antworten Zitat