![]() |
Re: Der HAM-Parser
Danke, funktioniert Problemlos :)
|
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".... |
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!! |
Re: Der HAM-Parser
Heya,
Zitat:
Variablen und Funktionen, die du in der Formel verwendest, sollten unbedingt im Parser registriert sein, sonst gibt es Fehler. bis dann |
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 |
Re: Der HAM-Parser
|
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.... |
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 :) |
Re: Der HAM-Parser
Super!! Danke. werde ich ausprobieren..
Wofür steht A,pi2 ?? |
Re: Der HAM-Parser
Zitat:
Schritt für Schritt:
Delphi-Quellcode:
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.
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; 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 |
Re: Der HAM-Parser
super!! Danke!! Klassssse!! Die Demo/ das Bsp hab ich nicht und jetzt wird mir alles klar!!!!
mfg |
Re: Der HAM-Parser
Woher hast du diese Demo....? Ich durchsuche gerade das Forum und verstricke mich im Wirrwar.....
Danke für eure Hilfe.... |
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, |
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: ![]() Der Anhang im ersten Post beinhaltet auch eine Demo. Die kannst du ja mal laden ;). Dann dürften deine Fragen eigentlich geklärt sein. |
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] |
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^^
|
Re: Der HAM-Parser
Zitat:
Zitat:
@ Luke: lol ^^ |
Re: Der HAM-Parser
Zitat:
|
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:
ebenso müsste bei THAMParser.GetOpByIndex
if not ((Index < 0) or (Index >= fVariables.Count)) then
vermutlich auch
Delphi-Quellcode:
stehen.
if not ((Index < 0) or (Index >= fOperators.Count)) then
-Michael |
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 |
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...) |
Re: Der HAM-Parser
Zitat:
Ansonsten: Vielen Dank für den Tipp. -Michael |
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 |
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.
|
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 |
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. |
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? |
AW: Der HAM-Parser
Kurze Frage: Darf der Parser in kommerziellen Projekten verwendet werden? Da ist leider keine Lizenz dabei...
|
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 : ![]() ![]() (beide frei) |
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: ![]() 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. |
AW: Der HAM-Parser
Zitat:
Zitat:
Zitat:
Zitat:
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. |
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. |
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. |
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