%union { int nombre; } %{ #include "../Tables/tables.h" #include %} %token tMUL tDIV tADD tSUB tINF tSUP tEQU %token tAFC tCPY tAFCA %token tREAD tWR %token tJMP tJMF %token tGET tPRI %token tCALL tRET %token tSTOP %token tNB %% // Un programme est une suite d'au moins une instruction Programme : Instruction Programme; Programme : Instruction; // Liste de toutes les instructions et conversion // MUL, ADD, DIV.... Instruction : tMUL tNB tNB tNB {add_instruction(MUL, $2, $3, $4);}; Instruction : tADD tNB tNB tNB {add_instruction(ADD, $2, $3, $4);}; Instruction : tDIV tNB tNB tNB {add_instruction(DIV, $2, $3, $4);}; Instruction : tSUB tNB tNB tNB {add_instruction(SUB, $2, $3, $4);}; Instruction : tINF tNB tNB tNB {add_instruction(INF, $2, $3, $4);}; Instruction : tSUP tNB tNB tNB {add_instruction(SUP, $2, $3, $4);}; Instruction : tEQU tNB tNB tNB {add_instruction(EQU, $2, $3, $4);}; // AFC @ val Instruction : tAFC tNB tNB {add_instruction(AFC, $2, $3, 0);}; // CPY @ @ Instruction : tCPY tNB tNB {add_instruction(CPY, $2, $3, 0);}; // AFCA @ val Instruction : tAFCA tNB tNB {add_instruction(AFCA, $2, $3, 0);}; // JMP Ins Instruction : tJMP tNB {add_instruction(JMP, $2, 0, 0);}; // JMF @ Ins Instruction : tJMF tNB tNB {add_instruction(JMF, $2, $3, 0);}; // READ @1 @2 Instruction : tREAD tNB tNB {add_instruction(READ, $2, $3, 0);}; // WR @1 @2 Instruction : tWR tNB tNB {add_instruction(WRITE, $2, $3, 0);}; // GET @ Instruction : tGET tNB {add_instruction(GET, $2, 0, 0);}; // PRI @ Instruction : tPRI tNB {add_instruction(PRI, $2, 0, 0);}; // CALL Ins Val Instruction : tCALL tNB tNB {add_instruction(CALL, $2, $3, 0);}; // RET Instruction : tRET {add_instruction(RET, 0, 0, 0);}; // STOP Val Instruction : tSTOP tNB {add_instruction(STOP, $2, 0, 0);}; %% int main(int argc, char * argv[]) { if (argc != 2) { printf("Specifiez le fichier à interpreter"); exit(2); } extern FILE * yyin; yyin = fopen(argv[1], "r"); yyparse(); execute(); return 0; }