Рубрики

Программа Lex для подсчета частоты данного слова в файле

Проблема: задан текстовый файл в качестве входных данных, задача состоит в подсчете частоты данного слова в файле.

Объяснение:
Lex — это компьютерная программа, которая генерирует лексические анализаторы. Она была написана Майком Леском и Эриком Шмидтом. Lex читает входной поток, определяющий лексический анализатор, и выводит исходный код, реализующий лексер на языке программирования C.

Подходить:
Как мы знаем, yytext содержит значение текущего совпавшего токена, мы можем сравнить его со словом, частота которого должна быть подсчитана. если значение yytext и заданного слова совпадают, увеличивайте переменную count.

Входной файл: input.txt

Ниже приведена реализация вышеуказанного подхода:

/ * LEX код для подсчета частоты

   данного слова в файле * /

  
/ * Раздел определения * /
/ * переменное слово указывает слово

   чья частота должна быть засчитана * /

/ * переменная count используется для хранения

   частота данного слова * /

  
%{
#include<stdio.h>
#include<string.h>

  

char word [] = "geeks";

int count = 0;

  

  
%}

  
/ * Раздел правил * /
/ * Правило 1 сравнивает сопоставленный токен с

   слово для подсчета и увеличивает переменную count

   в успешном матче * /

/ * Правило 2 соответствует всему, кроме строки

   (состоит только из алфавитов) и ничего не делать * /

  
%%

[a-zA-Z]+    { if(strcmp(yytext, word)==0)

                   count++; }

.  ;         
%%

  

  

int yywrap()

{

    return 1;

}

  
/ * секция кода * /

int main()

{

        extern FILE *yyin, *yyout;

          

        / * открыть входной файл

           в режиме чтения * /

        yyin=fopen("input.txt", "r");

        yylex();

           

        printf("%d", count);

      
}

Выход:

Рекомендуемые посты:

Программа Lex для подсчета частоты данного слова в файле

0.00 (0%) 0 votes