Lex program to check if a Date is valid or not
Last Updated :
03 May, 2019
Problem: Write a Lex program to check if a date is valid or not.
Explanation:
Flex (Fast lexical Analyzer Generator) is a tool/computer program for generating lexical analyzers (scanners or lexers) written by Vern Paxson in C around 1987. Lex reads an input stream specifying the lexical analyzer and outputs source code implementing the lexer in the C programming language. The function yylex() is the main flex function which runs the Rule Section.
Note: Format of Date is DD/MM/YYYY.
Examples:
Input: 02/05/2019
Output: It is a valid date
Input: 05/20/2019
Output: It is not a valid date
Implementation:
%{
#include<stdio.h>
int i=0, yr=0, valid=0;
%}
%%
([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;}
%%
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;
}
|
Output:
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...