Advertisement
Vladislav8653

Untitled

Sep 3rd, 2024
37
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.94 KB | None | 0 0
  1. %{
  2. #include <stdio.h>
  3. #include "y.tab.h" // Подключаем файл парсера
  4. %}
  5.  
  6. %%
  7. "+" { return PLUS; }
  8. "-" { return MINUS; }
  9. "*" { return MULTIPLY; }
  10. "/" { return DIVIDE; }
  11. "==" { return EQUALS; }
  12. "!=" { return NOT_EQUALS; }
  13. ">" { return GREATER; }
  14. "<" { return LESS; }
  15. ">=" { return GREATER_EQUAL; }
  16. "<=" { return LESS_EQUAL; }
  17. [ \t\n]+ ; // Игнорируем пробелы и перевод строки
  18. . { printf("Неизвестный символ: %s\n", yytext); }
  19. %%
  20.  
  21. // Основная функция
  22. int main(int argc, char **argv) {
  23. yylex(); // Запускаем лексер
  24. return 0;
  25. }
  26.  
  27. int yywrap() {
  28. return 1;
  29. }
  30.  
  31.  
  32.  
  33. %{
  34. #include <stdio.h>
  35. #include <stdlib.h>
  36.  
  37. int plus_count = 0;
  38. int minus_count = 0;
  39. int multiply_count = 0;
  40. int divide_count = 0;
  41.  
  42. void count_operator(int op) {
  43. switch (op) {
  44. case PLUS: plus_count++; break;
  45. case MINUS: minus_count++; break;
  46. case MULTIPLY: multiply_count++; break;
  47. case DIVIDE: divide_count++; break;
  48. }
  49. }
  50. %}
  51.  
  52. %token PLUS MINUS MULTIPLY DIVIDE EQUALS NOT_EQUALS GREATER LESS GREATER_EQUAL LESS_EQUAL
  53.  
  54. %%
  55.  
  56. // Правила грамматики
  57. input:
  58. | input line
  59. ;
  60.  
  61. line:
  62. expression '\n' { count_operator($1); }
  63. ;
  64.  
  65. expression:
  66. PLUS { $$ = PLUS; }
  67. | MINUS { $$ = MINUS; }
  68. | MULTIPLY { $$ = MULTIPLY; }
  69. | DIVIDE { $$ = DIVIDE; }
  70. ;
  71.  
  72. %%
  73.  
  74. // Основная функция
  75. int main(int argc, char **argv) {
  76. yyparse(); // Запускаем парсер
  77. printf("Счетчик операторов:\n");
  78. printf("+ : %d\n", plus_count);
  79. printf("- : %d\n", minus_count);
  80. printf("* : %d\n", multiply_count);
  81. printf("/ : %d\n", divide_count);
  82. return 0;
  83. }
  84.  
  85. void yyerror(const char *s) {
  86. fprintf(stderr, "Ошибка: %s\n", s);
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement