Matheparser



  • Ich programmiere zur Zeit selsbt einen Funktionsplotter und mache das wie folgt.
    Ich machs einfach mit ner baumstruktur für den Term. Ich trenne den String an einem niederen Operator auf, trage ihn in das aktuelle baumelement ein,und rufe dir funktion selbst wieder auf, zuerst mit dem rechten teil des ausrucks, dann mit dem linken. So wird der Ausdruck nach und nach vollstänfig in den Baum eingetragen, dann reicht eine einfache rekursive Funktion aus, die das ganze dann ausrechnet.



  • Ich habe vor gut einem Jahr einen Parser für mathematische Ausdrücke in Java geschrieben, der so ziemlich alles verarbeiten kann (Klammern, * / - + und ^ sowie Funktionen wie sin,cos, sqrt usw). Ich habe dabei mit 2 Stacks und Infix->Postfix-Transformation gearbeitet. Falls dich interessiert, kann ich den Code ja mal zeigen.



  • Man kann sowas auch gut mit Rekursivem Abstieg lösen. Es lohnt sich, sich damit mal zu beschäftigen, dann muss man nicht an solchen ad-hoc-Lösungen wie oben verzweifeln ... und die Klammern sind a scho drin 😉



  • das grobe prinzip ist ganz einfach, ich glaub du machst alles nur
    unnoetig kopliziert:

    1. werte zahl aus (wandle string in zahl)
    2. werte alle * und / ausdruecke aus
    3. werte alle + und - ausdruecke aus

    das wars schon.
    du laeufst im string einfach von links nach rechts und gehst alle 3 punkte
    durch.
    auf meiner seite findest du auch einen parser: http://cchoernchen.de
    🙂



  • Bashar schrieb:

    Man kann sowas auch gut mit Rekursivem Abstieg lösen. Es lohnt sich, sich damit mal zu beschäftigen, dann muss man nicht an solchen ad-hoc-Lösungen wie oben verzweifeln ... und die Klammern sind a scho drin 😉

    das hab ich mal gemacht und muss sagen, es lässt sich schön programmieren und auch später berechnen. geschwindigkeit nicht die beste aber ok.



  • entelechie schrieb:

    das grobe prinzip ist ganz einfach, ich glaub du machst alles nur
    unnoetig kopliziert:

    1. werte zahl aus (wandle string in zahl)
    2. werte alle * und / ausdruecke aus
    3. werte alle + und - ausdruecke aus

    das wars schon.
    du laeufst im string einfach von links nach rechts und gehst alle 3 punkte
    durch.
    auf meiner seite findest du auch einen parser: http://cchoernchen.de
    🙂

    Tja, ganz so einfach ist es dann doch nicht. Dein Parser potenziert z.B. nicht richtig.



  • hm. warum potentiert er nicht richtig?
    kannst du mir da mal ein beispiel posten?



  • entelechie schrieb:

    hm. warum potentiert er nicht richtig?
    kannst du mir da mal ein beispiel posten?

    Du potenzierst linksassoziativ, das ist falsch. Die Exponentiation ist rechtsassoziativ. Bei dir wird z.B. der Ausdruck 432 so berrechnet (43)2, richtig wäre jedoch: 4(32)



  • hmm. ja, stimmt. da muss ich mal schaun. danke fuer den hinweis 🙂



  • interpreter, könntest du mir den Code von deinem Parser mal schicken? Danke! 🙂



  • Auf meiner HP ist auch ein MatheParser zu finden.. Allerdings ist der noch relativ einfach gehalten.. Kennt also alle 4 Operationszeichen, und auch Potenzen via '^' (aber auch nur eine Potenz / Zahl, also nicht '222' oder so...), aber keine Klammern, etc... Man kann ihn aber auch mit einer Unbekannten 'x' verwenden... Bei Interesse einfach mal ausprobieren. Der Quelltext ist auch online, auch wenn er "dreckig" ist.. 😉
    MfG Aoeke



  • Griffin schrieb:

    interpreter, könntest du mir den Code von deinem Parser mal schicken? Danke! 🙂

    An welche Emailadresse?



  • Griffin007@gmx.net

    (ginge halt auhc über das Email senden übers Profil) 😉



  • Griffin schrieb:

    Griffin007@gmx.net

    (ginge halt auhc über das Email senden übers Profil) 😉

    Mail + Parser is raus 🙂



  • Wenn du es so machen willst, wie man es wirklich macht, besorg dir ein Buch über Compilerbau. Dann sind diese Dinge ganz einfach.


Anmelden zum Antworten