83 lines
2.3 KiB
Text
83 lines
2.3 KiB
Text
%union {
|
|
int nombre;
|
|
}
|
|
|
|
%{
|
|
#include "../Tables/tables.h"
|
|
#include <stdlib.h>
|
|
%}
|
|
|
|
%token tMUL tDIV tADD tSUB tINF tSUP tEQU
|
|
%token tAFC tCPY
|
|
%token tLOAD tSTORE tLOADI tSTOREI tSTOREA
|
|
%token tJMP tJMZ
|
|
%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 R val
|
|
Instruction : tAFC tNB tNB {add_instruction(AFC, $2, $3, 0);};
|
|
// CPY R1 R2
|
|
Instruction : tCPY tNB tNB {add_instruction(CPY, $2, $3, 0);};
|
|
|
|
// LOAD R @
|
|
Instruction : tLOAD tNB tNB {add_instruction(LOAD, $2, $3, 0);};
|
|
// STORE @ R
|
|
Instruction : tSTORE tNB tNB {add_instruction(STORE, $2, $3, 0);};
|
|
// LOADI R R
|
|
Instruction : tLOADI tNB tNB {add_instruction(LOADI, $2, $3, 0);};
|
|
// STOREI R R
|
|
Instruction : tSTOREI tNB tNB {add_instruction(STOREI, $2, $3, 0);};
|
|
// STOREA @ R
|
|
Instruction : tSTOREA tNB tNB {add_instruction(STOREA, $2, $3, 0);};
|
|
|
|
// JMP Ins
|
|
Instruction : tJMP tNB {add_instruction(JMP, $2, 0, 0);};
|
|
// JMF @ Ins
|
|
Instruction : tJMZ tNB {add_instruction(JMZ, $2, 0, 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;
|
|
}
|