From: Bernhard Urban Date: Tue, 4 May 2010 10:10:26 +0000 (+0200) Subject: codea: print tree (bessere debugausgabe) X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=uebersetzerbau-ss10.git;a=commitdiff_plain;h=9ac1f0e860f07bb8b7e57ee95d572827a4211de9 codea: print tree (bessere debugausgabe) --- diff --git a/codea/parser.y b/codea/parser.y index 34dadf1..e75f2ef 100644 --- a/codea/parser.y +++ b/codea/parser.y @@ -107,7 +107,7 @@ Statseq: @{ @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); @} | @@ -186,7 +186,6 @@ Feld: Term '.' IDENT @{ @c check(@Feld.s@, @IDENT.name@, S_FIELD); @i @Feld.node@ = TREENULL; - @reg fprintf(stderr, "w00t8\n"); @} ; @@ -198,7 +197,7 @@ Expr: | NOT Term @{ - @i @Expr.node@ = TREENULL; fprintf(stderr, "w00t2\n"); + @i @Expr.node@ = TREENULL; @} | Term Minusterm @@ -223,23 +222,23 @@ Expr: | 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@; @} ; @@ -266,13 +265,11 @@ Multerm: '*' Term Multerm @{ @i @Multerm.node@ = TREENULL; - @reg fprintf(stderr, "mul1\n"); @} | '*' Term @{ @i @Multerm.node@ = TREENULL; - @reg fprintf(stderr, "mul2\n"); @} ; @@ -280,12 +277,10 @@ Orterm: OR Term Orterm @{ @i @Orterm.node@ = TREENULL; - @reg fprintf(stderr, "or1\n"); @} | OR Term @{ @i @Orterm.node@ = TREENULL; - @reg fprintf(stderr, "or2\n"); @} ; diff --git a/codea/tree.c b/codea/tree.c index b85fe6a..e480fa7 100644 --- a/codea/tree.c +++ b/codea/tree.c @@ -54,3 +54,23 @@ struct treenode *new_number(long val) 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); + } +} + diff --git a/codea/tree.h b/codea/tree.h index 38347ce..45626bd 100644 --- a/codea/tree.h +++ b/codea/tree.h @@ -60,5 +60,6 @@ typedef struct treenode *treenodep; 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