flex也可以从外部文本文件中读入要解析的文本,用yyrestart(f),可以打开多个文件
并循环打开。
flex也可以从外部文本文件中读入要解析的文本,用yyrestart(f),可以打开多个文件
并循环打开。
另外%option noyywrap,使用默认的flex设置(yywrap()在读完一个输入时调用)


/* Companion source code for "flex & bison", published by O'Reilly
 * Media, ISBN 978-0-596-15597-1
 * Copyright (c) 2009, Taughannock Networks. All rights reserved.
 * See the README file for license conditions and contact info.
 * $Header: /home/johnl/flnb/code/RCS/fb2-2.l,v 2.1 2009/11/08 02:53:18 johnl Exp $
 */

/* fb2-2 read several files */

%option noyywrap

%{
int chars = 0;
int words = 0;
int lines = 0;

int totchars = 0;
int totwords = 0;
int totlines = 0;
%}

%%

[a-zA-Z]+    { words++; chars += strlen(yytext); }
\n        { chars++; lines++; }
.        { chars++; }

%%

main(int argc, char **argv)
{
  int i;

  if(argc < 2) { /* just read stdin */
    yylex();
    printf("%8d%8d%8d\n", lines, words, chars);
    return 0;
  }

  for(i = 1; i < argc; i++) {
    FILE *f = fopen(argv[i], "r");
 
    if(!f) {
      perror(argv[1]);
      return (1);
    }
    yyrestart(f);
    yylex();
    fclose(f);
    printf("%8d%8d%8d %s\n", lines, words, chars, argv[i]);
    totchars += chars; chars = 0;
    totwords += words; words = 0;
    totlines += lines; lines = 0;
  }
  if(argc > 1)
    printf("%8d%8d%8d total\n", totlines, totwords, totchars);
  return 0;
}