codea: verschachtelte subtraktionen funktionieren (ohne konstanten)
[uebersetzerbau-ss10.git] / codea / parser.y
index c6158c2d70e465a6c2a61c96ca5663241c418821..3703614027712f99d6cb26e9a95f4767bf8fccd2 100644 (file)
@@ -202,7 +202,11 @@ Expr:
 
        | Term Minusterm
          @{
-           @i @Expr.node@ = TREENULL; fprintf(stderr, "w00t3\n");
+           @i @Expr.node@ = new_node(O_SUB, @Minusterm.node@, @Term.node@);
+
+               @reg {@Term.node@->reg = @Expr.node@->reg;
+                       @Minusterm.node@->reg = next_reg(@Term.node@->reg, @Expr.node@->skip);
+                       }
          @}
 
        | Term Multerm
@@ -229,14 +233,16 @@ Expr:
 Minusterm:
          '-' Term Minusterm
          @{
-           @i @Minusterm.node@ = TREENULL;
-           @reg fprintf(stderr, "minus1\n");
+           @i @Minusterm.node@ = new_node(O_SUB, @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);
+                       }
          @}
 
        | '-' Term
          @{
-           @i @Minusterm.node@ = TREENULL;
-           @reg fprintf(stderr, "minus2\n");
+           @reg @Term.node@->reg = @Minusterm.node@->reg;
          @}
        ;
 
@@ -271,7 +277,7 @@ Orterm:
 Term:
          '(' Expr ')'
          @{
-           @i @Term.node@ = TREENULL;
+           @i @Term.node@ = @Expr.node@;
            @reg fprintf(stderr, "wtf1\n");
          @}