ape-06.l
来自「編譯器的相關東西原始碼」· L 代码 · 共 72 行
L
72 行
%{unsigned verbose;unsigned fname;char *progName;int myinput(char *buf, int max);#undef YY_INPUT#define YY_INPUT(buf,result,max) (result = myinput(buf,max))%}%s FNAME%%[ ]+ /* ignore blanks */ ;<FNAME>[ ]+ /* ignore blanks */ ;-h |"-?" |-help { printf("usage is: %s [-help | -h | -? ] [-verbose | -v]" " [(-file| -f) filename]\n", progName); }-v |-verbose { printf("verbose mode is on\n"); verbose = 1; }-f |-file { BEGIN FNAME; fname = 1; }<FNAME>[^ ]+ { printf("use file %s\n", yytext); BEGIN 0; fname = 2;}[^ ]+ ECHO;%%char **targv; /* remembers arguments */char **arglim; /* end of arguments */main(int argc, char **argv){ progName = *argv; targv = argv+1; arglim = argv+argc; yylex(); if(fname < 2) printf("No filename given\n");}static unsigned offset = 0;/* provide a chunk of stuff to flex *//* it handles unput itself, so we pass in an argument at a time */intmyinput(char *buf, int max){ int len, copylen; if (targv >= arglim) return 0; /* EOF */ len = strlen(*targv)-offset; /* amount of current arg */ if(len >= max) copylen = max-1; else copylen = len; if(len > 0) memcpy(buf, targv[0]+offset, copylen); if(targv[0][offset+copylen] == '\0') { /* end of arg */ buf[copylen] = ' '; copylen++; offset = 0; targv++; } return copylen;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?