Programa Lex para comprobar si un año es bisiesto o no

Problema: Escriba un programa Lex para comprobar si un año es bisiesto o no.

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.

Nota: Los años bisiestos son los años que son divisibles por 400 o son divisibles por 4 y no divisibles por 100. Por lo tanto, 2016, 2020, etc. son años bisiestos, mientras que 2017 y 2019 no lo son.

Ejemplos:

Input: 2016 
Output: leap year

Input: 2017
Output: not a leap year 

Implementación:

/*Lex program to check whether an year is a leap year or not*/
  
%{
 void check(char *);
%}
  
/*Rule Section*/
 %%   
[0-9]    ;
[0-9][0-9]    ;
[0-9][0-9][0-9]     ;
[0-9][0-9][0-9][0-9]    { printf("%s", yytext);check(yytext); }
[0-9][0-9][0-9][0-9][0-9]+ ;
 %%
  
// driver program
int main()
{
    extern FILE *yyin;
    yyin=fopen("num", "r");
  
    // The function that starts the analysis 
    yylex();
    return 0;
  
}
  
void check(char *a)
{
    int x=0, i;
  
    for(i=0;i<4;i++)
        x=x*10+(a[i]-'0');
  
    if(x%400==0)   
        printf("\tleap year\n");
  
    else if(x%4==0&&x%100!=0)
        printf("\tleap year\n");
  
    else
        printf("\tnot a leap year\n");
}

Producción:

Publicación traducida automáticamente

Artículo escrito por thakur_aman 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 *