diff --git a/asmTable.c b/asmTable.c index 2d5a6cf..acfa546 100644 --- a/asmTable.c +++ b/asmTable.c @@ -74,12 +74,12 @@ void displayASMTable(){ for (int i = 0; i < lineCounter; ++i) { ASMLine a = asmTable[i]; if(a.jumpLine == -1) { - printf("%d | %s", i, a.name); + printf("%d | %s\n", i, a.name); } else { if(a.conditionAddr == -1) { - printf("%d | %s @%d\n", i, a.name,a.jumpLine); + printf("%d | %s %d\n", i, a.name,a.jumpLine); } else { - printf("%d | %s @%d @%d\n", i, a.name,a.conditionAddr,a.jumpLine); + printf("%d | %s %d %d\n", i, a.name,a.conditionAddr,a.jumpLine); } } if (i != lineCounter -1) { @@ -87,4 +87,23 @@ void displayASMTable(){ } } doubleLine(); +} + +/*exports the entire table to asm*/ +void exportASMTable(){ + FILE* fp; + fp = fopen("asm", "a"); + for (int i = 0; i < lineCounter; ++i) { + ASMLine a = asmTable[i]; + if(a.jumpLine == -1) { + fprintf(fp,"%s\n",i, a.name); + } else { + if(a.conditionAddr == -1) { + fprintf(fp,"%s %d\n",i, a.name,a.jumpLine); + } else { + fprintf(fp,"%s %d %d\n",i, a.name,a.conditionAddr,a.jumpLine); + } + } + } + fclose(fp); } \ No newline at end of file diff --git a/asmTable.h b/asmTable.h index 2a51c3a..489db7c 100644 --- a/asmTable.h +++ b/asmTable.h @@ -40,8 +40,9 @@ void setConditionAddr(int index, int addr); /*returns the current line (i.e. next one to insert)*/ int getCurrentLineNumber(); - /*displays the entire table at this moment*/ void displayASMTable(); +/*exports the entire table to asm*/ +void exportASMTable(); #endif //PROJET_SYSTEMES_INFORMATIQUES_ASMTABLE_H diff --git a/operations.c b/operations.c index a95780a..4acef74 100644 --- a/operations.c +++ b/operations.c @@ -30,7 +30,7 @@ void clearOp(){ int operation_add(int addr1, int addr2){ int addr = addTempINTAndGetAddress(); char s[ASM_TEXT_LEN]; - sprintf(s, "ADD @%d @%d @%d\n", addr, addr1, addr2); + sprintf(s, "ADD %d %d %d", addr, addr1, addr2); printOp(s); return addr; } @@ -40,7 +40,7 @@ int operation_add(int addr1, int addr2){ int operation_sub(int addr1, int addr2){ int addr = addTempINTAndGetAddress(); char s[ASM_TEXT_LEN]; - sprintf(s, "SUB @%d @%d @%d\n", addr, addr1, addr2); + sprintf(s, "SUB %d %d %d", addr, addr1, addr2); printOp(s); return addr; } @@ -50,7 +50,7 @@ int operation_sub(int addr1, int addr2){ int operation_mul(int addr1, int addr2){ int addr = addTempINTAndGetAddress(); char s[ASM_TEXT_LEN]; - sprintf(s, "MUL @%d @%d @%d\n", addr, addr1, addr2); + sprintf(s, "MUL %d %d %d", addr, addr1, addr2); printOp(s); return addr; } @@ -60,7 +60,7 @@ int operation_mul(int addr1, int addr2){ int operation_divInt(int addr1, int addr2){ int addr = addTempINTAndGetAddress(); char s[ASM_TEXT_LEN]; - sprintf(s, "DIV_INT @%d @%d @%d\n", addr, addr1, addr2); + sprintf(s, "DIV_INT %d %d %d", addr, addr1, addr2); printOp(s); return addr; } @@ -70,7 +70,7 @@ int operation_divInt(int addr1, int addr2){ int operation_divRem(int addr1, int addr2){ int addr = addTempINTAndGetAddress(); char s[ASM_TEXT_LEN]; - sprintf(s, "DIV_REM @%d @%d @%d\n", addr, addr1, addr2); + sprintf(s, "DIV_REM %d %d %d", addr, addr1, addr2); printOp(s); return addr; } @@ -81,7 +81,7 @@ int operation_divRem(int addr1, int addr2){ */ void operation_afc_nb(int addr, int value){ char s[ASM_TEXT_LEN]; - sprintf(s, "AFC @%d #%d\n", addr, value); + sprintf(s, "AFC %d %d", addr, value); printOp(s); } @@ -102,7 +102,7 @@ int operation_afc_nb_tmp(int value){ */ void operation_copy(int addr1, int addr2){ char s[ASM_TEXT_LEN]; - sprintf(s, "COP @%d @%d\n", addr1, addr2); + sprintf(s, "COP %d %d", addr1, addr2); printOp(s); } @@ -111,7 +111,7 @@ void operation_copy(int addr1, int addr2){ int cond_inf(int addr1, int addr2){ int addr = addTempCONDAndGetAddress(); char s[ASM_TEXT_LEN]; - sprintf(s, "INF @%d @%d @%d\n", addr, addr1, addr2); + sprintf(s, "INF %d %d %d", addr, addr1, addr2); printOp(s); return addr; } @@ -121,7 +121,7 @@ int cond_inf(int addr1, int addr2){ int cond_sup(int addr1, int addr2){ int addr = addTempCONDAndGetAddress(); char s[ASM_TEXT_LEN]; - sprintf(s, "SUP @%d @%d @%d\n", addr, addr1, addr2); + sprintf(s, "SUP %d %d %d", addr, addr1, addr2); printOp(s); return addr; } @@ -131,7 +131,7 @@ int cond_sup(int addr1, int addr2){ int cond_eq(int addr1, int addr2) { int addr = addTempCONDAndGetAddress(); char s[ASM_TEXT_LEN]; - sprintf(s, "EQU @%d @%d @%d\n", addr, addr1, addr2); + sprintf(s, "EQU %d %d %d", addr, addr1, addr2); printOp(s); return addr; } @@ -141,7 +141,7 @@ int cond_eq(int addr1, int addr2) { int cond_not(int addr1){ int addr = addTempCONDAndGetAddress(); char s[ASM_TEXT_LEN]; - sprintf(s, "NOT @%d @%d\n", addr, addr1); + sprintf(s, "NOT %d %d", addr, addr1); printOp(s); return addr; } @@ -151,7 +151,7 @@ int cond_not(int addr1){ int cond_and(int addr1, int addr2){ int addr = addTempCONDAndGetAddress(); char s[ASM_TEXT_LEN]; - sprintf(s, "AND @%d @%d @%d\n", addr, addr1, addr2); + sprintf(s, "AND %d %d %d", addr, addr1, addr2); printOp(s); return addr; } @@ -161,7 +161,7 @@ int cond_and(int addr1, int addr2){ int cond_or(int addr1, int addr2){ int addr = addTempCONDAndGetAddress(); char s[ASM_TEXT_LEN]; - sprintf(s, "OR @%d @%d @%d\n", addr, addr1, addr2); + sprintf(s, "OR %d %d %d", addr, addr1, addr2); printOp(s); return addr; } diff --git a/table.c b/table.c index 0ee714d..1358d85 100644 --- a/table.c +++ b/table.c @@ -58,6 +58,10 @@ Symbol getStruct(char* name){ return symbolTable[i]; } } + if (VERBOSITY) { + printf("\n\n%s not found \n\n", name); + displayTable(); + } error("No structure found"); return (createNewStructure("error", 0)); } diff --git a/yacc.y b/yacc.y index 2d6da98..5744190 100644 --- a/yacc.y +++ b/yacc.y @@ -116,7 +116,7 @@ IfStatement1 : %empty { }; IfStatement : tIF Condition IfStatement1 InnerBlock tELSE { - int current = getCurrentLineNumber(); printf("current Line %d", current); addLine("JMP"); $1 = current; setJumpLine($3, current+1); + setConditionAddr($3,$2); int current = getCurrentLineNumber(); printf("current Line %d", current); addLine("JMP"); $1 = current; setJumpLine($3, current+1); } InnerBlock { int current = getCurrentLineNumber() ; printf("%d, %d",$1, current);setJumpLine($1, current); } @@ -204,5 +204,6 @@ int main(void) { initSymbolTable(); initASMTable(); yyparse(); + exportASMTable(); } // SI >> SC