Interpreter fuer mathematische Formeln



  • Folgende Aufgabe:

    Ich bin gerade dabei einen Interpreter zum errechnen einer mathematischen Formel zu schreiben.
    Er soll folgende Ausdruecke berechnen koennen

    zb:

    (3.4 + 5 * 2 / (3-2))
    (((1 + (4 * 2)) ^ 2) / 4)
    spaeter dann auch noch ((3.12 + sin(4 * 2)) / sqrt(cos(45) - 1))
    

    die operationen +,-,*,/,^ sollen unterstuetzt werden
    weiters soll er auch erweiterbar sein zb (spaeter sollen sin, cos, sqrt, ln) problemlos hinzugefuegt werden koennen

    ich ueberlege grad wie ich diesen Interpreter entwerfe und wie ich die Formel selbst parse

    das Parsen der Formel macht mir die groeßten Schwierigkeiten, bisjetzt verfolge ich 2 Moeglichkeiten, entweder eine baumartige Struktur aufzubauen oder 2 stacks zu verwenden (einen fuer die werte und einen fuer die operationen)..

    ich waere ueber ein paar Vorschlaege von eurer Seite sehr gluecklich 🙂



  • Ich hab' (nicht direkt für mathematische Funktionen, aber für ähnliche Projekte), recht gute Erfahrung mit Spirit (http://spirit.sourceforge.net/) gemacht.



  • ich denke ein parse tree wäre wohl das beste, befrage mal google danach ob dir diese zusagt



  • auf codeproject gibt sogar einen grafischen Formeleditor... mmmh ... vielleicht hilft der dir auch weiter



  • habe auch vor einiger Zeit einen solchen Interpreter für die Auswertung von logischen Ausdrücken und auch von elektrischen Schaltplänen erstellt und dabei zwei stacks benutzt. Hat super funktioniert und war schön einfach. Aber irgendwie finde ich persönlich die Lösung mithilfe einer Baumstruktur eleganter, oder sagen wir mal eindrucksvoller *zitter* ;-))


Anmelden zum Antworten