Im Container sortieren (klammer auflösen)



  • Hallo allerseits,

    ich hab da ein kleines Problem in C++, wozu ich eure Hilfe benötige.

    Es geht darum, dass ich einen Container (ob Vector oder Linkedlist ist egal) und dieser ist Beispielweise wie folgend gefüllt:

    <X> <&> <!> <(> <X> <&> <(> <!> <X> <|> <X> <)> <|> <X> <&> <(> <!> <X> <|> <X> <)>

    X entspricht einer Menge
    & ist die Schmittmenge
    | ist die Vereinigung
    ! ist der negierer (Gegenteil)

    Diesen Inhalt möchte ich nun ausklammern und die negierung auflösen, so dass der inhalt der ausgeklammerten Klammern zuerst steht.

    Aus <X> <&> <!> <(> <X> <|> <X> <)> würde dann <!><X><|><!><X><&><X> werden.

    Nun weiß ich ehrlich gesagt nicht, wie ich da am besten vorgehen würde. Gibt es dazu eventuell ein Operator höherer Ordnung, der mir diesen Vorgang vereinfacht ?

    Danke im voraus.



  • hero66 schrieb:

    Es geht darum, dass ich einen Container (ob Vector oder Linkedlist ist egal) und dieser ist Beispielweise wie folgend gefüllt:

    <X> <&> <!> <(> <X> <&> <(> <!> <X> <|> <X> <)> <|> <X> <&> <(> <!> <X> <|> <X> <)>

    X entspricht einer Menge
    & ist die Schmittmenge
    | ist die Vereinigung
    ! ist der negierer (Gegenteil)

    Also ich nehme jetzt einfach mal an, der ist mit Zeichen oder Zeichenketten gefüllt?
    Was genau?

    hero66 schrieb:

    Diesen Inhalt möchte ich nun ausklammern und die negierung auflösen, so dass der inhalt der ausgeklammerten Klammern zuerst steht.

    Aus <X> <&> <!> <(> <X> <|> <X> <)> würde dann <!><X><|><!><X><&><X> werden.

    Nun weiß ich ehrlich gesagt nicht, wie ich da am besten vorgehen würde. Gibt es dazu eventuell ein Operator höherer Ordnung, der mir diesen Vorgang vereinfacht ?

    Du musst das ganze Parsen. So einfach ist das gar nicht.

    Aber helfen können wir dir erst besser, wenn du uns sagst, was für Feldelemente der Container überhaupt hat. s. o.



  • X ist eine Struktur mit Koordinaten (oberer rechte und unterer linke Punkt eines Rechtecks (x,y)) dass in der Regel Schwarz, beim negieren weiß ist.

    Mit dem Parser hab ich es mir leider schon gedacht, nur übersteigt dies meine Kenntnisse. Die beiden Tutorials hier im Forum hab ich mir dazu durchgelesen, doch ich könnte es ehrlich gesagt nicht auf mein Problem übertragen. Der Tokenscanner war zwar schnell implementiert, doch beim Parser stehe ich extrem auf dem Schlauch.



  • Und was ist dann <&>?
    Hast du da eine Polymorphie vorliegen, also eine Token-Basisklasse und einige Subklassen derer die dann die logischen Kon-/Disjunktionen, Elemente, Klammern &Co. repräsentieren?



  • Das klingt für mich danach als ob du selber einen Baum implementieren solltest.



  • Unter dem Stichwort "Abstract Syntax Tree" (AST) solltest du weitere Hinweise kriegen...


Anmelden zum Antworten