Programa Lex para contar la frecuencia de la palabra dada en un archivo

Problema: dado un archivo de texto como entrada, la tarea es contar la frecuencia de una palabra dada en el archivo. 
Explicación:  
Lex es un programa de computadora que genera analizadores léxicos y fue escrito por Mike Lesk y Eric Schmidt. Lex lee un flujo de entrada que especifica el analizador léxico y genera el código fuente que implementa el lexer en el lenguaje de programación C.
Enfoque: 
como sabemos, yytext contiene el valor del token coincidente actual, podemos compararlo con la palabra cuya frecuencia se va a contar. si el valor de yytext y la palabra dada son iguales, incremente la variable de conteo.
Archivo de entrada: input.txt
 

A continuación se muestra la implementación del enfoque anterior:

C

/* LEX code to count the frequency
   of the given word in a file */
 
/* Definition section */
/* variable word indicates the word
   whose frequency is to be count */
/* variable count is used to store the
   frequency of the given word */
 
%{
#include<stdio.h>
#include<string.h>
 
char word [] = "geeks";
int count = 0;
 
 
%}
 
/* Rule Section */
/* Rule 1 compares the matched token with the
   word to count and increments the count variable
   on successful match  */
/* Rule 2 matches everything other than string
   (consists of alphabets only ) and do nothing */
 
%%
[a-zA-Z]+    { if(strcmp(yytext, word)==0)
                   count++; }
.  ;        
%%
 
 
int yywrap()
{
    return 1;
}
 
/* code section */
int main()
{
        extern FILE *yyin, *yyout;
         
        /* open the input file
           in read mode */
        yyin=fopen("input.txt", "r");
        yylex();
          
        printf("%d", count);
     
}

Producción:

Publicación traducida automáticamente

Artículo escrito por ihritik y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *