Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %{
- #include <stdio.h>
- #include "y.tab.h" // Подключаем файл парсера
- %}
- %%
- "+" { return PLUS; }
- "-" { return MINUS; }
- "*" { return MULTIPLY; }
- "/" { return DIVIDE; }
- "==" { return EQUALS; }
- "!=" { return NOT_EQUALS; }
- ">" { return GREATER; }
- "<" { return LESS; }
- ">=" { return GREATER_EQUAL; }
- "<=" { return LESS_EQUAL; }
- [ \t\n]+ ; // Игнорируем пробелы и перевод строки
- . { printf("Неизвестный символ: %s\n", yytext); }
- %%
- // Основная функция
- int main(int argc, char **argv) {
- yylex(); // Запускаем лексер
- return 0;
- }
- int yywrap() {
- return 1;
- }
- %{
- #include <stdio.h>
- #include <stdlib.h>
- int plus_count = 0;
- int minus_count = 0;
- int multiply_count = 0;
- int divide_count = 0;
- void count_operator(int op) {
- switch (op) {
- case PLUS: plus_count++; break;
- case MINUS: minus_count++; break;
- case MULTIPLY: multiply_count++; break;
- case DIVIDE: divide_count++; break;
- }
- }
- %}
- %token PLUS MINUS MULTIPLY DIVIDE EQUALS NOT_EQUALS GREATER LESS GREATER_EQUAL LESS_EQUAL
- %%
- // Правила грамматики
- input:
- | input line
- ;
- line:
- expression '\n' { count_operator($1); }
- ;
- expression:
- PLUS { $$ = PLUS; }
- | MINUS { $$ = MINUS; }
- | MULTIPLY { $$ = MULTIPLY; }
- | DIVIDE { $$ = DIVIDE; }
- ;
- %%
- // Основная функция
- int main(int argc, char **argv) {
- yyparse(); // Запускаем парсер
- printf("Счетчик операторов:\n");
- printf("+ : %d\n", plus_count);
- printf("- : %d\n", minus_count);
- printf("* : %d\n", multiply_count);
- printf("/ : %d\n", divide_count);
- return 0;
- }
- void yyerror(const char *s) {
- fprintf(stderr, "Ошибка: %s\n", s);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement