《Flex&Bison》例2-2代码

来源:互联网 发布:php解析json数组对象 编辑:程序博客网 时间:2024/06/15 05:14

该示例统计一个或多个输入文件中的行数、单词数及字符数。最后汇总的所有文件的行数、单词数及字符数。

如果没有提供输入文件,则从标准输入获取输入。

 

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


 

0 0
原创粉丝点击