
252 Compilers – Principles and Practice
stmt: decl
| defn
| expr
| RETURN {fprintf(fout1,"RET\n");
fprintf(fout2,"%d: RET T%d -- --\n", ++mcount, tcount);
tpush(tcount);}
| RETURN expr {fprintf(fout1,"RET\n");
fprintf(fout2,"%d: RET T%d -- --\n", ++mcount, tcount);
tpush(tcount);}
| while ’(’ cond ’)’ stmt end {int l; l = lpop(); /* label2 */
fprintf(fout1, "Label%d\nBR\n", lpop());
fprintf(fout1, "Label%d\n:\n", l);
fprintf(fout2, "%d: BR %d -- --\n", ++mcount,($1)->x.I);
fprintf(fout2, "%d: LABI %d -- --\n", ++mcount,
($3)->y.I);}
| if ’(’ cond ’)’ stmt end { /* else-less if */
fprintf(fout1, "Label%d\n:\n", lpop()); lpop();
/* label1 ...