Возможны проблемы LEX yyterminate не уверен, помощь! - PullRequest
1 голос
/ 09 марта 2011

Привет, у меня проблемы с моим анализатором lex. Когда я использую yyterminate для выхода, когда я обнаружил ошибку, он будет отображать ошибку в порядке, как вы можете видеть в самом низу. Но когда я иду, чтобы войти в новый URI, он все еще думает, что есть ошибка в коде. Похоже, что STDIN не был очищен, поскольку он продолжает получать ту же ошибку. Очевидно, что здесь есть путаница в коде, способ много писать здесь, но я думаю, что здесь проблема с main или yyterminate. любая помощь будет оценена.

main (int argc, char * argv []) {

char temp[10];
int q; 
while(1)
{
YY_FLUSH_BUFFER;
yyrestart(stdin);
printf("\nPlease enter your URI: ");
        yyin = stdin;

q= yylex();

if(errorFlag !=1)
{
 if(validScheme==1)
 R.protocol = "HTCPCP/1.0";

  R.content = "message/coffee-pot";
  if((helpFlag==1)||(helpFlag==2))
  {
   propfind();
   theServer();
   } 
 }
}
}
 ........

вот главное, где я должен иметь возможность циклически запрашивать URI, а затем переходить к функциям, а затем возвращаться, чтобы запросить другой URI, это прекрасно работает, пока нет ошибок. ........

<sep_state>.       {printf("error in sep state");errorFlag=1; yyterminate(); }
<pot_value>[^0-2]  { printf("Pot Value error"); errorFlag=1; yyterminate(); }
<pot_state>.       { printf("pot state error");errorFlag=1; yyterminate();}
<sep_state>.        { printf("couldnt recognise host");errorFlag=1; yyterminate();}

это где я делаю некоторые проверки ошибок. если ни одно из значений не было сопоставлено, я хочу, чтобы это привело к ошибке, следовательно, это соответствует всем входным данным (я думаю) .......

Please enter your URI: coffee://128.0.111.11111/pot-0?

Host not recognised. Use 127.0.0.1/

Please enter your URI: coffee://127.0.0.1/pot-0? 
Host not recognised. Use 127.0.0.1/

это вывод на стандартный вывод. Я хочу ввести URI-анализ, отправьте его. когда я получаю сообщение об ошибке, я хочу сообщить об ошибке и начать все заново с новым URI, но как только он получает ошибку, он удерживает ошибку, даже когда я набираю правильный URI, но я все еще получаю ошибку. Надеюсь, что все это имеет смысл. и был бы признателен за любую помощь.

1 Ответ

2 голосов
/ 10 марта 2011

Мне удалось преодолеть проблему, я не сбрасывал буфер, поэтому ij использовал yyrestart (stdin), это остановило его, заполняя экран с той же ошибкой, и чтобы заставить его распознавать новый uri, мне нужно было сбросить состояние так что теперь все работает. Спасибо за помощь.

...