3 Stimmen

Flex meldet "fataler interner Scanner-Fehler - Ende des Puffers verpasst".

Ich versuche, Flex gegen einen Puffer einzusetzen, der immer wieder aufgefüllt wird.

Ich habe mehrere Threads, die mit ihren eigenen unabhängigen Kopien des Puffers arbeiten.

In psuedo sieht es in meinem Hauptprogramm etwa so aus:

while(forever)
{
-fill buffer buf-
buf[length+1] = '\0';
buf[length+2] = '\0';
yy_scan_bytes(&buf, length+2);
yylex();
}

wo mehrere Threads diese Schleife ausführen und alle ihre Kopie von buf besitzen.

Ich habe eine Regel in meiner Lex-Datei, die wie folgt aussieht:

<<EOF>> {yyterminate(); yy_delete_buffer(YY_CURRENT_BUFFER);}

in dem Versuch, nach dem Durchlauf des Puffers aufzuräumen.

Ich bin mir nicht sicher, ob ich das richtig mache, da dies mein erster Versuch ist, einen Flex-Scanner in Verbindung mit einem anderen Programm zu verwenden. Wäre es besser, wenn ich die gesamte Pufferverarbeitung innerhalb von Flex durchführen würde und sie mit einer externen Erklärung in meinem Hauptprogramm verknüpfen würde?

Danke

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X