LEX问题可能yyterminate不确定帮助!

时间:2011-03-09 19:18:16

标签: c linux yacc lex

我的lex解析器有问题。当我发现错误时使用yyterminate退出时,它会显示错误,因为你可以看到最底层。但是当我进入一个新的URI时,它仍然认为代码中存在错误。似乎stdin没有被清除,因为它不断得到相同的错误。显然有代码搞乱,在这里发布的方式很多,但这是我认为问题是主要或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/

这是stdout的输出。我想输入一个uri解析它发送它。当我得到一个错误,我想报告错误,并再次使用新的URI,一旦它得到一个错误,它仍然保持错误,即使我在i中键入正确的URI仍然得到错误。希望这一切都有意义。并将不胜感激任何帮助。欢呼

1 个答案:

答案 0 :(得分:2)

我已经设法克服了这个问题,我没有重置缓冲区所以ij使用yyrestart(stdin)这停止了填充屏幕同样的错误,并让它识别一个新的uri我需要重置状态所以现在一切正常。谢谢你的帮助。