Boost.Spirit, In zwei verschiende Vektoren parsen



  • Hallo Leute,

    ich habe folgendes Format (Verilog), welches stark variieren kann. Alles was mit "Q" anfaengt ist ein Ausgang, alles andere ein Eingang:

    .IN1(G12),.IN2(FG4),.SF(G5),.Q(G5),.QN(G34)
    

    Im Moment speichere ich Ausgaenge und Eingaenge gemeinsam in einem Vektor, ich wuerde sie aber gerne in getrennten Vektoren speichern speichern. Leider kann die Reihenfolge der Element stark variieren, sie koennen theoretisch ueberall stehen:
    z.B.

    .Q(G5),.IN1(G12),.IN2(FG4),.SF(G5),.QN(G34)
    

    oder auch:

    .Q(G5),.IN1(G12),.QN(G34),.IN2(FG4),.SF(G5)
    

    Also alles ist moeglich.

    Im Moment sehen meine Boost.Spirit rules so aus:

    input_pair %=  qi::lit(".") >> identifier >> qi::lit("(") >> identifier >> qi::lit(")");
    gate_input_config  %=  qi::lit("(") >> input_pair % ',' >> qi::lit(")"); 
    
    qi::rule<Iterator, std::pair<std::string,std::string>(),Skipper>input_pair;
    qi::rule<Iterator, std::vector<std::pair<std::string,std::string> >,Skipper>gate_input_config;
    

    Wie kann man nun Eingaenge und Ausgaenge in gerennten Vektoren speichern. Am liebsten haette ich spaeter ein Objekt welches so aussieht:

    struct io_conf
    {
      std::vector<std::pair<std::string,std::string> > eingaenge;
      std::vector<std::pair<std::string,std::string> > ausgaenge;
    };
    

    Wie kann ich die Ein- und Ausgange in unterschiedlichen Vektoren speichern? Ausgange fangen immer mit Q an. Ist das mit Boost.Spirit moeglich?

    mfg


Log in to reply