Flex include Problem



  • Ich habe einen Flex-Scanner gebastelt und möchte ihn nun einen String scannen lassen.
    Dafür gibt es yy_scan_string(char *).

    Mein Problem ist, dass yy_scan_string erstmal ein unbekanntes Symbol ist, weil es nur in der lex.yy.c steht.
    Den Prototyp per yy_buffer_state *yy_scan_string(const char*); zu deklarieren geht schief weil er nicht weiß was yy_buffer_state sein soll. Es ist eine Struktur aus den Innereien von Flex mit einem Haufen Kram drin was mich alles garnicht interessiert. Ich werte den Rückgabewert nichtmal aus. Der Buffer kann einfach später mit yy_delete_buffer(YY_CURRENT_BUFFER); gelöscht werden.

    Gibt es eine geschickte Methode an yy_scan_string ranzukommen ohne die Flexstruktur die ich nicht brauche in meinen Header zu kopieren?

    Edit: Kopieren der Struktur funktioniert natürlich auch nicht, dann ist die Struktur ja doppelt definiert -.-



  • Hmm, scheinbar hat keiner eine Ahnung. Dann ich erst recht nicht.

    Kann man das sicher nicht in den Griff bekommen, in dem man mit der Reihenfolge der #include's herumtrickst?



  • Möglichkeit 1: Die flex-Datei darf seinen eigenen Header nicht einbinden, dann ist es egal, dass die Struktur doppelt definiert ist.
    Möglichkeit 2: Man definiert die Struktur in der C-Datei und packt die Prototypen ebenfalls in die C-Datei.

    Beides ist hässlich. Ich habe es jetzt nach Möglichkeit 2 gemacht, weil es wichtig ist, dass die C-Datei und die Flex-Datei denselben Header einbinden weil sie dieselben Keywords benutzen müssen und ich die keinesfalls an 2 Stellen definieren will.

    Mir fällt gerade Möglichkeit 3 ein:
    C-Datei und Flex-Datei binden beide die Keyword-Header ein und die C-Datei bindet zusätzlich einen Flex-Header ein den die Flex-Datei nicht einbindet. Ist wahrscheinlich am sinnvollsten.

    Ich bastel gerade einen C-Editor mit Semantikhighlighting. Dasselbe was [cpp][/cpp] hier im Forum tut, nur halt so dass die Variablen auch Farben haben. In einem Monat oder so sollte ich eine Version fertig haben die halbwegs zuverlässig die richtigen Farben trifft, dann werde ich euch mal als Betatester missbrauchen :p


Log in to reply