Forum: PC-Programmierung Java - mathematische Ausdrücke als String erstellen und berechnen - Kennt wer eine Bibliothek?


von Wühlhase (Gast)


Lesenswert?

Mahlzeit allerseits

Ich will einen String mit einem mathematischen Ausdruck (so etwas wie 
"3*4" oder "sqrt(pi)" oder "ln(e)>log(10)") in eine Rechenoperation 
konvertieren (lassen) und deren Ergebnis abgreifen.

Ich hab ein paar Bibliotheken gefunden (JEL und GNU Expression Library) 
und wollte mal fragen, ob die jemand kennt und etwas zu deren 
Brauchbarkeit sagen kann. Hat jemand schon einmal damit gearbeitet und 
kann was zu deren Tauglichkeit sagen? Oder hat sogar eine andere 
Empfehlung?

Es geht um keine allzu komplizierten Sachen (keine Matrizen, keine 
komplexe Rechnung, keine Integration oder Differentiation), wobei ich 
nix gegen solche Funktionen habe.
Aber sowas wie Wurzel- und Logarithmenoperationen und ähnliche niedere 
Mathematik sollen machbar sein.
Hat da wer Erfahrungen?

von Istdochso (Gast)


Lesenswert?

Das ist doch ein Kinderspiel.

von d.o. (Gast)


Lesenswert?

Naja, Kinderspiel. Wenn man es dann mal wirklich macht, wird das Kind 
schnell gross...

Freund G**gle spuckt diverse Leute aus, die sich damit etwas tiefer 
beschäftigt haben. Einen guten Überblick als Startpunkt findest du z.B. 
hier https://stackoverflow.com/q/3422673.

Ich selbst habe schon einmal ein ähnliches Problem mit der ScriptEnging 
gelöst. Hat geklappt, würde es wieder so machen.

Grüße!

von Chinese (Gast)


Lesenswert?

Ich würde einen parser schreiben der die Leerzeichen aus dem String 
Holt, die ganzen Operatoren sucht und Alles was zwischen den Operatoren 
ist verrechnet

von Heiko J. (heiko_j)


Lesenswert?

Ich denke du wirst da keine fertige library finden. Aber wenn Du nen 
Parser schreiben willst würde ich dir JavaCC als Basis empfehlen.

https://javacc.org/

https://en.wikipedia.org/wiki/JavaCC

von Istdochso (Gast)


Lesenswert?

Für 60€/h schreib ich dir die Bibliothek innerhalb von zwei Monaten inkl 
Unit Tests und allem drum und dran.

von Datenablecker (Gast)


Lesenswert?

Das schreibe ich dir an einem Tag. Für jeden Oldschoolinformatiker der 
noch sein Handwerk beherrscht ist das ein Klacks, schon zig mal in 
diversen Sprachen umgesetzt.

Mach besser Parkplatzwächter, dann wirste nicht überfordert.

von 50c (Gast)


Lesenswert?

> "kennt wer..."

wer so etwas schreibt, für den wird es schwer einen Parser für 
(mathematische) Ausdrücke zu schreiben...

...my 50c

von test (Gast)


Lesenswert?

Ich hab für sowas mal muparser genommen. Der ist aber C++. Für Java hab 
ich auf die Schnelle den hier gefunden:
http://mathparser.org

von Wühlhase (Gast)


Lesenswert?

Danke...aber ich denke, einen Parser krieg ich womöglich auch selber 
noch hin wenn es sein muß. Und den Stack-Overflow-Link kenne ich auch, 
trotzdem danke.

Eigentlich haben mich Erfahrungsberichte interessiert, ich bin ja sicher 
nicht der Einzige der so etwas braucht. Es hätte ja sein können jemand 
weiß das eine von den Bibliotheken Schrott ist oder jemand kann sie 
empfehlen.

Es macht halt wenig Freude eine neue Bibliothek auszuprobieren, 
vorläufig zufrieden zu sein und die Stolpersteine dann zu entdecken wenn 
man fast fertig ist...

von Frank L. (Firma: Flk Consulting UG) (flk)


Lesenswert?

Hallo,
Vielleicht ist dies, dass was Du suchst

http://www.gnu.org/software/jel/

Gruß
Frank

von Istdochso (Gast)


Lesenswert?

Datenablecker schrieb:
> Das schreibe ich dir an einem Tag. Für jeden Oldschoolinformatiker
> der noch sein Handwerk beherrscht ist das ein Klacks, schon zig mal in
> diversen Sprachen umgesetzt.
>
> Mach besser Parkplatzwächter, dann wirste nicht überfordert.


Der Parkplatzwächter wird wohl eher derjenige sein, der sich unter Wert 
verkauft. Damit scheinst du wohl bereits Erfahrungen gemacht zu haben.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Wühlhase schrieb:
> Ich hab ein paar Bibliotheken gefunden (JEL und GNU Expression Library)
> und wollte mal fragen, ob die jemand kennt und etwas zu deren
> Brauchbarkeit sagen kann. Hat jemand schon einmal damit gearbeitet und
> kann was zu deren Tauglichkeit sagen? Oder hat sogar eine andere
> Empfehlung?

Die JEL ist ganz sicher für irgendjemanden tauglich, sonst wäre sie
nicht über Jahre hinweg weiterentwickelt worden. Die Frage ist, ob sie
für dich tauglich ist. Das kannst aber nur du selber herausfinden.

Ist es ein Problem, die Bibliothek einfach mal runterzuladen und
auszuprobieren? Es handelt sich dabei ja nicht um ein Monsterwerkzeug,
in das man sich erst stunden-, tage- oder gar monatelang einarbeiten
müsste.

Da deine Anforderungsliste im Vergleich zur Featureliste der JEL extrem
kurz ist, kann ich mir nicht vorstellen, dass du bei der JEL irgendetwas
vermisssen wirst.

von Mark (Gast)


Lesenswert?

Wühlhase schrieb:
> Danke...aber ich denke, einen Parser krieg ich womöglich auch selber
> noch hin wenn es sein muß. Und den Stack-Overflow-Link kenne ich auch,
> trotzdem danke.
>
> Eigentlich haben mich Erfahrungsberichte interessiert, ich bin ja sicher
> nicht der Einzige der so etwas braucht. Es hätte ja sein können jemand
> weiß das eine von den Bibliotheken Schrott ist oder jemand kann sie
> empfehlen.

Meine Erfahrung:

Ja, die Lehrbücher haben recht, es funktioniert wie in ihnen 
beschrieben. Sogar ganz ohne Wunderbibliotheken. Es geht, ohne Witz, 
lehrbuchmäßig.

Grammatik, primitiver Tokenizer, einfacher Parser, in einen Baum parsen, 
Baum evaluieren. Wer lustig drauf ist evaluiert gleich beim Parsen und 
schenkt sich den Baum.

Als kleiner Hinweis, das funktioniert auf 8-Bit Prozessoren in unter 
zwei bis vier Kilobyte Assembler Code. Weil es eben kein Hexenwerk ist 
um dass man einen Aufriss machen mus. In den paar Kilobyte hat man dann 
noch einen ganzen Basic-Interpreter mit dabei. Was unabhängig von der 
Programmiersprache und dem Prozessor gar nicht so schlecht ist.

Nur mit dem Berechnen von Funktionen kommt man meist nicht weit. Eine 
einfache Sprache drumherum, neumodisch Scriptsprache, lohnt sich. Bei 
Java bietet es sich dann an die Sprache mittels Scripting-API 
einzubinden 
https://docs.oracle.com/javase/8/docs/technotes/guides/scripting/prog_guide/api.html

von Dr. Sommer (Gast)


Lesenswert?

Mark schrieb:
> Grammatik, primitiver Tokenizer, einfacher Parser, in einen Baum parsen,
> Baum evaluieren. Wer lustig drauf ist evaluiert gleich beim Parsen und
> schenkt sich den Baum.

Bei FH-informatik-Studiengängen kommt das nur extrem rudimentär dran, 
sodass nicht jeder Informatiker das im Handumdrehen schafft...

von georg (Gast)


Lesenswert?

Dr. Sommer schrieb:
> Bei FH-informatik-Studiengängen kommt das nur extrem rudimentär dran

Der Anteil an Studenten, die später einen Compiler schreiben 
sollen/wollen, ist ja auch eher überschaubar. Das war in der 
IT-Steinzeit noch anders, da musste man sich öfter mal Werkzeuge selbst 
schnitzen. Deshalb gab es da sowas wie Compiler-Compiler. Die gibts 
sicher immer noch, es interessiert bloss niemand mehr.

Georg

von Wühlhase (Gast)


Lesenswert?

Danke für die Vorschläge (an die, die welche gemacht haben)-der mXparser 
gefällt mir ganz gut.

Und nun das nächste...der Autor von mXparser hat das als Maven-Projekt 
bei Github online gestellt, so weit, so gut.
Nun bekomme ich beim Bauen immer nur eine Fehlermeldung (siehe Log). 
Soweit ich dem Fehler entnehmen kann, findet er keine Quelldateien. 
Quelldateien sind aber definitiv vorhanden 
(...\MathParser.org-mXparser-master\CURRENT\java\src\org\mariuszgromada\ 
math\mxparser),  und ich finde nichts was mir da weiterhilft. Kann mir 
irgendwer kurz erklären was da schief läuft oder hat jemand ein 
Stichwort dazu?

Github: https://github.com/mariuszgromada/MathParser.org-mXparser

von Wühlhase (Gast)


Angehängte Dateien:

Lesenswert?

Und hier noch das, was Maven mir ausspuckt...

von Datenablecker (Gast)


Lesenswert?

Gibts schon vorkompiliert:
http://mathparser.org/mxparser-downloads/

Verschiedene vorkompilierte Versionen in einem Zip:

MathParser.org-mXparser-v.4.1.1-bin-only :
jdk.1.5
jdk.1.6
jdk.1.7
jdk.1.8
monoandroid10
monoandroid60
monotouch10
net20
net30
net35-client
net40-client
net45
net451
net452
net46
net461
net462
net47
netcoreapp10
netcoreapp11
netstandard10
netstandard16
portable45-net45+win8+wpa81
README.txt
xamarinios10

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.