![]() |
Kompilierender Matheparser
Liste der Anhänge anzeigen (Anzahl: 3)
Huhu DP! :)
Ich hab (mal wieder :mrgreen:) einen Matheparser geschrieben, aber diesmal einen besonderen. Mit diesem kann man Ausdrücke nicht nur Parsen, sondern auch noch kompilieren ;) (Habs mal duchgetestet, ist schneller als Delphieigene Kompilate) Ich stells einfach mal so hier rein, zum Doks-schreiben ist es einfach zu.. heiß.. und das Interface erklärt sich eh fast von selbst, und mit den Comments in den Units und den Units selbst kommt man auch gut über die Runden. Hoffe ich ;) read you, Dax [edit] :oops: da waren ein paar Fehler, verzeiht [/edit] nocheinedit: Wieder ein paar Fehler ausgebügelt :) |
Re: Kompilierender Matheparser
hi,
scheint interesant zu sein ! hast du vielleicht ein Beispiel parat, wie man den Parser bedient ? cu, stefan2005 |
Re: Kompilierender Matheparser
hi,
ich habe es gerade mal ausprobiert mit Delphi 6 und Delphi 2005. ich konnte aber nicht alles compilieren, da die Funktion "MoveLongWord" in der Unit ECQ_Def.pas in Zeile 193 unbekannt war :wink: cu, stefan2005 |
Re: Kompilierender Matheparser
:oops: Ja, ich hab ne neue Version hochgeladen, jetzt sollts gehen ;)
|
Re: Kompilierender Matheparser
Liste der Anhänge anzeigen (Anzahl: 1)
*seufz* Heut is nicht mein Tag ^^ Das Beispiel ist vielleicht kurz, aber es trifft schon in etwa das Thema, denke ich :?
|
Re: Kompilierender Matheparser
Er scheint wirklich extrem schnell zu sein. Auch ein paar Millionen Durchläufen schafft er sehr schnell !
Gratulation ;) :thumb: |
Re: Kompilierender Matheparser
Danke Alexander :)
Der Parser schlägt ja wie gesagt auch Delphi bei RealMode-Berechnungen.. als ich das gesehen hab, hats mich echt vom Hocker gehauen ^^ |
Re: Kompilierender Matheparser
Hi,
hab dein Beispiel angeguckt und gesehen das z.B. 2*(3+2) funktioniert, aber (3+2)*2 nicht. |
Re: Kompilierender Matheparser
Ich kuck mal, was da schief gelaufen ist :)
Danke ;) edit: gelöst :) |
Re: Kompilierender Matheparser
hi,
es wäre vielleicht schön, wenn man "richtige" Variablen definieren könnte und der Parser berechnet die Formel dann, ohne die Variablen aber verschwinden zu lassen (sozusagen vereinfachen). aus : 3+A*(B+2) -> 3+A*B+A*2 oder so, zumindest vereinfachen und die Klammern wegmachen. cu, stefan2005 |
Re: Kompilierender Matheparser
An dem Problem sitze ich gerade. Irgendwann wirds auch fertig sein, aber zur Zeit halt leider noch nicht ;)
BtW: Was meinst du mit "richtigen" Variablen? :? |
Re: Kompilierender Matheparser
hi,
ja wäre toll wenn du das noch einbauen könntest ! dann könnte ich den Parser echt gebrauchen ! richtige Variablen, keine Konstanten, also eher Platzhalte die (noch) keinen festen Wert haben ! cu, stefan2005 |
Re: Kompilierender Matheparser
Stefan, hier sind die Variablen "richtige" Variablen, Konstanten sinds nur, wenn bei der registrierung der Variablen Constant True ist, Standard ist aber False ;)
|
Re: Kompilierender Matheparser
Wow, Klasse! :thumb: Ich wollte mich auch mal an so etwas machen, allerdings haben mir die Ansätze gefehlt. Ich bin sicher, aus dem Source kann ich ewig viel lernen :)
Man liest sich, Stanlay :hi: |
Re: Kompilierender Matheparser
Hui :oops: Ich hab die ganze Zeit gedacht, das Ding wär nix besonderes..
|
Re: Kompilierender Matheparser
Ja wie!? Meinen Parser hier veröffentlichen? :P (*schörz*, Dax weiss es einzuordnen)
Auch an dieser Stelle nochmals Gratulation und Dank an dich! :love: Das Teil ist echt lecker. Gruss, Fabian |
Re: Kompilierender Matheparser
Soo... Also Hallo erstmal ;)
Ich hab ne neue Version hochgeladen, die sollte bei den Klammersetzungen keinen Mist mehr bauen (danke Spider für den Tip :)), und ein Presolver ist endlich auch integriert! :D read you, Dax |
Re: Kompilierender Matheparser
Einfach nur mal für mich zur Info und weil ich hier, wo ich gerade bin nichts testen/runterladen kann.
Du kannst also bei dem Parser Formeln mit Variablen vorgeben? Also z.B. X=A*100/B*((C*C)/1)*(B*B)) Dann kannst du den variablen A, B, C Werte vorgeben und der rechnet dir dann X aus? Gehe ich davon richtig aus? In wie weit werden Funktionen wie zum cos, sin, Wurzel etc. unterstützt? Hintergrund ist, dass ich für mein Projekt einige Spielentscheidene Formeln in Textdateien auslagern möchte, um auch anderen Teammitgliedern zu ermöglichen, die Formeln zum Test anzupassen. Kann ich es dafür verwenden? Kann ihr leider nicht die Demos und so runterladen um mir es anzuschauen, aber bin schon sehr interessiert dadran ;) |
Re: Kompilierender Matheparser
Ja, kannst du. Mit RegisterVariable und SetVariable kannst du jeweils die Variablen registrieren und festlegen, der Parser hat auch Funktionen wie Sqr, Sqrt, Ln, Exp, Power(^), Cos(h), Sin(h), Tan(h) usw im Programm ;)
Ich seh mal zu, eine Demoapp fertigzukriegen, in der alles angemessen aufgeführt wird :) |
Re: Kompilierender Matheparser
Coole Sache. Dann brauche ich mich ja garnicht mehr weiter zu suchen. Sobald ich dann Heute zu Hause bin und Zeit habe, werde ich es mal testen ;)
|
Re: Kompilierender Matheparser
Gibt's irgendwo eine Liste der unterstützten Funktionen? Welche Konstanten werden von Haus aus unterstützt (e, Pi?)?
Dust Signs |
Re: Kompilierender Matheparser
Hui schön :) Hätte auch nicht wirklich gedacht, das jemand (außer dizzy) jemals so einen Parser brauchen könnte :)
@DS: Funktionsliste kommt mit der Demo :) |
Re: Kompilierender Matheparser
Zitat:
Dust Signs |
Re: Kompilierender Matheparser
Sorry, ich meine mit der neuen Demo, die von oben ist nur schnell zusammengebastelt.. :)
|
Re: Kompilierender Matheparser
Zitat:
|
Re: Kompilierender Matheparser
Zitat:
Dust Signs |
Re: Kompilierender Matheparser
So, eine Demo ;-)
Nehmt sie mal auseinander, das ist das erste Mal, das ich eine Demo schreibe ^^ PS: Es gibt schon wieder ;) eine neue Version :) |
Re: Kompilierender Matheparser
Eine EXE wäre nett. Ich hab atm kein Delphi :tongue:
Dust Signs |
Re: Kompilierender Matheparser
Okay, extra nur für dich :stupid:
Edit: Exe ist jetzt imer ersten Post |
Re: Kompilierender Matheparser
Hallo,
sieht wirklich knatter interessant aus. Das Demo erzeugt aber einen Fehler. Wenn ich etwas syntaktisch falsches in das Edit eingebe poppt eine Exception hoch. Gebe ich anschließend einen syntaktisch korrekten Ausdruck an kommt trotzdem eine Exception. Erst ein Neustart des Demos hilft. |
Re: Kompilierender Matheparser
Jens, das kann ich leider nicht nachvollziehen :? Zeig doch mal deinen falschen und deinen richtigen Ausdruck...
|
Re: Kompilierender Matheparser
Danke :mrgreen:
Zur Belohnung gibt's haufenweise Anregungen ;) 1.)
Code:
liefert "Invalid expression". Wenn ich statt dem , einen . mache, meint er "Invalid float value". Oder was ist bei dir das Kommazeichen ;)
sin(0,00000000001)
2.) Das Wort "deregistrieren" gibt es nicht ^^ 3.) Es ist sehr interessant, dass
Code:
-0,19 ist. Da stimmt was nicht ;)
tan(10000000000000000pi/2)
4.) Du bist case-sensitiv. Das stört irgendwie. PI ist ja das selbe wie pi, nur eben groß geschrieben ;). Das selbe gilt für die Funktionsnamen 5.) Die Unterstütung von komplexen Zahlen generell, vor allem aber in Funktionen wäre nicht schlecht 6.) 0^0 ist nicht eins, sondern undefiniert ;) 7.) "Invalid expression" ist bei längeren Ausdrücken nicht mehr sehr aussagekräftig. Die Art des Fehlers und uU die Postition wären nett zu wissen 8.) Wo sind die inversen Kreisfunktionen und wo die Areafunktionen? 9.) Die Fenster der Demo in der Mitte des Bildschirms zu platzieren, wäre optisch besser 10.) Ich vermisse die frac-, int- und die round-Funktion 11.) Ich versteh nicht ganz, wie man dieses ganze unäre Zeugs bei dir verwendet 12.)
Code:
liefert eine "Invalid floating point operation". Müsste nicht eigentlich "Invalid expression" gemeldet werden?
pi^-pi
13.) Ich mag Menüpunkte, die keine Untermenüs haben, nicht toplevel ;) Dust Signs |
Re: Kompilierender Matheparser
Zitat:
|
Re: Kompilierender Matheparser
Hab auch noch ein Problem :(
Die Formel A*100/B*((C*C)/1)*(D*D) löst eine Access Violation aus. Alle Variablen sind mit ganzzahlen registriert. |
Re: Kompilierender Matheparser
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
@Jens: Danke, habs verbessert @jim: :? Muss ich mir mal genauer ansehen, Danke. Ich verbesser dann gleich noch mal was. ;) |
Re: Kompilierender Matheparser
Zitat:
Dust Signs |
Re: Kompilierender Matheparser
@DS: Ab her damit :D Dann wird der Komplex-Support vielleicht am Ende wirklich vollständig :)
|
Re: Kompilierender Matheparser
hab mir auch die exe gesaugt :oops:
also, ich würd mal sagen, is n ganz passabler kleiner taschenrechner :mrgreen: das ding verhält sich im endeffekt doch so wie eval() in js, oder? also ich muss schon sagen, kompliment! |
Re: Kompilierender Matheparser
Im Endeffekt ja, nur ein bisschen schneller (und vielleicht auch mächtiger) ;)
|
Re: Kompilierender Matheparser
@Dust Signs: Sind diese dann auch via Zerlegung in komplexe auf Quaternionen anwendbar? Dann bin ich da auch dran interessiert. (Ich möchte an dieser Stelle dann doch ganz gerne anmerken, dass die Funktionsbibliothek für komplexe und Quaternionen-Mathematik ursprünglich von mir stammt - wenn's genehm ist Dax :zwinker:. Und da ich keine Implementation für die inversen gefunden hatte, sind sie auch (noch) nicht drin ;)).
Zum Thema 0^0: Es ist definiert: x^0 = 1 für alle x element R. Ich wüsste nicht, dass die 0 da einen Sonderfall darstellt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:02 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