From 8f8ed7aa1e635e7bcc50823b943654c9a82a1c9b Mon Sep 17 00:00:00 2001 From: Bernhard Urban Date: Mon, 3 May 2010 16:18:20 +0200 Subject: [PATCH] codea: verschachtelte subtraktionen funktionieren (ohne konstanten) --- codea/code.bfe | 1 + codea/parser.y | 18 ++++++++++++------ codea/symtable.c | 2 +- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/codea/code.bfe b/codea/code.bfe index be61221..fbef72d 100644 --- a/codea/code.bfe +++ b/codea/code.bfe @@ -18,6 +18,7 @@ begin: ret # 0 # printf("// end\n"); ret: O_RET(expr) # 1 # move(bnode->reg, "rax"); ret(); expr: O_ID # 1 # if(bnode->param_index > -1) move(param_reg(bnode->param_index), bnode->reg); +expr: O_SUB(expr,expr) # 1 # printf("\tsubq %%%s, %%%s\n", bnode->kids[0]->reg, bnode->kids[1]->reg); %% diff --git a/codea/parser.y b/codea/parser.y index c6158c2..3703614 100644 --- a/codea/parser.y +++ b/codea/parser.y @@ -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"); @} diff --git a/codea/symtable.c b/codea/symtable.c index 006b6dd..5476ae8 100755 --- a/codea/symtable.c +++ b/codea/symtable.c @@ -3,7 +3,7 @@ #include #include "symtable.h" -#if 1 +#if 0 #define DD #endif -- 2.25.1