Spirit datei parsen



  • Hey, ich hab gerade ein Problem. Ich versuch aus einer *.cl (OpenCL) datei die kernel deklaration in form von

    __kernel void rayCastVolume(__read_only image3d_t input, ...) 
    {
    // zeugs halt
    }
    

    mit Boost.spirit zu parsen. Das Funktioniert eigentlich auch super und ich bekomm die parameter der funktion. Leder steht in einem kernel gerne mehr als nur diese zeile. Es kann mehr oder weniger beliebiger text vor und nach dieser zeile stehen. Ich frag mich gerade wie ich jetzt am besten den Anfang vom kernel finde. Einfach als String nach

    __kernel void
    

    suchen klappt nicht weil vorher z.B.

    // __kernel void
    /* __kernel void */
    const char *muh = "__kernel void";
    

    stehen kann, wobei mir da bestimmt noch nicht alle sachen eingefallen sind. Gibts da vielleicht noch generell eine einfache möglichkeit?



  • Am einfachsten wäre wahrscheinlich, zu überprüfen, ob nach "__kernel void" was Sinnvolles (i.e. Funktionsdefinition) kommt. Wenn ja -> gefunden, wenn nein -> weitersuchen. Das dürfte schonmal ziemlich viele Fälle abdecken.

    Dann gäbe es noch sowas wie

    // __kernel
    void ...
    

    , am Besten du filterst also Kommentare vor oder während der Suche komplett raus.

    Spätestens bei

    #define MYKERNEL __kernel
    ...
    MYKERNEL void ...
    

    wirst du aber wohl nicht mehr drumrumkommen, dir teilweise einen C-Parser inkl. Präprozessor zu programmieren.


Anmelden zum Antworten