1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- %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(STORE, $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;
- }
|