Delphi-PRAXiS
Seite 4 von 8   « Erste     234 56     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Der HAM-Parser (https://www.delphipraxis.net/59668-der-ham-parser.html)

arbu man 24. Jan 2006 21:01

Re: Der HAM-Parser
 
Hab deinen Parser mal für 2 kleinere Projekte eingesetzt.
Mir ist dabei auf gefallen:

- Der parser abeitet schnell ( Rechnungen in 15s :thumb: )
- Das mit dem Variablen hinzufügen ist etwas gewöhungs bedürtig.

Es sollte vieleicht noch eine funktion geben wie
Delphi-Quellcode:
function isvarset(name: string): boolean;
begin
  if Parser.VariableByName[name]<> nil then begin
    result:=true;
  end else begin
    result:=false;
  end;
end;
oder ein procedure die eine variable mit einen wert setzt und sollte diese noch nicht erstellt sein diese auch erstellt.

Was mich noch interessieren würde was genau ist das x86-Assembler-Plugin ? :gruebel:

3_of_8 24. Jan 2006 21:07

Re: Der HAM-Parser
 
15s? War das ein Tippfehler oder ironisch?

Dax 24. Jan 2006 21:11

Re: Der HAM-Parser
 
Zitat:

Zitat von arbu man
Es sollte vieleicht noch eine funktion geben wie
Delphi-Quellcode:
function isvarset(name: string): boolean;
begin
  if Parser.VariableByName[name]<> nil then begin
    result:=true;
  end else begin
    result:=false;
  end;
end;

Hmm, okay.. Werde ich im nächsten Update einbauen :)


Zitat:

Zitat von arbu man
as mich noch interessieren würde was genau ist das x86-Assembler-Plugin ? :gruebel:

Na ein Plugin, das aus der geparsten Formel Assemblercode erstellt ;-) Läuft meistens fast doppelt so schnel.


Zitat:

Zitat von 3_of_8
15s? War das ein Tippfehler oder ironisch?

Borgli? Is der bei dir so schnarchlahm? ;)

arbu man 24. Jan 2006 21:18

Re: Der HAM-Parser
 
Zitat:

Na ein Plugin, das aus der geparsten Formel Assemblercode erstellt Wink Läuft meistens fast doppelt so schnel.
Klingt nicht schlecht.

oh :mrgreen: hab doch glatt vergessen zu schreiben das es nicht eine rechung war sondern 512² Rechnungen und nicht grade einfache rechnungen.

Dax 24. Jan 2006 21:20

Re: Der HAM-Parser
 
Zitat:

Zitat von arbu man
oh :mrgreen: hab doch glatt vergessen zu schreiben das es nicht eine rechung war sondern 512² Rechnungen und nicht grade einfache rechnungen.

Zeich mal her was man mit dem Teil so schönes verbrechen kann :)

arbu man 25. Jan 2006 17:41

Re: Der HAM-Parser
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zeich mal her was man mit dem Teil so schönes verbrechen kann
Ne ganze Menge AVs produzieren :mrgreen:

Nee alle AVs hab ich heute aus dem prog verbannt.
Naja ist nach nicht ganz fertig aber was anzeigen kann.

cos(z*12)/(2*(z*6.28+1)) , tan(x*y) oder pi+x+y+z-3 sind ganz nett

Dax 25. Jan 2006 17:44

Re: Der HAM-Parser
 
Zitat:

Zitat von arbu man
Ne ganze Menge AVs produzieren :mrgreen:

:shock: Ich hoffe an denen bist du Schuld ;)

Zitat:

Zitat von arbu man
Naja ist nach nicht ganz fertig aber was anzeigen kann.

cos(z*12)/(2*(z*6.28+1)) , tan(x*y) oder pi+x+y+z-3 sind ganz nett

Ja, sieht toll aus :thumb: Bin mal auf die Endversion gespannt ;-)

arbu man 25. Jan 2006 17:54

Re: Der HAM-Parser
 
Zitat:

Zitat von Dax
:shock: Ich hoffe an denen bist du Schuld ;)

Ja, man sollte halt nicht in einen array schreiben wenn dieser keinen Speicher dazu hat :mrgreen:

---Bernhard--- 7. Feb 2006 21:21

Re: Der HAM-Parser
 
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;
:hi:

Dax 7. Feb 2006 21:37

Re: Der HAM-Parser
 
Neue Version in der das nicht mehr passieren sollte ist hochgeladen..


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:27 Uhr.
Seite 4 von 8   « Erste     234 56     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz