In article <ai483p$kp9$1@eising.k-net.dk>, Jonas Meyer Rasmussen wrote:
> Hejsa.
>
> Jeg sidder og benytter et bibliotek(flex & bison), som tilsyneladende kun
> vil
> tage input fra stdin. Det er fint nok, når jeg skal parse en fil, men
> jeg har af og til brug for at sende blot en enkelt linie til koden genereret
> af flex/bison...
> Den eneste metode jeg kan få det til at fungere, er ved at genåbne stdin med
> freopen,
> igennem en fil, og det virker lidt uoptimalt.
>
> Findes der ikke en alternativ metode til at skrive til stdin, uden at
> genåbne en eller anden
> fil?
Hvis jeg forstår dig ret, ønsker du at kunne få flex til at læse fra en
streng?
Her kommer et eksempel fra bogen "lex & yacc" af Levine, Mason & Brown (jeg
vil anbefale dig at få fat i denne bog; du kan låne den på biblioteket):
%{
%undef YY_INPUT
%define YY_INPUT(b, r, ms) (r = my_yyinput(b, ms))
%}
...
%%
[selve reglerne er fjernet]
%%
...
extern char myinput[];
extern char *myinputptr; /* current position in myinput */
extern int *myinputlim; /* end of data */
int my_yyinput(char *buf, int max_size)
{
int n = min(max_size, myinputlim - myinputptr);
if (n > 0) {
memcpy(buf, myinputptr, n);
myinputptr += n;
}
return n;
}
Ovenstående er indtastet fra bogen (fra et afsnit om flex + læsning fra en
streng). Det skulle give dig noget at arbejde videre med.
Jeg kan ikke afprøve det, da *min* version af lex & yacc er en udgave, som er
omskrevet til Pascal/Delphi. Det giver mig nogle gange problemer ;)
MVH, René
--
Sent using Virtual Access 5.51 - download your freeware copy now
http://www.atlantic-coast.com/downloads/vasetup.exe