[prog] Yacc - terminating problem
Sue Stones
suzo at spin.net.au
Tue Feb 10 23:44:24 EST 2004
On Tue, 10 Feb 2004 08:03 pm, Sue Stones wrote:
> My Yacc program keeps on trying to process things after it gets an end of
> file. It even processes the EOF but just doesn't stop.
Well I changed it and used a "." to terminate the program which works for some
things but not when it comes after an "end" (while statement) any ideas why
this might be?
sue
> ________________________
%%
program : statement_list
;
statement_list : statement '.'
| while_statement
| statement_list full_statement
| statement_list while_statement
;
full_statement: statement ';' {
}
| statement {
errorstr = strdup("Missing semicolon");
yyerror(errorstr);
}
;
statement : INCR NAME { fprintf(stdout,"%s++;\n", $2); }
| DECR NAME { fprintf(stdout,"%s--;\n", $2); }
| NAME GETS NAME { fprintf(stdout,"%s = %s;\n", $1, $3); }
| CLEAR NAME { fprintf(stdout,"%s = 0;\n"); }
;
while_statement : WHILE NAME NE ZERO DO ';' {
fprintf(stdout,"while (%s != 0){ \n", $2);
} while_statement_list
| WHILE NAME NE ZERO DO {
fprintf(stdout,"while (%s != 0){ \n", $2);
errorstr = strdup("Missing semicolon");
yyerror(errorstr);
} while_statement_list
;
while_statement_list : statement_list end_statement
;
end_statement: END '.' {
fprintf(stdout, "}\n");
}
| END ';' {
fprintf(stdout, "}\n");
}
| END {
fprintf(stdout, "}\n");
errorstr = strdup("Missing semicolon after \"end\"");
yyerror(errorstr);
}
;
%%
More information about the Programming
mailing list