codea: a-b-c-d sollte jetzt passen... trick: a-b-c-d = a-(b+c+d)
[uebersetzerbau-ss10.git] / codea / parser.y
index 3703614027712f99d6cb26e9a95f4767bf8fccd2..0622a80543d273d1eb5baf067d872460300de05f 100644 (file)
@@ -29,7 +29,8 @@
 @attributes { struct symbol *f; int parms; } Parms
 @attributes { struct symbol *f; } FeldID Structdef Program
 @attributes { struct symbol *s; } Methoddef Statseq Exprs
-@attributes { struct symbol *s; struct treenode *node; } Lexpr Expr Minusterm Multerm Orterm Term Feld
+@attributes { struct symbol *s; struct treenode *node; } Expr Minusterm
+@attributes { struct symbol *s; struct treenode *node; } Lexpr Multerm Orterm Term Feld
 @attributes { struct symbol *sin; struct symbol *sout; struct treenode *node; } Statement
 
 @traversal @postorder c
@@ -206,6 +207,7 @@ Expr:
 
                @reg {@Term.node@->reg = @Expr.node@->reg;
                        @Minusterm.node@->reg = next_reg(@Term.node@->reg, @Expr.node@->skip);
+                       fprintf(stderr, "2at-expr_: Term.node \"%s\", Minusterm.node \"%s\"\n", @Term.node@->reg, @Minusterm.node@->reg);
                        }
          @}
 
@@ -233,16 +235,19 @@ Expr:
 Minusterm:
          '-' Term Minusterm
          @{
-           @i @Minusterm.node@ = new_node(O_SUB, @Minusterm.1.node@, @Term.node@);
+           @i @Minusterm.node@ = new_node(O_ADD, @Minusterm.1.node@, @Term.node@);
 
            @reg { @Minusterm.1.node@->reg = @Minusterm.node@->reg;
                        @Term.node@->reg = next_reg(@Minusterm.1.node@->reg, @Minusterm.node@->skip);
+                       fprintf(stderr, "0at-minusterm_: Minusterm.node \"%s\", Minusterm.1.node \"%s\", Term.node \"%s\"\n", @Minusterm.node@->reg, @Minusterm.1.node@->reg, @Term.node@->reg);
                        }
          @}
 
        | '-' Term
          @{
-           @reg @Term.node@->reg = @Minusterm.node@->reg;
+           @reg @Term.node@->reg = @Minusterm.node@->reg; {
+                       fprintf(stderr, "1at-minusterm_: Minusterm.node \"%s\", Term.node \"%s\"\n", @Minusterm.node@->reg, @Term.node@->reg);
+                       }
          @}
        ;