help-flex
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: $x value lost?


From: Bruce Lilly
Subject: Re: $x value lost?
Date: Mon, 10 Mar 2003 16:22:24 -0500
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Gecko/20021130

Mhaxx wrote:
Why does parser loose values?

EXAMPLE:

My scanner:
...
{kw_program}    { free(yylval.string); yylval.string = strdup(yytext);
return PROGRAM; }
{kw_return}    { free(yylval.string); yylval.string = strdup(yytext); return
RETURN; }
{kw_end}    { free(yylval.string); yylval.string = strdup(yytext); return
END; }

My parser:
start: PROGRAM RETURN END;    { printf($1); printf($2); printf($3); }

If the input is "program Return end" then the output is "endend"!!! Why?!?

I think $1 and $2 were lost during the process... there's something I can't
understand...

First, you wiped out the values with free() in the lexical analyzer.
Second, beware using printf like that -- if your input is %s %d %x
you'll have Big Problems.  Try:

{kw_program} { yylval.string = strdup(yytext); return PROGRAM; }
{kw_return}  { yylval.string = strdup(yytext); return RETURN; }
{kw_end}     { yylval.string = strdup(yytext); return END; }

start: PROGRAM RETURN END;    {
    if ($1) { puts($1); free($1); }
    if ($2) { puts($2); free($2); }
    if ($3) { puts($3); free($3); }
}





reply via email to

[Prev in Thread] Current Thread [Next in Thread]