Witam
Napisałem kalkulator wielofunkcyjny z użyciem flex i bison jako aplikacje konsolowa i wszystko śmiga jak należy. Następnie chciałem z tego zrobić aplikacje okienkową napisaną w Borland C++ Builder 6.
W lexerze przekierowałem wejście
#undef YY_INPUT
#define YY_INPUT(buf,result,max_size) \
(result = Form1->RedirectYYInput(buf,max_size))
gdzie RedirectYYInput wygląda nastepująco:
int rozm = strm.str().length(); //strm -> stringstream
if(rozm==0)
{
ZeroMemory(buf, max_size);
return 0;
}
else
{
ZeroMemory(buf, max_size);
int n = max_size < rozm+2 ? max_size : rozm+2;
memcpy(buf,strm.str().c_str(),rozm);
buf[n-2]='\n';
buf[n-1]=0;
Memo1->Lines->Add(buf);
strm.clear();
return n-1;
}
Teraz po wywołaniu yyparse() dostaje dobre wyniki tylko program wpada w petle i w nieskonczonosc wypisuje wynik, a ja tracę nad nim jakakolwiek kontrole:(
Czy ktokolwiek wie jak sprawić aby wynik wypisywany był tylko raz, ew. powie mi czy zrobiłem gdzieś błąd który powoduje wpadniecie w pętle.