问题:编写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
输出: