Theres немного кода C что-то вроде:
int doCommand(char* command)
{
// +2 on strlen is for the two extra '\0' characters
// needed by flex when scanning strings.
YY_BUFFER_STATE yybs = yy_scan_buffer(command, strlen(command)+2);
yy_switch_to_buffer(yybs);
yyparse();
yy_delete_buffer(yybs);
}
Он вызывается в цикле примерно так (psuedocode):
read characters upto and including '\n' into a buffer;
add two '\0' characters;
call doCommand(buffer);
zero the buffer; // NOTE: same buffer will be used next loop.
Что не так, так это то, что после успешной обработки первой команды все остальные введенные команды не обрабатываются.
Я распечатал yylineno (который увеличивается, когда гибкий сканер видит '\ n'), и увеличивается только один раз после первой команды.
Я не могу разобраться, если я что-то не так делаю с flex, или это yyparse , который перестает вызывать сканер после первого запуска.
Я был бы очень рад, если бы кто-то мог точно указать, что происходит.