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