flex, bison i GUI

0

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.

0

Czy tekst do sparsowania pobierasz z tej samej kontrolki do ktorej wypisujesz wyniki? Jesli tak, to tutaj lezy fail, gdyz po wypisaniu wynikow, tekst w kontrolce sie zmienia i program sadzi ze uzytkownik znowu cos wpisal.. musisz sie przed tym zabezpieczyc jakas flaga, albo rozdzielic kontorlke wejscia od wyjscia

0

wejscie jest pobierane z TEdit a wyniki wypisywane w TMemo (przekierowany cout za pomoca wlasnego stringbuf)

1 użytkowników online, w tym zalogowanych: 0, gości: 1