No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

interpreter.y 2.0KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. %{
  2. #include <stdio.h>
  3. #include "instructions.h"
  4. int yylex();
  5. void yyerror(char*);
  6. int yydebug = 1;
  7. extern int yylineno;
  8. %}
  9. /* Union for yylval */
  10. %union {
  11. int nb;
  12. }
  13. %token tADD tMUL tSOU tDIV tCOP tAFC tJMP tJMF tPRI tRET tCALL
  14. %token tLT tLTE tGT tGTE tEQ tNEQ tAND tOR tNOT
  15. %token tLEA tCOP_LD tCOP_STR
  16. %token tOB tCB
  17. %token <nb> tNB
  18. %%
  19. %start File;
  20. File:
  21. Instructions;
  22. Instructions:
  23. /* epsilon */
  24. | Instructions Instruction
  25. ;
  26. Instruction:
  27. tADD tNB tNB tNB
  28. {asm_add_3(ADD, $2, $3, $4);}
  29. | tMUL tNB tNB tNB
  30. {asm_add_3(MUL, $2, $3, $4);}
  31. | tSOU tNB tNB tNB
  32. {asm_add_3(SOU, $2, $3, $4);}
  33. | tDIV tNB tNB tNB
  34. {asm_add_3(DIV, $2, $3, $4);}
  35. | tCOP tNB tNB
  36. {asm_add_2(COP, $2, $3);}
  37. | tAFC tNB tNB
  38. {asm_add_2(AFC, $2, $3);}
  39. | tJMP tNB
  40. {asm_add_1(JMP, $2);}
  41. | tJMF tNB tNB
  42. {asm_add_2(JMF, $2, $3);}
  43. | tLT tNB tNB tNB
  44. {asm_add_3(LT, $2, $3, $4);}
  45. | tGT tNB tNB tNB
  46. {asm_add_3(GT, $2, $3, $4);}
  47. | tLTE tNB tNB tNB
  48. {asm_add_3(LTE, $2, $3, $4);}
  49. | tGTE tNB tNB tNB
  50. {asm_add_3(GTE, $2, $3, $4);}
  51. | tAND tNB tNB tNB
  52. {asm_add_3(AND, $2, $3, $4);}
  53. | tOR tNB tNB tNB
  54. {asm_add_3(OR, $2, $3, $4);}
  55. | tEQ tNB tNB tNB
  56. {asm_add_3(EQ, $2, $3, $4);}
  57. | tNEQ tNB tNB tNB
  58. {asm_add_3(NEQ, $2, $3, $4);}
  59. | tNOT tNB tNB
  60. {asm_add_2(NOT, $2, $3);}
  61. | tPRI tNB
  62. {asm_add_1(PRI, $2);}
  63. | tLEA tNB tNB
  64. {asm_add_2(LEA, $2, $3);}
  65. | tCOP_LD tNB tOB tNB tCB
  66. {asm_add_2(COP_LD, $2, $4);}
  67. | tCOP_STR tOB tNB tCB tNB
  68. {asm_add_2(COP_STR, $3, $5);}
  69. | tRET tNB
  70. {asm_add_1(RET, $2);}
  71. | tCALL tNB tNB
  72. {asm_add_2(CALL, $2, $3);}
  73. ;
  74. %%
  75. void yyerror(char* str) {
  76. extern int yylineno;
  77. fprintf(stderr, "ERROR yyparse : Line %d: %s\n", yylineno, str);
  78. }
  79. int main(int argc, char *argv[]) {
  80. asm_init();
  81. yyparse();
  82. printf("INFO yyparse : Parsing End\n");
  83. asm_run();
  84. return 0;
  85. }