📜  Lex程序检查Date是否有效

📅  最后修改于: 2021-06-28 07:04:48             🧑  作者: Mango

问题:编写Lex程序以检查日期是否有效。

解释:
Flex(快速词法分析器生成器)是由Vern Paxson在1987年左右用C编写的用于生成词法分析器(扫描器或词法分析器)的工具/计算机程序。Lex读取指定词法分析器的输入流,并输出在C语言中实现词法分析器的源代码编程语言。函数yylex()是运行规则部分的主要flex函数。

注意:日期格式为DD / MM / YYYY。

例子:

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

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

执行:

/* Lex program to check if a date is valid or not */
  
%{
   /* Definition section */
   #include
   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

输出: