symbolische Berechnung

9

Kennt jemand einen guten Ansatz / Bibliotheken für algebraische Berechnungen in C ++?

Ich habe eine Anwendung in C ++ entwickelt, die algebraische Berechnungen durchführen muss. Für den Augenblick habe ich einen C ++ Parser gebaut, der Ausdrücke in Form von Strings wie "5 + (2 - MYFUNC (3))" akzeptiert, die in Strukturen zerlegt und dann mit dem Shunting Yard Algorithmus in Postfix Notation konvertiert und ausgewertet werden.

Das MYFUNC in diesen Ausdruck sind meine eigenen definierten Funktionen, die einige komplexe Berechnungen ausführen können.

Dies ist eine Hochleistungsanwendung, die Ausdrücke haben auch Variablen, die dynamisch durch Werte ersetzt werden und der Ausdruck wird neu bewertet.

z.B. var1 + (2 - MYFUNC (var2)) - & gt; mit var1 und var2 durch einige Werte im Laufe des Laufes ersetzt und neu ausgewertet

Ich benutze Linux und habe bisher Giac-Bibliothek gefunden, bin mir aber nicht sicher, ob es gut ist Feedback wäre willkommen.

Wie gehen die Menschen im Allgemeinen mit diesem Problem um? Die Hauptsprache ist in diesem Fall C ++.

    
Maksim Kneller 28.12.2010, 03:38
quelle

3 Antworten

2

Sehen Sie sich Bison und Flex Parser an. Die Grundidee ist, dass eine Grammatikdatei geschrieben und in C-Code konvertiert wird, der in Ihre Anwendung integriert werden kann. Jedes Buch über Flex und Bison (http://www.amazon.com/Flex-Bison-Text-Processing-Tools/dp/0596155972) ist gut genug für das erste Lesen.

Vielleicht hilft Ihnen das.!

    
kumar_m_kiran 28.12.2010, 04:22
quelle
1

Der schnellste Weg, dies zu bewerkstelligen, besteht darin, eine kompilierte, optimierte Funktion zur Laufzeit für die definierte Funktion zu generieren und sie für die verschiedenen Variablenwerte auszuwerten, die Sie möglicherweise haben. Sie können dies mit LLVM tun, wahrscheinlich mit anderen Tools.

    
ergosys 28.12.2010 04:41
quelle
0

Ich würde einen rekursiven Descent-Parser für die Sprache schreiben, weil die Syntax nicht sehr komplex aussieht. Das Parsing ist vielleicht etwas langsamer als das von Flex / Bison, aber ich vermute, dass das Parsen in Ihrem Projekt am wenigsten rechenintensiv ist.

    
Jörgen Sigvardsson 28.12.2010 08:40
quelle

Tags und Links