diff options
author | Kim Kibum <kb0929.kim@samsung.com> | 2012-05-21 17:42:36 +0900 |
---|---|---|
committer | Kim Kibum <kb0929.kim@samsung.com> | 2012-05-21 17:42:36 +0900 |
commit | 2ae147a745432eb1f8d2c72b4dc22351e3534b5c (patch) | |
tree | cfbde0d1f4e0d05d6b92eb8e71485f6d36a2145a /examples/manual/wc.lex | |
parent | c22a3ed09b982b93feb23655eba7b55fa27885cb (diff) | |
download | flex-2ae147a745432eb1f8d2c72b4dc22351e3534b5c.tar.gz flex-2ae147a745432eb1f8d2c72b4dc22351e3534b5c.tar.bz2 flex-2ae147a745432eb1f8d2c72b4dc22351e3534b5c.zip |
Upload Tizen:Base source
Diffstat (limited to 'examples/manual/wc.lex')
-rw-r--r-- | examples/manual/wc.lex | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/examples/manual/wc.lex b/examples/manual/wc.lex new file mode 100644 index 0000000..7cae6a1 --- /dev/null +++ b/examples/manual/wc.lex @@ -0,0 +1,122 @@ +%{ + +/* + * wc.lex : A simple example of using FLEX + * to create a wc-like utility. + * + * See MISC/fastwc/ in the flex distribution for examples + * of how to write this scanner for maximum performance. + */ + +int numchars = 0; +int numwords = 0; +int numlines = 0; +int totchars = 0; +int totwords = 0; +int totlines = 0; + +/* + * rules start from here + */ + +%} + +%% + +[\n] { numchars++; numlines++; } +[\r] { numchars++; } +[^ \t\n]+ { numwords++; numchars += yyleng; } +. { numchars++; } + +%% + +/* + * additional C code start from here. This supplies + * all the argument processing etc. + */ + +int main(int argc, char *argv[]) +{ + int loop,first=1; + int lflag = 0; /* 1 if we count # of lines */ + int wflag = 0; /* 1 if we count # of words */ + int cflag = 0; /* 1 if we count # of characters */ + int fflag = 0; /* 1 if we have a file name */ + + for(loop=1; loop<argc; loop++){ + if(argv[loop][0] == '-'){ + switch(argv[loop][1]){ + case 'l': + lflag = 1; + break; + case 'w': + wflag = 1; + break; + case 'c': + cflag = 1; + break; + default: + fprintf(stderr,"unknown option -%c\n", + argv[loop][1]); + } + } + } + if(lflag == 0 && wflag == 0 && cflag == 0){ + lflag = wflag = cflag = 1; /* default to all on */ + } + + for(loop=1; loop<argc; loop++){ + if(argv[loop][0] != '-'){ + fflag = 1; + numlines = numchars = numwords = 0; + if((yyin = fopen(argv[loop],"rb")) != NULL){ + if(first){ + first = 0; + } else { + YY_NEW_FILE; + } + (void) yylex(); + fclose(yyin); + totwords += numwords; + totchars += numchars; + totlines += numlines; + printf("file : %25s :",argv[loop]) ; + if(lflag){ + fprintf(stdout,"lines %5d ",numlines); + } + if(cflag){ + fprintf(stdout,"characters %5d ",numchars); + } + if(wflag){ + fprintf(stdout,"words %5d ",numwords); + } + fprintf(stdout,"\n"); + }else{ + fprintf(stderr,"wc : file not found %s\n",argv[loop]); + } + } + } + if(!fflag){ + fprintf(stderr,"usage : wc [-l -w -c] file [file...]\n"); + fprintf(stderr,"-l = count lines\n"); + fprintf(stderr,"-c = count characters\n"); + fprintf(stderr,"-w = count words\n"); + exit(1); + } + for(loop=0;loop<79; loop++){ + fprintf(stdout,"-"); + } + fprintf(stdout,"\n"); + fprintf(stdout,"total : %25s ","") ; + if(lflag){ + fprintf(stdout,"lines %5d ",totlines); + } + if(cflag){ + fprintf(stdout,"characters %5d ",totchars); + } + if(wflag){ + fprintf(stdout,"words %5d ",totwords); + } + fprintf(stdout,"\n"); + return(0); +} |