Ergebnis 1 bis 1 von 1

Thema: Probleme mit Tree-Transformation

  1. #1

    Probleme mit Tree-Transformation

    Normalerweise würde ich versuchen sowas alleine zu lösen, aber ich komm irgendwie auf keine Idee wie es zu lösen ist und mir hängt eine Deadline im Nacken. Heute abend um Mitternacht (genauer gesagt 23:59).

    Folgende Sachlage:
    Ich muss in Java einen Compiler für eine kleine Sprache namens "H3" schreiben, der soweit auch wunderbar funktioniert. Das einzige Problem ist der Verkettungsoperator. Während alle anderen Operatoren links-assiozativ sind, ist die Verkettung (conc) rechtsassiozativ, bzw. so soll sie implementiert werden.
    Der Syntaxbaum, den mir der Parser aber aufbaut ist linksassiozativ, ich muss also nachträglich beim Verkettungsoperator den Baum abändern - und mir fällt irgendwie kein Ansatz mit dem ich das bewerkstelligen kann.

    Im folgenden mal 2 Beispiele die illustrieren wie mein (untransformierter) Baum bei einer bestimmten Eingabe aussieht und wie der Baum aussehen sollte (nach Parsen der Ausgabe der Musterlösung)
    Code:
    Eingabe (++ ist der conc-Operator):
     A ++ B ++ C
    Mein Baum:
    - AConcExpr
    |- AConcExpr
    |  |- AIdExpr
    |  |  `- A
    |  `- AIdExpr
    |     `- B
    `- AIdExpr
           `- C
    Korrekter Baum:
    `- AConcExpr
       |- AIdExpr
       |  `- A
       `- AConcExpr
          |- AIdExpr
          |  `- B
          `- AIdExpr
             `- C
    Code:
    Eingabe:
    A ++ B ++ C ++ D
    Mein Baum:
    `- AConcExpr
       |- AConcExpr
       |  |- AConcExpr
       |  |  |- AIdExpr
       |  |  |  `- A
       |  |  `- AIdExpr
       |  |     `- B
       |  `- AIdExpr
       |     `- C
       `- AIdExpr
          `- D
    Korrekter Baum:
    `- AConcExpr
       |- AIdExpr
       |  `- A
       `- AConcExpr
          |- AIdExpr
          |  `- B
          `- AConcExpr
             |- AIdExpr
             |  `- C
             `- AIdExpr
                `- D
    Ich habe nur irgendwie keine Idee wie ich die Sache angehe, wenn ich beim Durchlaufen des Baums auf einen conc-Knoten treffe und mindestens eins der beiden Kinder ein weiterer conc-Knoten ist.

    Ich wäre über jegliche Ansatzhilfe dankbar.

    Edit:
    Vielleicht sollte ich noch erwähnen, daß ich zwei Arten von conc-Knoten unterscheiden muss (bzw. das den Parser erledigen lasse). Der Baum würde also erstmal concSymbol-Knoten anstatt der hier gezeigten conc-Knoten beinhalten und müsste in den korrekten Baum mit conc-Knoten umgewandelt werden.

    Geändert von MagicMagor (05.07.2010 um 17:28 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •