79 рядки
1,5 КіБ
Text
Executable file
79 рядки
1,5 КіБ
Text
Executable file
%{
|
|
#include <stdio.h>
|
|
#include "instructions.h"
|
|
int yylex();
|
|
void yyerror(char*);
|
|
int yydebug = 1;
|
|
extern int yylineno;
|
|
%}
|
|
|
|
/* Union for yylval */
|
|
%union {
|
|
int nb;
|
|
}
|
|
|
|
%token tADD tMUL tSOU tDIV tCOP tAFC tJMP tJMF tINF tSUP tEQU tPRI tAFCA tWR tREAD
|
|
|
|
%token <nb> tNB
|
|
|
|
%%
|
|
|
|
%start File;
|
|
|
|
File:
|
|
Instructions;
|
|
|
|
Instructions:
|
|
/* epsilon */
|
|
| Instructions Instruction
|
|
;
|
|
|
|
Instruction:
|
|
tADD tNB tNB tNB
|
|
{asm_add_3(ADD, $2, $3, $4);}
|
|
| tMUL tNB tNB tNB
|
|
{asm_add_3(MUL, $2, $3, $4);}
|
|
| tSOU tNB tNB tNB
|
|
{asm_add_3(SOU, $2, $3, $4);}
|
|
| tDIV tNB tNB tNB
|
|
{asm_add_3(DIV, $2, $3, $4);}
|
|
| tCOP tNB tNB
|
|
{asm_add_2(COP, $2, $3);}
|
|
| tAFC tNB tNB
|
|
{asm_add_2(AFC, $2, $3);}
|
|
| tJMP tNB
|
|
{asm_add_1(JMP, $2);}
|
|
| tJMF tNB tNB
|
|
{asm_add_2(JMF, $2, $3);}
|
|
| tINF tNB tNB tNB
|
|
{asm_add_3(INF, $2, $3, $4);}
|
|
| tSUP tNB tNB tNB
|
|
{asm_add_3(SUP, $2, $3, $4);}
|
|
| tEQU tNB tNB tNB
|
|
{asm_add_3(EQU, $2, $3, $4);}
|
|
| tPRI tNB
|
|
{asm_add_1(PRI, $2);}
|
|
| tAFCA tNB tNB
|
|
{asm_add_2(AFCA, $2, $3);}
|
|
| tWR tNB tNB
|
|
{asm_add_2(WR, $2, $3);}
|
|
| tREAD tNB tNB
|
|
{asm_add_2(READ, $2, $3);}
|
|
;
|
|
|
|
|
|
%%
|
|
|
|
void yyerror(char* str) {
|
|
extern int yylineno;
|
|
fprintf(stderr, "ERROR yyparse : Line %d: %s\n", yylineno, str);
|
|
}
|
|
|
|
int main(int argc, char *argv[]) {
|
|
asm_init();
|
|
yyparse();
|
|
printf("INFO yyparse : Parsing End\n");
|
|
asm_run();
|
|
return 0;
|
|
}
|
|
|