|
|
1.1 ! root 1: %k 100 ! 2: %a 1000 ! 3: %o 1000 ! 4: %n 300 ! 5: %e 500 ! 6: %p 3000 ! 7: %{ ! 8: char *filename="-"; ! 9: int pflag=0; ! 10: int lflag=0; ! 11: int level=0; ! 12: ! 13: main(argc,argv) ! 14: int argc; ! 15: char *argv[]; ! 16: { ! 17: register int rc=0; ! 18: if(argc<=1) { ! 19: yylex(); ! 20: }else{ ! 21: while(argc>1) { ! 22: if(strcmp(argv[1],"-p")==0) { ! 23: pflag++; ! 24: }else if(strcmp(argv[1],"-l")==0) { ! 25: lflag++; ! 26: }else if(freopen(argv[1],"r",stdin)==NULL) { ! 27: fprintf(stderr,"xref: %s: cannot open\n", argv[1]); ! 28: rc++; ! 29: }else{ ! 30: filename=argv[1]; ! 31: yylineno=1; ! 32: yylex(); ! 33: } ! 34: argc--; argv++; ! 35: } ! 36: } ! 37: return(rc); ! 38: } ! 39: fndef() ! 40: { ! 41: /* fn defs */ ! 42: register char *p = &yytext[yyleng]; ! 43: *--p=0; /* remove ) */ ! 44: while(*--p!='('); ! 45: while(*p==' ' || *p=='\t') { ! 46: p--; ! 47: if(p<yytext) break; ! 48: } ! 49: while(*p!=' ' && *p!='\t') { ! 50: p--; ! 51: if(p<yytext) break; ! 52: } ! 53: p++; ! 54: printf("%s", p); ! 55: if(p!=yytext) { ! 56: *--p=0; ! 57: printf("/%s", yytext); ! 58: } ! 59: printf(":%s:+%d\n", filename, yylineno-1); ! 60: } ! 61: %} ! 62: %% ! 63: "/*" { ! 64: /* comments */ ! 65: char c; ! 66: while(c=yyinput()) ! 67: if(c=='*' && yyinput()=='/') ! 68: break; ! 69: } ! 70: "\"" { ! 71: /* strings */ ! 72: char c; ! 73: while(c=yyinput()) ! 74: if(c=='"') ! 75: break; ! 76: else if(c=='\\') yyinput(); ! 77: } ! 78: "{" { ! 79: /* brace */ ! 80: if(lflag) level++; ! 81: } ! 82: "}" { ! 83: if(lflag) level--; ! 84: } ! 85: ^[a-zA-Z_][a-zA-Z0-9 \t_]*"("[a-zA-Z0-9, ]*")"\n { ! 86: fndef(); ! 87: } ! 88: if[ \t]*"(" ; ! 89: return[ \t]*"(" ; ! 90: while[ \t]*"(" ; ! 91: for[ \t]*"(" ; ! 92: switch[ \t]*"(" ; ! 93: break ; ! 94: extern ; ! 95: short ; ! 96: ifdef ; ! 97: endif ; ! 98: long ; ! 99: return ; ! 100: register ; ! 101: include ; ! 102: define ; ! 103: continue ; ! 104: int ; ! 105: char ; ! 106: float ; ! 107: static ; ! 108: auto ; ! 109: unsigned ; ! 110: double ; ! 111: else ; ! 112: do ; ! 113: default ; ! 114: struct ; ! 115: union ; ! 116: [a-zA-Z_][a-zA-Z0-9_]*[ \t]*"(" { ! 117: /* fn calls */ ! 118: if(level==0) ! 119: printf("%s):%s:%d\n", yytext, filename, yylineno); ! 120: } ! 121: [a-zA-Z_][a-zA-Z0-9_]* { ! 122: /* id references */ ! 123: if(pflag==0 && level==0) ! 124: printf("%s:%s:%d\n", yytext, filename, yylineno); ! 125: } ! 126: . ; ! 127: \n ;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.