@{
@i @Statement.sin@ = @Statseq.0.s@;
@i @Statseq.1.s@ = @Statement.sout@;
- @gen burm_label(@Statement.node@); burm_reduce(@Statement.node@, 1);
+ @gen write_tree(@Statement.node@, 0); burm_label(@Statement.node@); burm_reduce(@Statement.node@, 1);
@}
|
@{
@c check(@Feld.s@, @IDENT.name@, S_FIELD);
@i @Feld.node@ = TREENULL;
- @reg fprintf(stderr, "w00t8\n");
@}
;
| NOT Term
@{
- @i @Expr.node@ = TREENULL; fprintf(stderr, "w00t2\n");
+ @i @Expr.node@ = TREENULL;
@}
| Term Minusterm
| Term Multerm
@{
- @i @Expr.node@ = TREENULL; fprintf(stderr, "w00t4\n");
+ @i @Expr.node@ = TREENULL;
@}
| Term Orterm
@{
- @i @Expr.node@ = TREENULL; fprintf(stderr, "w00t5\n");
+ @i @Expr.node@ = TREENULL;
@}
| Term '<' Term
@{
- @i @Expr.node@ = TREENULL; fprintf(stderr, "w00t6\n");
+ @i @Expr.node@ = TREENULL;
/* das is bloedsinn atm */ @i @Expr.imm@ = @Term.0.imm@ && @Term.1.imm@;
@}
| Term '=' Term
@{
- @i @Expr.node@ = TREENULL; fprintf(stderr, "w00t7\n");
+ @i @Expr.node@ = TREENULL;
/* das is bloedsinn atm */ @i @Expr.imm@ = @Term.0.imm@ && @Term.1.imm@;
@}
;
'*' 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");
@}
;
return new;
}
+static void write_indent(int i)
+{
+ int a;
+ for(a = 0; a < i; a++) {
+ fprintf(stderr, "| ");
+ }
+}
+
+void write_tree(struct treenode *node, int indent)
+{
+ write_indent(indent);
+ fprintf(stderr, "%s @ %%%s\n", o_names[node->op], node->reg);
+ if(node->kids[0] != TREENULL) {
+ write_tree(node->kids[0], indent+1);
+ }
+ if(node->kids[1] != TREENULL) {
+ write_tree(node->kids[1], indent+1);
+ }
+}
+
struct treenode *new_node(int op, struct treenode *l, struct treenode *r);
struct treenode *new_number(long val);
struct treenode *new_param(int op, struct treenode *l, struct treenode *r, int param_index);
+void write_tree(struct treenode *node, int ident);
#endif