Interpreteur/Lex_Yacc/as.y

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;
}