Jürgen K.: ^ in pow() umwandeln

Hallo zusammen,

ich brauche eine Funktion, die es mit PHP möglich macht, ^ als Potenz zu erkennen. Es soll also z.B. der String "2^3" umgewandelt werden in "pow(2,3)". Das wäre jetzt an sich nicht so furchtbar schwierig, aber es soll z.B. auch "2*(1+x)^(x-1)" in "2*pow((1+x),(x-1))" umgewandelt werden. Es müsste also auch in komplizierteren Formeln ^ korrekt als Potenz ausgeführt werden, selbst bei verschachtelten Potenzen. Und daran probiere ich mich jetzt seit ein paar Stunden mit wachsender Verzweiflung. Hat vielleicht jemand ein Skript, welches so etwas kann?

Vielen Dank,
Jürgen

  1. Hallo,
    sollte nicht so schwer sein:

    Du schaust an, wo im String ein ^ vorkommt (welche Pos.) und läufst dann einmal nach links und einmal nach rechts, bis Zeichen kommen die nicht mehr zur Basis/Exponenten gehören.

    D.h. bei
    2+x^2*3x würdest du nach links bis + und nach rechts bis * laufen.

    Wenn das erste Zeichen links/rechts eine Klammer ist, musst du soweit laufen bis _diese_ Klammern wieder geschlossen ist.

    MFG

  2. gudn tach!

    Es müsste also auch in komplizierteren Formeln ^ korrekt als Potenz ausgeführt werden, selbst bei verschachtelten Potenzen.

    dass das nicht so einfach ist, hast du ja bereits selbst festgestellt. je nach syntax, die du zulaesst, waere es wohl am besten, einen fertigen parser zu verwenden. fuer perl gibt's sowas (siehe hier). vielleicht gibt's sowas auch fuer php.

    falls nicht und du auch nicht auf perl umschwenken kannst, musst du dir wohl oder uebel selbst einen kleinen parser schreiben. je nach formelsyntax wird das leicht oder schwierig. sowas schon mal gemacht? weisst du grob damit oder damit was anzufangen, oder sind das alles boehmische doerfer?
    wenn du deine zulaessige syntax als bnf vorliegen haettest, waere das programmieren gar nicht mehr so schwer.

    prost
    seth

    1. falls nicht und du auch nicht auf perl umschwenken kannst, musst du dir wohl oder uebel selbst einen kleinen parser schreiben. je nach formelsyntax wird das leicht oder schwierig. sowas schon mal gemacht? weisst du grob damit oder damit was anzufangen, oder sind das alles boehmische doerfer?
      wenn du deine zulaessige syntax als bnf vorliegen haettest, waere das programmieren gar nicht mehr so schwer.

      Leider kann ich kein Perl. Tja, den Parser zu schreiben, da würde ich einfach gerne drum herum kommen, in dem ich hoffe, dass es da schon ein fertiges und frei verfügbares Skript gibt. Die netten Begriffe hab ich schon mal entfernt gehört, aber das wars dann auch schon. Ich hoffe immer noch, dass das schonmal jemand vor mir gemacht hat und sein Wissen mit der Welt teilen möchte :) ansonsten muss ich mein Glück weiter selbst versuchen.

      1. Leider kann ich kein Perl.

        logo,
        PHP heisst ja nicht umsonst "Peoples Hate Perl" ...

        Aber in PHP jibbet sowas doch auch, schau einfach mal rein ...

        Gruss Norbert

        1. gudn tach!

          PHP heisst ja nicht umsonst "Peoples Hate Perl" ...

          aha, vielleicht eher s/Hate Perl/Hype Plural/

          scnr.

          prost
          seth

          1. PHP heisst ja nicht umsonst "Peoples Hate Perl" ...

            das ist uralter Jokes, fast schon klassisch.
            Darueber muss man sich nicht extra aufziegeln ... ;-)

            Gruss Norbert

        2. Danke schön, ich schau mal, ob ich damit klar komme.