@attributes { struct symbol *sin; struct symbol *sout; struct treenode *node; } Statement
@traversal @postorder c
+@traversal @preorder reg
@traversal @postorder gen
%%
@{
statinout()
xxputsin(@Expr.s@,)
- @i @Statement.node@ = new_node(O_RETURN, @Expr.node@, TREENULL);
+ @i @Statement.node@ = new_node(O_RET, @Expr.node@, TREENULL);
+ @reg @Statement.node@->reg = next_reg((char *)NULL, 0); @Expr.node@->reg = @Statement.node@->reg;
@}
;
IDENT
@{
@i @Lexpr.node@ = TREENULL;
- @c check(@Lexpr.s@, @IDENT.name@, S_VAR|S_PARM);
+ @c check(@Lexpr.s@, @IDENT.name@, S_VAR|S_PARM);
@}
| Feld
Feld: Term '.' IDENT
@{
- @c check(@Feld.s@, @IDENT.name@, S_FIELD);
+ @c check(@Feld.s@, @IDENT.name@, S_FIELD);
@i @Feld.node@ = TREENULL;
+ @reg fprintf(stderr, "w00t8\n");
@}
;
Expr:
Term
@{
- @i @Expr.node@ = TREENULL;
+ @reg @Term.node@->reg = @Expr.node@->reg;
@}
| NOT Term
@{
- @i @Expr.node@ = TREENULL;
+ @i @Expr.node@ = TREENULL; fprintf(stderr, "w00t2\n");
@}
| Term Minusterm
@{
- @i @Expr.node@ = TREENULL;
+ @i @Expr.node@ = TREENULL; fprintf(stderr, "w00t3\n");
@}
| Term Multerm
@{
- @i @Expr.node@ = TREENULL;
+ @i @Expr.node@ = TREENULL; fprintf(stderr, "w00t4\n");
@}
| Term Orterm
@{
- @i @Expr.node@ = TREENULL;
+ @i @Expr.node@ = TREENULL; fprintf(stderr, "w00t5\n");
@}
| Term '<' Term
@{
- @i @Expr.node@ = TREENULL;
+ @i @Expr.node@ = TREENULL; fprintf(stderr, "w00t6\n");
@}
| Term '=' Term
@{
- @i @Expr.node@ = TREENULL;
+ @i @Expr.node@ = TREENULL; fprintf(stderr, "w00t7\n");
@}
;
'-' Term Minusterm
@{
@i @Minusterm.node@ = TREENULL;
+ @reg fprintf(stderr, "minus1\n");
@}
| '-' Term
@{
@i @Minusterm.node@ = TREENULL;
+ @reg fprintf(stderr, "minus2\n");
@}
;
'*' Term Multerm
@{
@i @Multerm.node@ = TREENULL;
+ @reg fprintf(stderr, "mul1\n");
@}
| '*' Term
@{
@i @Multerm.node@ = TREENULL;
+ @reg fprintf(stderr, "mul2\n");
@}
;
OR Term Orterm
@{
@i @Orterm.node@ = TREENULL;
+ @reg fprintf(stderr, "or1\n");
@}
| OR Term
@{
@i @Orterm.node@ = TREENULL;
+ @reg fprintf(stderr, "or2\n");
@}
;
'(' Expr ')'
@{
@i @Term.node@ = TREENULL;
+ @reg fprintf(stderr, "wtf1\n");
@}
| NUM
@{
@i @Term.node@ = TREENULL;
+ @reg fprintf(stderr, "wtf2\n");
@}
| '-' NUM
@{
@i @Term.node@ = TREENULL;
+ @reg fprintf(stderr, "wtf3\n");
@}
| THIS
@{
@i @Term.node@ = TREENULL;
+ @reg fprintf(stderr, "wtf4\n");
@}
| IDENT
@{
- @c check(@Term.s@, @IDENT.name@, S_VAR|S_PARM);
- @i @Term.node@ = TREENULL;
+ @c check(@Term.s@, @IDENT.name@, S_VAR|S_PARM);
+ @i @Term.node@ = new_node(O_ID, TREENULL, TREENULL); @Term.node@->param_index=1;
+ @reg fprintf(stderr, "wtf5\n");
@}
| Feld
@{
@i @Term.node@ = TREENULL;
+ @reg fprintf(stderr, "wtf6\n");
@}
| IDENT '(' Exprs ')'
@{
@i @Term.node@ = TREENULL;
+ @reg fprintf(stderr, "wtf7\n");
@}
| Term '.' IDENT '(' Exprs ')'
@{
@i @Term.node@ = TREENULL;
+ @reg fprintf(stderr, "wtf8\n");
@}
;