|
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); } }
[Prev in Thread] | Current Thread | [Next in Thread] |