Parser verstehen



  • (*) 
       /   \ 
     (7)   (+) 
          /   \ 
        (2)   (4)
    

    Wenn ich diesen Baum jetzt folge. Kommt der Multiplikator, der Zeiger geht weiter auf Addition. Und weiter auf dir 4 und gleich auf die 2. Das macht 6 und Multipliziert das mit 7.

    Das ist doch falsch? Oder habe ich einen Denkfehler?



  • virtuell Realisticer schrieb:

    Man koennte
    nun z. B. hingehen und ihn in die Postfix-Schreibweise umwandeln:

    2 4 + 7 *

    Nein.

    Ich lese mal Deinen Ausdruck:

    2 -> auf den Stack
    4 -> auf den Stack
    + -> zwei Operanden vom Stack holen, addieren, Ergebnis 6 auf den Stack
    7 -> auf den Stack
    * -> zwei Operanden vom Stack, multiplizieren, Ergebnis 42 auf den Stack

    2+4*7 ist aber als 2 + (4*7) = 30 zu lesen.

    Der korrekte Postfix-Ausdruck lautet:

    2 4 7 * +

    MfG Jester



  • jorg: wenn man die Postfix-Notation richtig aufstellt kommt man mit vRs Weg dann auf den korrekten Baum und dann funktioniert auch alles. 😉



  • Jester schrieb:

    virtuell Realisticer schrieb:

    Man koennte
    nun z. B. hingehen und ihn in die Postfix-Schreibweise umwandeln:

    2 4 + 7 *

    Nein.

    Ich lese mal Deinen Ausdruck:

    2 -> auf den Stack
    4 -> auf den Stack
    + -> zwei Operanden vom Stack holen, addieren, Ergebnis 6 auf den Stack
    7 -> auf den Stack
    * -> zwei Operanden vom Stack, multiplizieren, Ergebnis 42 auf den Stack

    2+4*7 ist aber als 2 + (4*7) = 30 zu lesen.

    Der korrekte Postfix-Ausdruck lautet:

    2 4 7 * +

    MfG Jester

    Du hast meinen Beitrag nicht ganz gelesen, das habe ich naemlich geschrieben 😉

    mfg
    v R



  • Stimmt, ändert aber nichts daran, daß die zitierte Aussage falsch ist. 😉
    Was Du angegeben hast ist nicht die Postfix-Schreibweise des Ausdrucks.



  • Jester schrieb:

    Stimmt, ändert aber nichts daran, daß die zitierte Aussage falsch ist. 😉
    Was Du angegeben hast ist nicht die Postfix-Schreibweise des Ausdrucks.

    Das stimmt auch mal wieder 🙂

    mfg
    v R



  • jorg schrieb:

    Leute kann mir einer in kurzen Sätzen erklären was jetzt genau ein Parser macht um z.B. sowas zu berechnen?

    2 + 4 * 7

    Kommt drauf an, welchen Parseralgorithmus du meinst. Da gibt es einige ...



  • Bashar schrieb:

    jorg schrieb:

    Leute kann mir einer in kurzen Sätzen erklären was jetzt genau ein Parser macht um z.B. sowas zu berechnen?

    2 + 4 * 7

    Kommt drauf an, welchen Parseralgorithmus du meinst. Da gibt es einige ...

    arrrggggg, und da kommst du damit das es mehrere gibt. Ja welche? Gibt es welche die für bestimmte Sachen besser geeignet sind?

    z.B. dieser Parser für Programmiersprache, dieser Parser für Anwendungen ect...



  • Das hängt von der Grammatik ab, also nur indirekt von der Anwendung. Aber ich glaube nicht, dass es Sinn hat, das jetzt auszubreiten. Du solltest mal sagen, was genau du an einem bestimmten Script nicht verstehst.



  • Wenn du Parser wirklich verstehen willst, dann schau dir mal die BNF (Backus-Naur-Form) Notation bzw. die EBNF (extended) an.

    Aus jeder kontextfreien Grammatik (die meisten einfachen Programmiersprachen gehören dazu) läßt sich nämlich ein (E)BNF-Ausdruck erstellen, den man dann 1:1 in Code umsetzen kann.



  • Also erlich gesagt wollte ich schon immer mal eine eigene Scriptsprache programmieren.

    Nun ich habe vor einer Weile damit angefangen. Was ich bis jetzt habe ist ein art Parser der einen String parsen kann.

    So ist z.B. Kein Problem für mich so was zu analysieren: FunktionName(10,2.4)

    Ich kann also die Werte 10 und 2.4 rauslesen.

    Oder ein anderes Beispiel:

    LoadBitmap("bitmap.bmp") Ist auch kein Problem dem Parser beizubringen das bei LoadBitmap er nur einen Text einlesen soll.

    Jetzt will ich aber entlich das er rechnet.

    Danach kommen Varibale ect...

    Es ist ein Hobbyprojekt und ich arbeite immer wenn ich Zeit finde. Doch entweder habe ich zur Zeit keinen klaren Kopf oder das Thema ist zu kombliziert. 😞

    Naja, danke für die Tipps cu.


Anmelden zum Antworten