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;}