codea: print tree (bessere debugausgabe)
authorBernhard Urban <lewurm@gmail.com>
Tue, 4 May 2010 10:10:26 +0000 (12:10 +0200)
committerBernhard Urban <lewurm@gmail.com>
Tue, 4 May 2010 10:10:26 +0000 (12:10 +0200)
codea/parser.y
codea/tree.c
codea/tree.h

index 34dadf16ebc3b310f2bd51bce6a7303e3b6f4d79..e75f2efcd55d1b4eb76dbca072bb89adce393e12 100644 (file)
@@ -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");
          @}
 
        ;
index b85fe6ac96a859acb4bfd0adca5ee90259d5f109..e480fa7a0943983b56fb41187df7dc6074f78cfe 100644 (file)
@@ -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);
+       }
+}
+
index 38347ce289e9d2552fcd8fa2191a296a72159442..45626bd798979c5cea79b9e137b2819fcf4496ad 100644 (file)
@@ -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