该示例统计一个或多个输入文件中的行数、单词数及字符数。最后汇总的所有文件的行数、单词数及字符数。
如果没有提供输入文件,则从标准输入获取输入。
CMakeLists.txt
CMAKE_MINIMUM_REQUIRED(VERSION 2.6) SET(PROJ_NAME fb2-2) PROJECT(${PROJ_NAME}) find_package(Flex) FLEX_TARGET(MyScanner ${PROJ_NAME}.txt ${CMAKE_CURRENT_BINARY_DIR}/lexer.c) ADD_EXECUTABLE(${PROJ_NAME} ${FLEX_MyScanner_OUTPUTS})
fb2-2.txt
%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 += yyleng; } \n { ++lines; ++chars; } . { ++chars; } %% int main(int argc, char ** argv) { int i; if (argc<2) { 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[i]); 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; }