AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Der HAM-Parser
Thema durchsuchen
Ansicht
Themen-Optionen

Der HAM-Parser

Ein Thema von Dax · begonnen am 26. Dez 2005 · letzter Beitrag vom 17. Jan 2014
Antwort Antwort
Seite 4 von 8   « Erste     234 56     Letzte »    
Dax
Huhu

Ich hab wieder zugeschlagen ^^ und noch einen Matheparser gebaut

Das Ding heißt HAM (fragt nicht wofürs steht, ich muss mir noch was einfallen lassen ) und ist mal wieder meinem Perfektionismus entsprungen. Der ECQP war einfach nicht so ganz das wahre, also hab ich den gebaut. (Und weil ich quasi versprochen habe, es zu tun ^^)

Also dann.. Ein Archiv sagt mehr als tausend Worte, oder? Eins mit dem gesamten Sourcecode (jämmerlich kommentiert) und (bis jetzt) drei Demos (ganz schön schön kommentiert ) ist im Anhang. Weitere Demos, unter anderem zu den Plugins () werden noch Folgen.

*SCHINKEN zum zerfleddern bereit hinstell* (warum denkt ihr bei dem Namen auch immer ans essen? )
Angehängte Dateien
Dateityp: zip ham_124.zip (28,0 KB, 712x aufgerufen)
 
Benutzerbild von arbu man
arbu man

 
Delphi 7 Professional
 
#31
  Alt 24. Jan 2006, 22:01
Hab deinen Parser mal für 2 kleinere Projekte eingesetzt.
Mir ist dabei auf gefallen:

- Der parser abeitet schnell ( Rechnungen in 15s )
- 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 ?
Björn
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

 
Turbo Delphi für Win32
 
#32
  Alt 24. Jan 2006, 22:07
15s? War das ein Tippfehler oder ironisch?
Manuel Eberl
  Mit Zitat antworten Zitat
Dax
 
#33
  Alt 24. Jan 2006, 22:11
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 von arbu man:
as mich noch interessieren würde was genau ist das x86-Assembler-Plugin ?
Na ein Plugin, das aus der geparsten Formel Assemblercode erstellt Läuft meistens fast doppelt so schnel.


Zitat von 3_of_8:
15s? War das ein Tippfehler oder ironisch?
Borgli? Is der bei dir so schnarchlahm?
  Mit Zitat antworten Zitat
Benutzerbild von arbu man
arbu man

 
Delphi 7 Professional
 
#34
  Alt 24. Jan 2006, 22:18
Zitat:
Na ein Plugin, das aus der geparsten Formel Assemblercode erstellt Wink Läuft meistens fast doppelt so schnel.
Klingt nicht schlecht.

oh hab doch glatt vergessen zu schreiben das es nicht eine rechung war sondern 512² Rechnungen und nicht grade einfache rechnungen.
Björn
  Mit Zitat antworten Zitat
Dax
 
#35
  Alt 24. Jan 2006, 22:20
Zitat von arbu man:
oh 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
  Mit Zitat antworten Zitat
Benutzerbild von arbu man
arbu man

 
Delphi 7 Professional
 
#36
  Alt 25. Jan 2006, 18:41
Zitat:
Zeich mal her was man mit dem Teil so schönes verbrechen kann
Ne ganze Menge AVs produzieren

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
Angehängte Dateien
Dateityp: zip fxy_112.zip (411,0 KB, 58x aufgerufen)
Björn
  Mit Zitat antworten Zitat
Dax
 
#37
  Alt 25. Jan 2006, 18:44
Zitat von arbu man:
Ne ganze Menge AVs produzieren
Ich hoffe an denen bist du Schuld

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 Bin mal auf die Endversion gespannt
  Mit Zitat antworten Zitat
Benutzerbild von arbu man
arbu man

 
Delphi 7 Professional
 
#38
  Alt 25. Jan 2006, 18:54
Zitat von Dax:
Ich hoffe an denen bist du Schuld
Ja, man sollte halt nicht in einen array schreiben wenn dieser keinen Speicher dazu hat
Björn
  Mit Zitat antworten Zitat
Benutzerbild von ---Bernhard---
---Bernhard---

 
Delphi 2006 Professional
 
#39
  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
  Mit Zitat antworten Zitat
Dax
 
#40
  Alt 7. Feb 2006, 22:37
Neue Version in der das nicht mehr passieren sollte ist hochgeladen..
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 8   « Erste     234 56     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:43 Uhr.
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