Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Kompilierender Matheparser (https://www.delphipraxis.net/46536-kompilierender-matheparser.html)

Dax 26. Mai 2005 18:05


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 :)

stefan2005 26. Mai 2005 18:09

Re: Kompilierender Matheparser
 
hi,
scheint interesant zu sein !
hast du vielleicht ein Beispiel parat, wie man den Parser bedient ?

cu,
stefan2005

stefan2005 26. Mai 2005 18:27

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

Dax 26. Mai 2005 18:29

Re: Kompilierender Matheparser
 
:oops: Ja, ich hab ne neue Version hochgeladen, jetzt sollts gehen ;)

Dax 26. Mai 2005 18:35

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 :?

Alexander 26. Mai 2005 18:46

Re: Kompilierender Matheparser
 
Er scheint wirklich extrem schnell zu sein. Auch ein paar Millionen Durchläufen schafft er sehr schnell !
Gratulation ;) :thumb:

Dax 26. Mai 2005 18:47

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 ^^

Die Muhkuh 26. Mai 2005 18:54

Re: Kompilierender Matheparser
 
Hi,

hab dein Beispiel angeguckt und gesehen das z.B.

2*(3+2)

funktioniert, aber

(3+2)*2

nicht.

Dax 26. Mai 2005 18:55

Re: Kompilierender Matheparser
 
Ich kuck mal, was da schief gelaufen ist :)

Danke ;)

edit: gelöst :)

stefan2005 26. Mai 2005 19:48

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

Dax 26. Mai 2005 19:54

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? :?

stefan2005 26. Mai 2005 19:55

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

Dax 26. Mai 2005 19:59

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 ;)

Stanlay Hanks 26. Mai 2005 20:06

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:

Dax 26. Mai 2005 20:08

Re: Kompilierender Matheparser
 
Hui :oops: Ich hab die ganze Zeit gedacht, das Ding wär nix besonderes..

dizzy 26. Mai 2005 23:55

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

Dax 27. Mai 2005 11:37

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

jim_raynor 27. Mai 2005 12:50

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 ;)

Dax 27. Mai 2005 12:57

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 :)

jim_raynor 27. Mai 2005 13:01

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 ;)

Dust Signs 27. Mai 2005 13:03

Re: Kompilierender Matheparser
 
Gibt's irgendwo eine Liste der unterstützten Funktionen? Welche Konstanten werden von Haus aus unterstützt (e, Pi?)?

Dust Signs

Dax 27. Mai 2005 13:03

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 :)

Dust Signs 27. Mai 2005 13:30

Re: Kompilierender Matheparser
 
Zitat:

Zitat von Dax
@DS: Funktionsliste kommt mit der Demo :)

Bin ich blind oder warum find ich sie nicht?

Dust Signs

Dax 27. Mai 2005 13:34

Re: Kompilierender Matheparser
 
Sorry, ich meine mit der neuen Demo, die von oben ist nur schnell zusammengebastelt.. :)

dizzy 27. Mai 2005 13:34

Re: Kompilierender Matheparser
 
Zitat:

Zitat von Dax
Ich seh mal zu, eine Demoapp fertigzukriegen, in der alles angemessen aufgeführt wird :)

Das ist Futur I ;)

Dust Signs 27. Mai 2005 13:37

Re: Kompilierender Matheparser
 
Zitat:

Zitat von dizzy
Zitat:

Zitat von Dax
Ich seh mal zu, eine Demoapp fertigzukriegen, in der alles angemessen aufgeführt wird :)

Das ist Futur I ;)

Achja genau :mrgreen: Deutsch ist ja auch schon wieder so lange her :mrgreen: *wart*

Dust Signs

Dax 27. Mai 2005 15:22

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 :)

Dust Signs 27. Mai 2005 15:26

Re: Kompilierender Matheparser
 
Eine EXE wäre nett. Ich hab atm kein Delphi :tongue:

Dust Signs

Dax 27. Mai 2005 15:28

Re: Kompilierender Matheparser
 
Okay, extra nur für dich :stupid:

Edit: Exe ist jetzt imer ersten Post

Jens Schumann 27. Mai 2005 15:53

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.

Dax 27. Mai 2005 15:54

Re: Kompilierender Matheparser
 
Jens, das kann ich leider nicht nachvollziehen :? Zeig doch mal deinen falschen und deinen richtigen Ausdruck...

Dust Signs 27. Mai 2005 15:54

Re: Kompilierender Matheparser
 
Danke :mrgreen:

Zur Belohnung gibt's haufenweise Anregungen ;)

1.)
Code:
sin(0,00000000001)
liefert "Invalid expression". Wenn ich statt dem , einen . mache, meint er "Invalid float value". Oder was ist bei dir das Kommazeichen ;)

2.) Das Wort "deregistrieren" gibt es nicht ^^

3.) Es ist sehr interessant, dass
Code:
tan(10000000000000000pi/2)
-0,19 ist. Da stimmt was nicht ;)

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:
pi^-pi
liefert eine "Invalid floating point operation". Müsste nicht eigentlich "Invalid expression" gemeldet werden?

13.) Ich mag Menüpunkte, die keine Untermenüs haben, nicht toplevel ;)

Dust Signs

Jens Schumann 27. Mai 2005 15:55

Re: Kompilierender Matheparser
 
Zitat:

Zitat von Dax
Jens, das kann ich leider nicht nachvollziehen :? Zeig doch mal deinen falschen und deinen richtigen Ausdruck...

(1+2)/ erzeugt eine Exception.

jim_raynor 27. Mai 2005 16:02

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.

Dax 27. Mai 2005 16:09

Re: Kompilierender Matheparser
 
Zitat:

Zitat von Dust Signs
Danke :mrgreen:

Zur Belohnung gibt's haufenweise Anregungen ;)

1.)
Code:
sin(0,00000000001)
liefert "Invalid expression". Wenn ich statt dem , einen . mache, meint er "Invalid float value". Oder was ist bei dir das Kommazeichen ;)

Danke, wurde verbessert :)

Zitat:

Zitat von Dust Signs
2.) Das Wort "deregistrieren" gibt es nicht ^^

Entschuldige ;)

Zitat:

Zitat von Dust Signs
3.) Es ist sehr interessant, dass
Code:
tan(10000000000000000pi/2)
-0,19 ist. Da stimmt was nicht ;)

Hmm :? Weiß nicht, was da schief gelaufen ist.

Zitat:

Zitat von Dust Signs
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

Wird mit der nächsten Version entfernt ;)

Zitat:

Zitat von Dust Signs
5.) Die Unterstütung von komplexen Zahlen generell, vor allem aber in Funktionen wäre nicht schlecht

Gibts, aber nicht in der Demo. Baue ich wohl besser noch ein ^^

Zitat:

Zitat von Dust Signs
6.) 0^0 ist nicht eins, sondern undefiniert ;)

Das ist aber eher Delphis Fehler, der Parser macht daraus "Power(0, 0)" ;-)

Zitat:

Zitat von Dust Signs
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

Danke, werds entsprechend verbessern :)

Zitat:

Zitat von Dust Signs
8.) Wo sind die inversen Kreisfunktionen und wo die Areafunktionen?

Kommen auch noch :) Aber nicht für komplexe Zahlen, für die weiß ich keine Implementationen mehr ^^

Zitat:

Zitat von Dust Signs
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

Kommen.. ;-)=

Zitat:

Zitat von Dust Signs
11.) Ich versteh nicht ganz, wie man dieses ganze unäre Zeugs bei dir verwendet

Erkläre das bitte mal genauer :)

Zitat:

Zitat von Dust Signs
12.)
Code:
pi^-pi
liefert eine "Invalid floating point operation". Müsste nicht eigentlich "Invalid expression" gemeldet werden?

Nein. Das - gibt es auch als Negationsoperator, da muss irgendwas schiefgelaufen sein..

@Jens: Danke, habs verbessert

@jim: :? Muss ich mir mal genauer ansehen, Danke.

Ich verbesser dann gleich noch mal was. ;)

Dust Signs 27. Mai 2005 16:17

Re: Kompilierender Matheparser
 
Zitat:

Kommen auch noch :D Aber nicht für komplexe Zahlen, für die weiß ich keine Implementationen mehr ^^
Kann ich dir geben, wenn du willst ;). Haben wir in Mathe den Großteil der Zeit gemacht ;)

Dust Signs

Dax 27. Mai 2005 16:18

Re: Kompilierender Matheparser
 
@DS: Ab her damit :D Dann wird der Komplex-Support vielleicht am Ende wirklich vollständig :)

DGL-luke 27. Mai 2005 16:19

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!

Dax 27. Mai 2005 16:21

Re: Kompilierender Matheparser
 
Im Endeffekt ja, nur ein bisschen schneller (und vielleicht auch mächtiger) ;)

dizzy 27. Mai 2005 16:22

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.
Seite 1 von 4  1 23     Letzte »    

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