kostenloser Webspace werbefrei: lima-city


Parser für mathematische Ausdrücke

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    tangoal

    Kostenloser Webspace von tangoal

    tangoal hat kostenlosen Webspace.

    Hallo,

    es gibt doch solche Matheparser, mit denen man mathematische String-Ausdrücke auswerten kann. Zum Beispiel um Rechenoperationen mit Zahlen durchzuführen oder Funktionswerte zu errechnen.

    Kennt ihr einen guten Parser, den man mit C++ verwenden kann? Wichtig wäre es mir, dass es den Quellcode bzw. die Bibliothek möglichst günstig oder frei erhältlich gibt.
    Wünschenswert, aber nicht unbedingt notwendig, wäre es, wenn man auch kommerziell damit arbeiten könnte (also z.B. lizensiert über LGPL).

    Cool wären Zusatzfunktionalitäten wie das Umstellen von Gleichungen oder das plotten von Funktionsgraphen... (nicht unbedingt notwendig).

    Wichtig wäre mir, dass möglichst nur Vorschläge angebracht werden, mit denen man persönlich Erfahrungen gemacht hat. In dem Falle wäre eine Bewertung der Handhabung, Performance, Funktionalität, Qualität der Dokumentation usw. ganz nett. (möchte jetzt nicht unbedingt selber 100 Parser testen, bevor ich einen guten gefunden habe^^)

    Wenn mir jemand mit irgendeinem Google-Suchergebnis ankommt, dann bin ich echt enttäuscht...^^ Das kann ich ja gerade noch selber...:biggrin:

    Viele Grüße
    tangoal

    Edit: Achso, als Beispiel: so was in der Art wie muParserX

    Beitrag zuletzt geändert: 27.11.2010 11:56:58 von tangoal
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. tangoal schrieb:
    Hallo,

    es gibt doch solche Matheparser, mit denen man mathematische String-Ausdrücke auswerten kann. Zum Beispiel um Rechenoperationen mit Zahlen durchzuführen oder Funktionswerte zu errechnen.

    Wenn es wirklich nur um die Auswertung von Ausdrücken geht (und nicht um Formelumformerrei), dann wäre es denkbar Lua in C++ einzubetten und die entsprechenden Lua-Ausdrücke (die im Mathematischen Sinne intuitiv sind) direkt auszuwerten.

    Siehe Die C API von Lua für technische Hintergründe.


    Edit: Achso, als Beispiel: so was in der Art wie muParserX

    Da wäre Lua wahrscheinlich schon eine gute Wahl, um sowas umzusetzen.
  4. Zum plotten von Funktionsgraphen kann man dann eine Anwendung wie bspw. gnuplot verwenden.

    Ich habe bspw. die Ergebnisse einer Ladezeitaufzeichnung durch ein Python Script damit visualisiert, indem ich vom Script ein Template mit den Diagrameinstellungen und den Beschriftungen usw. erstellen lasse und dann Gnuplot auf das Logfile des Scripts unter Beachtung des Templates loslasse...sieht dann so aus:

    http://fatfox.lima-city.de/pics/url_check_02.png
  5. Autor dieses Themas

    tangoal

    Kostenloser Webspace von tangoal

    tangoal hat kostenlosen Webspace.

    bladehunter schrieb: Wenn es wirklich nur um die Auswertung von Ausdrücken geht (und nicht um Formelumformerrei), dann wäre es denkbar Lua in C++ einzubetten und die entsprechenden Lua-Ausdrücke (die im Mathematischen Sinne intuitiv sind) direkt auszuwerten.

    Siehe Die C API von Lua für technische Hintergründe.


    Ok, Lua kann in C++ eingebettet werden, also von dort aus aufgerufen werden. Über diesen virtuellen Stack können Daten in beide Richtungen ausgetauscht werden. Heißt, ich übergeb einen Mathe-String und evtl. noch einige andere Variablenwerte an ein Lua-Skript und dieses gibt dann das Ergebnis zurück?
    Aber was meinst du mit "Lua-Ausdrücke"? Meinst du damit sowas wie einen Ausdruck Math.sin(x)?

    fatfox schrieb: Zum plotten von Funktionsgraphen kann man dann eine Anwendung wie bspw. gnuplot verwenden.

    Ich habe bspw. die Ergebnisse einer Ladezeitaufzeichnung durch ein Python Script damit visualisiert, indem ich vom Script ein Template mit den Diagrameinstellungen und den Beschriftungen usw. erstellen lasse und dann Gnuplot auf das Logfile des Scripts unter Beachtung des Templates loslasse...sieht dann so aus:

    http://fatfox.lima-city.de/pics/url_check_02.png
    Gnuplot kenn ich, habe es bisher nur noch nicht verwendet... könnte schon eine nützliche Sache sein...
  6. tangoal schrieb:
    Ok, Lua kann in C++ eingebettet werden, also von dort aus aufgerufen werden. Über diesen virtuellen Stack können Daten in beide Richtungen ausgetauscht werden. Heißt, ich übergeb einen Mathe-String und evtl. noch einige andere Variablenwerte an ein Lua-Skript und dieses gibt dann das Ergebnis zurück?

    Genau


    Aber was meinst du mit "Lua-Ausdrücke"? Meinst du damit sowas wie einen Ausdruck Math.sin(x)?

    Einmal das, und natürlich auch Ausdrücke wie "a+4*7".
  7. Autor dieses Themas

    tangoal

    Kostenloser Webspace von tangoal

    tangoal hat kostenlosen Webspace.

    bladehunter schrieb:

    Aber was meinst du mit "Lua-Ausdrücke"? Meinst du damit sowas wie einen Ausdruck Math.sin(x)?

    Einmal das, und natürlich auch Ausdrücke wie "a+4*7".
    Ok, die Grundoperationen sind klar. Aber hm, das heißt immer wenn ich eine Funktion nutze wie den Sinus, muss ich dieses "Math" davor schreiben. Dann müsste ich ja selber schon einen Interpretationsaufwand betreiben, um aus dem String sin(x) den String Math.sin(x) zu machen. Das finde ich nicht so gut...
    Trotzdem ist Lua schon eine interessante Sache, muss ich mir mal genauer anschauen. Wenn sogar Teile von Spielen damit programmiert werden...
  8. Du könntest dir ja mit Flex (http://flex.sourceforge.net/) eine eigene "Sprache" schreiben.
    Der sollte dir schon den größten Teil der arbeit abnehmen und mit regulären Ausdrücken solltest du ja arbeiten können.
  9. tangoal schrieb:
    Das heißt immer wenn ich eine Funktion nutze wie den Sinus, muss ich dieses "Math" davor schreiben. Dann müsste ich ja selber schon einen Interpretationsaufwand betreiben, um aus dem String sin(x) den String Math.sin(x) zu machen. Das finde ich nicht so gut...

    Dan führst du eben am Anfang folgendes Script aus:
    for k,_ in pairs( math ) do _G[ k ] = math[ k ] end

    Und dann sind alle mathematischen Funktionen im globalem Namensraum.
  10. Autor dieses Themas

    tangoal

    Kostenloser Webspace von tangoal

    tangoal hat kostenlosen Webspace.

    bladehunter schrieb:
    tangoal schrieb:
    Das heißt immer wenn ich eine Funktion nutze wie den Sinus, muss ich dieses "Math" davor schreiben. Dann müsste ich ja selber schon einen Interpretationsaufwand betreiben, um aus dem String sin(x) den String Math.sin(x) zu machen. Das finde ich nicht so gut...

    Dan führst du eben am Anfang folgendes Script aus:
    for k,_ in pairs( math ) do _G[ k ] = math[ k ] end

    Und dann sind alle mathematischen Funktionen im globalem Namensraum.
    Aha, ok, hätt ich mir eigentlich denken können, dass es so etwas in Lua gibt... :biggrin: danke bladehunter
  11. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!