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