Лекс: принудительное сканирование?

Я пишу довольно простую программу с LEX, которая после анализа нескольких файлов анализирует ввод пользователя.

Теперь с файлами все работает как часы. Однако когда дело доходит до пользовательского ввода со стандартного ввода, правила LEX не будут выполняться, пока не будет отправлен символ EOF (через Ctrl+D). Когда я это делаю, LEX анализирует все, что я написал, а затем ожидает ввода данных. Второй последовательный EOF завершает работу сканера.

Дело в том, что я хочу, чтобы программа реагировала на \n, выводя какие-то данные. Есть ли способ заставить сканирование изнутри правила или как-то настроить буферизацию LEX, чтобы соответствовать этому поведению?


person slezica    schedule 06.05.2011    source источник


Ответы (2)


Решено! Это помогло:

%option always-interactive

Я оставляю это здесь для дальнейшего использования, на случай... ну, кто знает.

person slezica    schedule 06.05.2011
comment
Подумайте о том, чтобы принять ваш ответ, чтобы он отображался как принятый ответ. - person QuantumMechanic; 07.05.2011
comment
@QuantumMechanic Мне нужно подождать 2 дня, чтобы сделать это :) Осталось 23 часа - person slezica; 08.05.2011

Вот фрагмент из оболочки unix, которую я сделал с помощью lex и yacc. Я думаю, это поможет.

"\n"                    |
";"                     {
                        //yylval.sb = getsb(yytext);  for yacc stuff
                        fprintf(stderr,"EOL\n");
                        return(EOL);
                        }
person richmb    schedule 06.05.2011
comment
Точка с запятой предназначалась только для выполнения нескольких команд в одной строке внутри оболочки. - person richmb; 07.05.2011