mikrocontroller.net

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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Wühlhase (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Istdochso (Gast)
Datum:

Bewertung
-6 lesenswert
nicht lesenswert
Das ist doch ein Kinderspiel.

Autor: d.o. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Chinese (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Heiko J. (heiko_j)
Datum:

Bewertung
-1 lesenswert
nicht 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

Autor: Istdochso (Gast)
Datum:

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

Autor: Datenablecker (Gast)
Datum:

Bewertung
-1 lesenswert
nicht 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.

Autor: 50c (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> "kennt wer..."

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

...my 50c

Autor: test (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Wühlhase (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Frank L. (Firma: Flk Consulting UG) (flk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Vielleicht ist dies, dass was Du suchst

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

Gruß
Frank

Autor: Istdochso (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Yalu X. (yalu) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dr. Sommer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Wühlhase (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Wühlhase (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Und hier noch das, was Maven mir ausspuckt...

Autor: Datenablecker (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.