📄 wc.lex
字号:
%{/* * 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);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -