Programa Lex para comprobar si una fecha es válida o no

Problema: Escriba un programa Lex para verificar si una fecha es válida o no.

Explicación:
Flex (Fast lexical Analyzer Generator) es una herramienta/programa informático para generar analizadores léxicos (escáneres o lexers) escritos por Vern Paxson en C alrededor de 1987. 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. La función yylex() es la principal función flexible que ejecuta la sección de reglas.

Nota: El formato de la fecha es DD/MM/AAAA.

Ejemplos:

Input: 02/05/2019
Output: It is a valid date

Input: 05/20/2019
Output: It is not a valid date 

Implementación:

/* Lex program to check if a date is valid or not */
  
%{
   /* Definition section */
   #include<stdio.h>
   int i=0, yr=0, valid=0;
%}
  
/* Rule Section */
%%
([0-2][0-9]|[3][0-1])\/((0(1|3|5|7|8))|(10|12))
            \/([1-2][0-9][0-9][-0-9]) {valid=1;}
  
([0-2][0-9]|30)\/((0(4|6|9))|11)
         \/([1-2][0-9][0-9][0-9]) {valid=1;}
  
([0-1][0-9]|2[0-8])\/02
            \/([1-2][0-9][0-9][0-9]) {valid=1;}
  
29\/02\/([1-2][0-9][0-9][0-9]) 
     { while(yytext[i]!='/')i++; i++;
       while(yytext[i]!='/')i++;i++;
       while(i<yyleng)yr=(10*yr)+(yytext[i++]-'0'); 
       if(yr%4==0||(yr%100==0&&yr%400!=0))valid=1;}
  
%%
  
// driver code 
main()
{
  yyin=fopen("vpn.txt", "r");
  yylex();
  if(valid==1) printf("It is a valid date\n");
  else printf("It is not a valid date\n");
}
 int yywrap()
{
 return 1;
}

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 *