/* Somewhat faster still: potentially match a lot of text with each rule */ | |
ws [ \t] | |
nonws [^ \t\n] | |
word {ws}*{nonws}+ | |
words {word}{ws}+ | |
%% | |
int cc = 0, wc = 0, lc = 0; | |
{word}{ws}* cc += yyleng; ++wc; | |
{word}{ws}*\n cc += yyleng; ++wc; ++lc; | |
{words}{word}{ws}* cc += yyleng; wc += 2; | |
{words}{2}{word}{ws}* cc += yyleng; wc += 3; | |
{words}{3}{word}{ws}* cc += yyleng; wc += 4; | |
{ws}+ cc += yyleng; | |
\n+ cc += yyleng; lc += yyleng; | |
<<EOF>> { | |
printf( "%8d %8d %8d\n", lc, wc, cc ); | |
yyterminate(); | |
} |