B.8 LEX源程序例子
  这一节举两个例子看看LEX源程序的写法
  1) 将输入串中所有能被7整除的整数加3,其余部分照原样输出,先看下面的LEX源程序:
  %%
   int k;
  [0-9]+{
   scanf(-1,yytext,"%d",&k);
   if(k%7==0)
    printf("%d",k+3);
   else
    printf("%d",k);
   }
上面的程序还有不足的地方,如对负整数,只是将其绝对值加上3,而且像X7,4963这样的项也做了修改,现在只要对上面的源程序稍作修改就避免了这些问题。
  %%
   int k;
  -。[0-9]+{
       scanf(-1,yytext,"%d",&k);
       printf("%d",k%7==0。k+3;k);
       }
  -。[0-9]+ECHO;
  [A-Za-z][A-Za-z0-9]+ECHO;
  2) 下一个例子统计输入串中各种不同长度的单词的个数,统计结果在数组lengs中,单词定义为由字母组成的串,源程序如下:
   int lengs[100];
  %%
  [a-z]+lengs[yyleng]++;
   ·  |
   \  n;
  %%
  yywrap()
  {
  int i;
  printf("Length No.words \。);
  for (i=0;i<100;i++)
   if (lengs[i]>0)
    printf ("%5d%10d\n",i,
     lengs[i]);
  return(1);
  }
在上面的源程序中,当LEX读入输入串时,它只统计而不输出,到输入串读入完毕后,才在调用yywrap()时输出统计结果,为此用户自己提供了yywrap(),注意yywrap()的最后一个语句是返回值1。