问题:编写Lex程序以检查年份是否为is年。
解释:
Lex是一个生成词法分析器的计算机程序,由Mike Lesk和Eric Schmidt编写。 Lex读取指定词法分析器的输入流,并输出以C编程语言实现词法分析器的源代码。
注意: Le年是可以被400整除或可以被4整除而不能被100整除的年份。因此2016、2020等是are年,而2017和2019则不能。
例子:
Input: 2016
Output: leap year
Input: 2017
Output: not a leap year
执行:
/*Lex program to check whether an year is a leap year or not*/
%{
void check(char *);
%}
/*Rule Section*/
%%
[0-9] ;
[0-9][0-9] ;
[0-9][0-9][0-9] ;
[0-9][0-9][0-9][0-9] { printf("%s", yytext);check(yytext); }
[0-9][0-9][0-9][0-9][0-9]+ ;
%%
// driver program
int main()
{
extern FILE *yyin;
yyin=fopen("num", "r");
// The function that starts the analysis
yylex();
return 0;
}
void check(char *a)
{
int x=0, i;
for(i=0;i<4;i++)
x=x*10+(a[i]-'0');
if(x%400==0)
printf("\tleap year\n");
else if(x%4==0&&x%100!=0)
printf("\tleap year\n");
else
printf("\tnot a leap year\n");
}
输出: