79 lines
2.1 KiB
Text
79 lines
2.1 KiB
Text
%union {
|
|
int nombre;
|
|
}
|
|
|
|
%{
|
|
#include "../Tables/tables.h"
|
|
#include <stdlib.h>
|
|
%}
|
|
|
|
%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<nombre> 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;
|
|
}
|