Delphi-PRAXiS
Seite 2 von 2     12   

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)

---Bernhard--- 8. Feb 2006 13:28

Re: Der HAM-Parser
 
Danke, funktioniert Problemlos :)

bg 11 20. Feb 2006 15:57

Re: Der HAM-Parser
 
Liste der Anhänge anzeigen (Anzahl: 1)
kann ich den Parser in mein Delphiprogramm einbauen, sodass ich einfach auf dem Formblatt die Funktion eingebe und diese in eine Funktion übertragen wird, die den passenden Y-Wert der Funktion berechnet?? Ich baue nämlich die numerische Integration (Sehnentrapezregel) in mein Programm als Anhang für ne Facharbeit.. Und das ist nicht so schön, wenn man die Funktion immer in der Unit verändern muss...

Bitte um Hilfe.. Hab mir den Parser angeguckt und hatte keine Ahnung ob, und wie er mir helfen kann.....

Danke

PS: im Anhang mein "Programm"....

bg 11 21. Feb 2006 12:44

Re: Der HAM-Parser
 
Kann mir bitte jemand helfen ?? (siehe letzter Beitrag....)
Ich habe mir den HAM-Parser geholt, komme mit ihm aber nicht klar..

Mit welcher procedure übergibt man die Funktion an den Parser und welche Ausgabe bekomme durch welche Funktionen des Parsers??

Ich bitte um Hilfe!!

Dax 21. Feb 2006 13:01

Re: Der HAM-Parser
 
Heya,

Zitat:

Zitat von bg 11
Mit welcher procedure übergibt man die Funktion an den Parser und welche Ausgabe bekomme durch welche Funktionen des Parsers??

Hast du dir die Demos angesehen? Dem Parser sagst du mit .Expression := Formel, was er zu lösen hat, und mit .Eval löst du das Ding. Eval() gibt eine Referenz auf eine THAMVariable zurück, der Wert der dich interessieren wird ist garantiert .Value (der einzige übrigens).

Variablen und Funktionen, die du in der Formel verwendest, sollten unbedingt im Parser registriert sein, sonst gibt es Fehler.

bis dann

bg 11 21. Feb 2006 13:14

Re: Der HAM-Parser
 
Danke Dax...
Werde ich mal ausprobieren...

Ich habe mir alle Demos mal angeschaut, aber der Umfang und einige Datentypen, die ich nicht kenne, haben mich als "Anfänger" (habe Delphi in Informatik 12 GK in der Schule seit 2 Jahren...) sehr verwirrt...

Danke... mfg

Dax 21. Feb 2006 13:17

Re: Der HAM-Parser
 
Ja, es gibt in der Tat einfachere Parser, die aber genauso gut für deinen Zweck geeignet wären. Einen meine ich im Hier im Forum suchenCQParser von dem hier erkennen zu können ^^

bg 11 22. Feb 2006 15:22

Re: Der HAM-Parser
 
Liste der Anhänge anzeigen (Anzahl: 1)
der rechnet mit komplexen Zahlen.. Ich habe aber keine Ahnung von komplexen Zahlen!!!
In der Beschreibung sagt der Autor, man könne den Parser aber auch für "normale" Funktionen nutzen... Wie das??? Wie kann ich eine Variabele festlegen (zum Beispiel x (ganz einfallsreich)), die ich dann in einer Funktion benutzen kann?? (z.b. 1/(1+x^2))

Kannst du mir helfen den sinnvoll einzubauen???
Hier die neuste Version meines Programms im Anhang....

Alexander 23. Feb 2006 15:03

Re: Der HAM-Parser
 
Auch bei Dizzys Parser liegt ein Beispiel bei. War glaube ich ein Performance Test.
---
So habe es gerade noch mal geöffnet:
In der Demo steht:
Delphi-Quellcode:
  p := TCQParser.Create; //p: TCQParser;
  p.NumberFormat := nfReal;
  p.SetVariable(A, pi2);
  p.Parse(formula); // forumula ist ein String mit der Formel :)

bg 11 23. Feb 2006 15:13

Re: Der HAM-Parser
 
Super!! Danke. werde ich ausprobieren..

Wofür steht A,pi2 ??

dizzy 24. Feb 2006 03:08

Re: Der HAM-Parser
 
Zitat:

Zitat von bg 11
Wofür steht A,pi2 ??

Die 4 Zeilen sind ohne Zusammenhang evtl. etwas verwirrend ;)

Schritt für Schritt:
Delphi-Quellcode:
procedure Foo;
var
  p: TCQParser;
  v: Double;
  e: Double;
begin
  v := 10;
  p := TCQParser.Create; // klar, Parser erstmal instantiieren
  p.NumberFormat := nfReal; // Dem Parser mitteilen, dass er bitte mit normalen Zahlen rechnen soll ;)
  p.RegisterVariable('x', v); // Dem Parser eine Variable 'x' bekannt machen, die den Wert von v enthalten wird.
  // p.SetVariable(...); Ist wie RegisterVariable, aber für bereits damit erzeugte Variablen.
  p.Parse('(20-x)^2'); // Parsed die Formel. D.h. bereitet sie intern aufs's Ausrechnen vor.
  p.Solve(e); // Rechnet die Formel aus, und schreibt das Ergebnis in e. (e=100 hier)
end;
Parse und Solve sind voneinander getrennt, damit es möglich ist die Werte von Variablen nach dem Parsen zu ändern. Das spart bei jeder Änderung eine Menge Rechenzeit, da das Parsen and sich recht viel CPU-Arbeit (Zeit) kostet, die man so nur einmal machen muss.
Der Parser ist somit dafür gerüstet, ein und die selbe Formel in der sich nur Werte ändern, immer und immer wieder zu lösen ohne zu viel Zeit zu verbraten.


Schönen Gruss,
dizzy

bg 11 24. Feb 2006 18:54

Re: Der HAM-Parser
 
super!! Danke!! Klassssse!! Die Demo/ das Bsp hab ich nicht und jetzt wird mir alles klar!!!!

mfg

bg 11 24. Feb 2006 19:08

Re: Der HAM-Parser
 
Woher hast du diese Demo....? Ich durchsuche gerade das Forum und verstricke mich im Wirrwar.....
Danke für eure Hilfe....

bg 11 25. Feb 2006 10:59

Re: Der HAM-Parser
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich bin immer noch dabei den TCQ-Parser in mein Programm zu integrieren, kam gerade nen Schritt weiter, stehe aber vor dem nächsten Problem: Delphi scheint den Befehl parser.registervariable nicht zu erkennen!! Ich weiß nicht warum!! Kann jemand mir einen Tipp geben??
Hab nen Screenshot gemacht... Siehe Anhang..

Danke,

Alexander 25. Feb 2006 12:07

Re: Der HAM-Parser
 
Moin,
am besten ist es wohl, wenn du einen neuen Thread eröffnest. Hier geht's ja eher um den "HAM-Parser" von Dax.
Damit dir dieser Post noch was nützt: http://www.delphipraxis.net/internal...ghlight=parser
Der Anhang im ersten Post beinhaltet auch eine Demo. Die kannst du ja mal laden ;). Dann dürften deine Fragen eigentlich geklärt sein.

xZise 26. Jan 2007 11:31

Re: Der HAM-Parser
 
Ich hatte zuerst mit deiner Vorgängerversion programmiert, aber nun wollte ich HAM nehmen, weil ich es eh nicht komplieren brauch...

Was muss ich jetzt nun zum alten Parser beachten?
Also was muss ich registrieren etc...

[edit]Ich habe schon gesehen, dass man +/-/*///^ registieren muss... [/edit]

Dax 26. Jan 2007 11:39

Re: Der HAM-Parser
 
Huch, is das schon lange her... Weiß schon bald selbst nicht mehr, wie das Ding funktioniert. Grundsätzlich musst du nur registrieren, was du brauchst. Also die Standardoperatoren +, -, * und / sowie einige Funktionen und wahrscheinlich Variablen. Zu den Demos gehört eine Unit mit allen dieser Standardoperatoren, vielleicht hilft dir das schon weiter. Funktionen registrieren sollte ähnlich gehen... Frag am besten mal DGL-luke, der dürfte von HAM mittlerweile mehr Ahnung haben als ich^^

xZise 26. Jan 2007 11:50

Re: Der HAM-Parser
 
Zitat:

Zitat von Dax
Huch, is das schon lange her...

Kennste ein besseren ^^

Zitat:

Zitat von Dax
Weiß schon bald selbst nicht mehr, wie das Ding funktioniert. Grundsätzlich musst du nur registrieren, was du brauchst. Also die Standardoperatoren +, -, * und / sowie einige Funktionen und wahrscheinlich Variablen. Zu den Demos gehört eine Unit mit allen dieser Standardoperatoren, vielleicht hilft dir das schon weiter. Funktionen registrieren sollte ähnlich gehen... Frag am besten mal DGL-luke, der dürfte von HAM mittlerweile mehr Ahnung haben als ich^^

Okay... Ich werds mir angucken...
@ Luke: lol ^^

Dax 26. Jan 2007 11:57

Re: Der HAM-Parser
 
Zitat:

Zitat von xZise
Kennste ein besseren ^^

Für Win32 keinen kostenlosen, der Funktionalität in diesem Umfang bietet.. Aber das muss nichts heißen :) Hab mit Delphi schon seit gefühlten Jahrzehnten nix mehr gemacht :roteyes:

mschnell 2. Jul 2007 13:42

Re: Der HAM-Parser
 
Hi Dax,

Wir verwenden gerade Deinen HAM Parser im Rahmen eines größeren Projektes (das wir hier auch demnächst veröffentlichen wollen).

Dabei haben wir einen kleinen Bug gefunden.

In HAM_Main bei der Funktion THAMParser.GetVarByIndex müsste die Zeile

Delphi-Quellcode:
  if not ((Index < 0) or (Index >= fFunctions.Count)) then

richtiger Weise

Delphi-Quellcode:
  if not ((Index < 0) or (Index >= fVariables.Count)) then
ebenso müsste bei THAMParser.GetOpByIndex

vermutlich auch

Delphi-Quellcode:
  if not ((Index < 0) or (Index >= fOperators.Count)) then
stehen.

-Michael

mschnell 2. Jul 2007 14:08

Re: Der HAM-Parser
 
Hi Dax again,

Wir basteln an einem Programm bei den man eine Formel für eine Funktion eingeben kann und das dann diverse in dieser Funktion enthaltene Parameter p0...pm so bestimmt, dass die Kurve möglichst genau eine Menge von vorgegebenen Punkten repräsentiert (nichtlineare Ausgleichsrechnung).

Hierzu muss die Funktion natürlich zig tausend mal mit unterschiedlichem x und mit unterschiedlichen Parametern p0...pm ausgewertet werden. Dazu ist der HAM Parser excellent geeignet, da er ja nicht bei jedem Aufruf den Text interpretiert, sondern auf einer entsprechend vorbereiteten Struktur arbeitet.

Wir benutzen nun VariableByIndex[i].Value um x und die p's vor der Auswertung zu setzen.

Eigentlich wäre es praktischer und vermutlich schneller, die x und p's als externe Funktionen aufrufen zu lassen. Der HAM-Parser kann aber keine Funktionen ohne Parameter aufrufen.

Gibt es vielleicht doch eine bessere Möglichkeit als VariableByIndex[i].Value ?

Gruß,

-Michael

Dax 2. Jul 2007 14:31

Re: Der HAM-Parser
 
Bei den Get*ByIndex hast du wahrscheinlich Recht, das wird ein Copy&Waste-Relikt sein, dass nie aufgefallen ist :?

Zu deiner anderen Frage: Variablen sind Objekte, also könntest du dir alle benötigten Variablen in ein Array stecken und immer mir array[i].Value die Werte setzen. Dadurch sparst du dir viele Aufrufe, aber das Endergebnis bleibt gleich (sollte jedenfalls, ich kenn mich mit HAM mittlerweile selbst nicht mehr aus...)

mschnell 2. Jul 2007 16:10

Re: Der HAM-Parser
 
Zitat:

Zitat von Dax
Bei den Get*ByIndex hast du wahrscheinlich Recht, das wird ein Copy&Waste-Relikt sein, dass nie aufgefallen ist :?

Wäre natürlich schön, das im Archiv zu ändern.


Ansonsten: Vielen Dank für den Tipp.

-Michael

Topper 31. Aug 2007 16:14

Re: Der HAM-Parser
 
Hi,

ich habe mir den HAM-Parser heruntergeladen und wollte ihn an den Demo dateien ausprobieren...

dabei tritt allerdings immer der selbe Fehler auf.
Wenn ich die DEmo starten will zeigt mir Delphi an, dass er die HAM_Base.pas nicht compilieren kann, weill 'IInterface' und 'E_NOINTERFACE' nicht deklariert sind ... allerdings habe ich keine Ahnung woran das liegen kann (da der Parser ja bei anderen Personen zu funktionieren scheint)

... ich wollte den Parser für ein Schulprojekt benutzen (wir benutzen noch Delphi 6)

wenn es am veralteten Delphi liegen sollte, könnte mir dann jemand einen Tipp geben, wie ich diese Fehler umgehen kann ohne die Delphi Version zu aktualisieren?

MfG Topper

Dax 31. Aug 2007 16:16

Re: Der HAM-Parser
 
Puh... Das ist wirklich verzwickt, habe ich den Parser doch auch ehemals in Delphi 6 geschrieben... Insofern sollte es schon funktionieren, und warum es das nicht tut, kann ich leider nicht erklären.

Topper 3. Sep 2007 11:01

Re: Der HAM-Parser
 
... gibt es denn sonst niemanden, der eine idee hätte, warum der compiler bemängelt, dass 'IInterface' und 'E_NONINTERFACE' nicht deklariert sind ... ich hatte sogar probiert, die demo zu starten, nachdem ich die dateien nochmals heruntergeladen habe, aber es kam wieder die gleiche fehlermeldung

... ansonsten kann ich morgen auch noch einen screenshot erstellen

Christian Seehase 3. Sep 2007 11:44

Re: Der HAM-Parser
 
Moin Topper,

ich habe es eben mal ausprobiert.
Dazu habe ich alle HAM_*-Dateien in ein Unterverzeichnis von Delphis LIB-Verzeichnis gelegt, und dieses dann im Menü unter

Tools\Environment Options\Library

in den Feldern

Library path und Browsing path

hinzugefügt.

(Als Wert: $(DELPHI}\Lib\HAM)

Die deutsche Fassung müsste lauten

Extras\Umgebungsoptionen\Bibliothek und Bibliotheks-Pfad, Suchpfad.

Danach konnte ich alle fünf Demos problemlos compilieren.

Topper 6. Sep 2007 12:07

Re: Der HAM-Parser
 
nach langem hin und her hat es jetzt endlich geklappt ...

an den SChul-PC's kann ich nicht auf das Delphi Laufwerk zugreifen, da ich nicht genügen berechtigungen habe .... also musste ich erst den Rechner wechseln und dann konnte ich die Einstellungen vornehmen

... und siehe da, der HAM-Parser funktioniert einwandfrei! :mrgreen:

also ein dcikes Danke an Christian!


ich hätte jetzt noch einmal eine Frage:

kann der Parser auch funktionen ausgeben, oder berechnet er immer gleich das Ergebnis von meiner String-
eingabe?

dominikkv 16. Jan 2014 15:52

AW: Der HAM-Parser
 
Kurze Frage: Darf der Parser in kommerziellen Projekten verwendet werden? Da ist leider keine Lizenz dabei...

Jens01 16. Jan 2014 16:39

AW: Der HAM-Parser
 
Willst Du Dir das wirklich antun.

Hier 2 Parser, wobei der aus den Cindy-Components mE der bessere und schnellere ist :

cyMathparser

parser10

(beide frei)

himitsu 17. Jan 2014 12:58

AW: Der HAM-Parser
 
Wieso "antun"?

Im Notfall gibt es hier auch noch einige andere Mathe-Parser.

Aber so weit ich mich erinnere, hatte Sie (Dax) nichts dagegen, daß derartige OpenSource-Sachen auch in kommerziellen Projekten verwendet wurden.



Wobei Einige (teilweise "absichtlich") wirklich zum "antun" sind. :stupid:
http://www.delphipraxis.net/135569-m...athelib-_.html


Und zum Parser10: Ja, das Ding ist klein, relativ flott, aber dennoch kommt da eim "aua"-gefühl in mir hoch, wenn ich wieder daran Denke, was wir alles ändern mußten, um den "ordentlich" und vorallem effektiv nutzen zu können.
Für einfache Matheformeln, ohne eigene Funktionen, ist der aber benutzbar.

Jens01 17. Jan 2014 13:38

AW: Der HAM-Parser
 
Zitat:

Wieso "antun"?
Ich glaube (so gefühlt), die Parser aus diesem Forum habe ich alle durchgetestet. Und aber auch jeder hatte irgendwie einen dicken Bock drin.
Zitat:

Im Notfall gibt es hier auch noch einige andere Mathe-Parser.
Aber nur wenige, die funktionieren.

Zitat:

Und zum Parser10: Ja, das Ding ist klein, relativ flott, ...
Für meine Zwecke habe ich mir diesen cyMathparser angepaßt. Der war schneller und in der Struktur einfacher als parser10.

Zitat:

Aber so weit ich mich erinnere, hatte Sie (Dax) nichts dagegen, daß derartige OpenSource-Sachen auch in kommerziellen Projekten verwendet wurden.
Wenn das so ist, ist das ja okay. Ansonsten gilt das Urheberrecht und das ist nicht so ohne.

Und wenn man einen Mathparser professionell einsetzen will, benötigt man auch ein vernünftiges Unittesting dafür. Das fehlt bei parser10, cyMathparser und allen anderen.

himitsu 17. Jan 2014 14:03

AW: Der HAM-Parser
 
Die 2-3 Parser hier, von mir, waren nur "einfache" Varianten und vorallem mehr PoC's, an denen ich mich wild ausgetobt hatte.

Der Parser mit den Strings war grundsätzlich erstmal relativ fehlerunanfällig, was aber auch daran liegt, daß er praktisch nicht auf Geschwindigkeit optimiert wurde.
Aber wenn ich jetzt an das neue String-Chaos in den komischen Mobile-Compilern denke, dann wird mir diesbezüglich dann doch etwas schlecht.

Jens01 17. Jan 2014 14:20

AW: Der HAM-Parser
 
Meine Kritik war jetzt aber nicht im Speziellen auf Deine Arbeit bezogen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:05 Uhr.
Seite 2 von 2     12   

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