typedef unsigned char Uchar; # include # include # include # define U(x) x # define NLSTATE yyprevious=YYNEWLINE # define BEGIN yybgin = yysvec + 1 + # define INITIAL 0 # define YYLERR yysvec # define YYSTATE (yyestate-yysvec-1) # define YYOPTIM 1 # define YYLMAX 200 # define unput(c) {yytchar= (c);if(yytchar=='\n')yylineno--;*yysptr++=yytchar;} # define yymore() (yymorfg=1) # define ECHO fprintf(yyout, "%s",yytext) # define REJECT { nstr = yyreject(); goto yyfussy;} int yyleng; extern char yytext[]; int yymorfg; extern Uchar *yysptr, yysbuf[]; int yytchar; FILE *yyin = {stdin}, *yyout = {stdout}; extern int yylineno; struct yysvf { struct yywork *yystoff; struct yysvf *yyother; int *yystops;}; struct yysvf *yyestate; extern struct yysvf yysvec[], *yybgin; int yylook(void), yywrap(void), yyback(int *, int); int infd, outfd; void output(char c) { int rv; if ((rv = write(outfd, &c, 1)) < 0) sysfatal("output: %r"); if (rv == 0) sysfatal("output: EOF?"); } int input(void) { if(yysptr > yysbuf) yytchar = U(*--yysptr); else { int rv; if ((rv = read(infd, &yytchar, 1)) < 0) sysfatal("input: %r"); if (rv == 0) return 0; } if (yytchar == '\n') yylineno++; return yytchar; } /* xid.l - extract identifiers from c source Steve Simon 2005 */ #include #undef YYLMAX #define YYLMAX (1024 * 16) #define FUNC_CALL 1 #define FUNC_DEF 2 struct { /* last function name found */ int line; int fnum; int brace; char *name; } func; int nolvars = 0; /* don't extract info from variables */ int nocomments = 0; /* don't extract info from comments */ Biobuf *symb; /* symbols index */ Biobuf *file; /* filenames index */ int fnum = 0; /* file "number" */ int incomment = 0; /* inside a comment */ int line = 0; /* current line number */ int brace = 0; /* nesting level of braces */ int gotid = 0; /* have a buffered identifier */ char *infile = "stdin"; /* current file name */ char *prefix = NULL; /* prefix to remove from filenames */ int yywrap(void); void vardef(void); void varuse(void); void charconst(void); void keepfun(void); void outfun(int); void outdef(void); void getstring(void); void getcomment(void); void xid(Biobuf *); #define YYNEWLINE 10 yylex(void){ int nstr; extern int yyprevious; while((nstr = yylook()) >= 0) yyfussy: switch(nstr){ case 0: if(yywrap()) return(0); break; case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20: case 21: case 22: case 23: case 24: case 25: case 26: case 27: case 28: case 29: case 30: case 31: case 32: case 33: case 34: case 35: case 36: case 37: case 38: case 39: case 40: case 41: { ; } break; case 42: { getstring(); } break; case 43: { line++; } break; case 44: { keepfun(); } break; case 45: { outfun(';'); } break; case 46: { outfun('{'); brace++; } break; case 47: { brace--; } break; case 48: { getcomment(); } break; case 49: ; break; case 50: ; break; case 51: { outdef(); } break; case 52: { vardef(); } break; case 53: { varuse(); } break; case 54: case 55: case 56: { charconst(); } break; case 57: ; break; case -1: break; default: fprintf(yyout,"bad switch yylook %d",nstr); } return(0); } /* end of yylex */ int yywrap(void) { return(1); } void vardef(void) /* variable definition */ { if (brace == 0) Bprint(symb, "g %d %d %s\n", fnum, line, yytext); else Bprint(symb, "l %d %d %s\n", fnum, line, yytext); } void varuse(void) /* variable use */ { if (!nolvars) Bprint(symb, "v %d %d %s\n", fnum, line, yytext); } void charconst(void) /* character constant */ { Bprint(symb, "c %d %d %s\n", fnum, line, yytext); } void keepfun(void) /* rembember function, definition or call */ { int i; if ((i = strlen(yytext)) > 1) /* trim bracket */ yytext[i -1] = 0; func.fnum = fnum; func.line = line; func.brace = brace; if (func.name) free(func.name); func.name = strdup(yytext); if (func.name == nil) sysfatal("no memory\n"); } void outfun(int c) /* function call definition, or prototype */ { if (func.line == 0) return; if (brace) Bprint(symb, "f %d %d %s\n", func.fnum, func.line, func.name); else if (c == '{') Bprint(symb, "F %d %d %s\n", func.fnum, func.line, func.name); else Bprint(symb, "P %d %d %s\n", func.fnum, func.line, func.name); func.line = 0; } void outdef(void) /* #define */ { int i; char *p; /* trim op to last first whitespace */ if ((i = strlen(yytext)) > 1) { for (p = &yytext[i -1]; *p != ' ' && *p != '\t' && *p; p--) continue; p++; Bprint(symb, "d %d %d %s\n", fnum, line, p); } } void getstring(void) { char c; int p = 0; Bprint(symb, "s %d %d ", fnum, line); while (1) { switch (c = input()) { case '\n': line++; case '\r': case '\b': case '\f': case '\t': case ' ' : if (p == 0) continue; c = ' '; break; case 0: fprint(2, "%s:%d EOF in string\n", infile, line); goto fini; case '"': if (p != '\\') goto fini; break; default: break; } if (p != ' ' || c != ' ') Bputc(symb, c); if (p == '\\' && c == '\\') /* kludge around the string \\" */ p = '#'; else p = c; } fini: Bputc(symb, '\n'); } void getcomment(void) { char c, p = 0; Bprint(symb, "x %d %d ", fnum, line); while (1) { switch (c = input()) { case '\n': line++; case '\r': case '\b': case '\f': case '\t': case ' ' : if (p == 0) continue; c = ' '; break; case 0: fprint(2, "%s:%d EOF in comment\n", infile, line); goto fini; case '*': p = c; continue; case '/': if (p == '*') goto fini; break; default: break; } if (p == '*') /* catchup delayed '*' */ Bputc(symb, p); if (!(p == ' ' && c == ' ')) /* colapse multiple spaces into one */ Bputc(symb, c); p = c; } fini: Bputc(symb, '\n'); } void xid(Biobuf *bi) { int l; char *p, *buf; l = (prefix)? strlen(prefix): 0; while ((buf = Brdline(bi, '\n')) != NULL) { buf[Blinelen(bi)-1] = 0; if ((p = strchr(buf, '\n')) != NULL) *p = 0; if ((infd = open(buf, OREAD)) == -1) { fprint(2, "%s can't open\n", buf); continue; } if (prefix && strncmp(buf, prefix, l) == 0) Bprint(file, "%d %s\n", ++fnum, buf+l); else Bprint(file, "%d %s\n", ++fnum, buf); infile = buf; line = 1; incomment = 0; brace = 0; yylex(); close(infd); } } void usage(void) { fprint(2, "usage: %s [-vc] [-p path] [index-base]\n", argv0); exits("usage"); } void main(int argc, char *argv[]) { Biobuf bin; char *fi, *sy; ARGBEGIN { case 'c': nocomments = 1; break; case 'v': nolvars = 1; break; case 'p': prefix = EARGF(usage()); break; default: usage(); }ARGEND; if (argc > 1) usage(); if (argc == 0) { fi = "files.idx"; sy = "symbs.idx"; } else { fi = smprint("%s/files.idx", argv[0]); sy = smprint("%s/symbs.idx", argv[0]); } if (fi == nil || sy == nil) sysfatal("no memory"); if ((file = Bopen(fi, OWRITE)) == NULL) sysfatal("%s can't open for writing", fi); if ((symb = Bopen(sy, OWRITE)) == NULL) sysfatal("%s can't open for writing", sy); Binit(&bin, 0, OREAD); xid(&bin); Bterm(symb); Bterm(file); exits(0); } int yyvstop[] = { 0, 57, 0, 43, 0, 42, 57, 0, 57, 0, 57, 0, 45, 57, 0, 53, 57, 0, 53, 57, 0, 53, 57, 0, 53, 57, 0, 53, 57, 0, 53, 57, 0, 53, 57, 0, 53, 57, 0, 53, 57, 0, 53, 57, 0, 53, 57, 0, 53, 57, 0, 53, 57, 0, 53, 57, 0, 53, 57, 0, 53, 57, 0, 46, 57, 0, 47, 57, 0, 57, 0, 48, 0, 44, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 28, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 54, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 25, 44, 0, 53, 0, 53, 0, 53, 0, 4, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 56, 0, 55, 0, 52, 0, 13, 53, 0, 53, 0, 31, 53, 0, 5, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 26, 53, 0, 53, 0, 53, 0, 34, 53, 0, 53, 0, 53, 0, 27, 44, 0, 18, 53, 0, 53, 0, 53, 0, 53, 0, 10, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 3, 53, 0, 53, 0, 53, 0, 23, 53, 0, 1, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 41, 53, 0, 33, 53, 0, 53, 0, 6, 53, 0, 37, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 11, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 36, 53, 0, 9, 53, 0, 53, 0, 53, 0, 53, 0, -49, 0, 53, 0, 53, 0, 35, 53, 0, 7, 53, 0, 14, 53, 0, 38, 53, 0, 53, 0, 53, 0, 20, 53, 0, 21, 53, 0, 17, 53, 0, 8, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 29, 44, 0, 49, 0, 55, 0, 53, 0, 32, 53, 0, 53, 0, 39, 53, 0, 53, 0, 19, 44, 0, 22, 44, 0, 30, 44, 0, 16, 53, 0, 53, 0, 53, 0, 24, 53, 0, 40, 44, 0, 15, 53, 0, 12, 53, 0, 2, 53, 0, -50, 0, 51, 0, 50, 0, 55, 0, 0}; # define YYTYPE Uchar struct yywork { YYTYPE verify, advance; } yycrank[] = { 0,0, 0,0, 1,3, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 1,3, 1,4, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 1,5, 0,0, 0,0, 0,0, 0,0, 1,6, 28,63, 64,106, 7,30, 65,107, 1,3, 0,0, 80,125, 1,7, 1,3, 82,82, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 1,8, 0,0, 0,0, 0,0, 0,0, 2,27, 1,9, 0,0, 0,0, 27,59, 80,125, 0,0, 0,0, 82,82, 0,0, 0,0, 0,0, 2,7, 80,126, 0,0, 0,0, 82,83, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 2,8, 0,0, 0,0, 27,59, 1,3, 0,0, 0,0, 0,0, 0,0, 1,10, 1,11, 1,12, 1,13, 1,14, 1,15, 1,16, 19,50, 1,17, 24,58, 35,68, 1,18, 15,44, 1,9, 22,56, 15,45, 16,46, 1,19, 1,20, 1,21, 1,22, 1,23, 1,24, 10,34, 2,3, 11,35, 1,25, 18,49, 1,26, 2,10, 6,28, 2,12, 2,13, 2,14, 2,15, 2,16, 17,47, 2,17, 6,28, 6,28, 2,18, 21,55, 2,9, 13,39, 17,48, 12,36, 2,19, 2,20, 2,21, 2,22, 2,23, 2,24, 12,37, 13,40, 14,41, 2,25, 14,42, 2,26, 23,57, 12,38, 34,67, 36,69, 27,60, 6,28, 20,51, 20,52, 14,43, 27,61, 6,0, 37,70, 27,62, 38,71, 9,31, 6,28, 39,72, 40,73, 20,53, 6,28, 41,74, 20,54, 42,75, 43,78, 44,79, 45,80, 46,81, 48,86, 49,88, 50,89, 51,91, 52,92, 53,93, 54,95, 55,96, 56,97, 6,28, 9,31, 42,76, 42,77, 56,98, 58,102, 50,90, 57,100, 48,87, 9,32, 57,101, 60,103, 61,104, 53,94, 56,99, 62,105, 67,110, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 6,29, 68,111, 69,112, 70,113, 71,114, 71,115, 6,28, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 73,118, 74,119, 75,120, 76,121, 9,33, 77,122, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 9,33, 29,64, 72,116, 78,123, 79,124, 81,127, 29,64, 84,128, 85,129, 86,130, 72,117, 88,131, 89,132, 90,133, 91,134, 29,65, 29,65, 29,65, 29,65, 29,65, 29,65, 29,65, 29,65, 29,65, 29,65, 92,135, 93,136, 94,137, 95,138, 31,31, 96,139, 97,140, 98,141, 99,142, 100,143, 101,144, 102,145, 103,146, 104,147, 105,148, 107,149, 111,150, 114,151, 115,152, 116,153, 117,154, 118,155, 120,156, 121,157, 123,158, 124,159, 125,125, 31,31, 47,82, 128,160, 129,161, 130,162, 132,163, 133,164, 29,64, 31,32, 134,165, 135,166, 136,167, 137,168, 29,64, 138,169, 139,170, 140,171, 29,64, 141,172, 142,173, 144,174, 145,175, 125,125, 29,64, 47,82, 29,64, 146,176, 147,177, 148,178, 29,64, 125,126, 29,64, 47,83, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 152,180, 153,181, 154,182, 155,183, 31,66, 158,184, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 31,66, 66,108, 47,84, 108,108, 161,185, 162,186, 163,187, 164,188, 166,189, 167,190, 168,191, 169,192, 47,85, 149,179, 149,179, 149,179, 149,179, 149,179, 149,179, 149,179, 149,179, 149,179, 149,179, 170,193, 66,108, 173,194, 108,108, 174,195, 176,198, 177,199, 179,201, 180,202, 181,203, 182,204, 186,205, 187,206, 66,109, 193,213, 108,109, 194,214, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 195,215, 66,109, 198,216, 108,109, 199,217, 201,218, 202,219, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 206,222, 214,223, 215,224, 217,226, 66,66, 227,230, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 66,66, 175,196, 178,178, 188,207, 216,225, 189,209, 192,211, 196,196, 204,220, 0,0, 178,178, 178,200, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 207,207, 209,209, 211,211, 0,0, 0,0, 175,196, 0,0, 188,207, 216,225, 189,209, 192,211, 196,196, 204,220, 175,197, 0,0, 188,208, 178,178, 189,210, 192,212, 196,197, 204,221, 178,178, 220,220, 207,207, 209,209, 211,211, 178,178, 225,225, 0,0, 0,0, 178,178, 207,208, 209,210, 211,212, 218,227, 218,227, 218,227, 218,227, 218,227, 218,227, 218,227, 218,227, 218,227, 218,227, 0,0, 220,220, 0,0, 178,178, 0,0, 0,0, 225,225, 0,0, 0,0, 220,221, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 178,178, 0,0, 0,0, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 0,0, 0,0, 0,0, 0,0, 225,228, 0,0, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 225,228, 226,226, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 226,226, 226,229, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 226,226, 0,0, 0,0, 0,0, 0,0, 226,226, 0,0, 0,0, 0,0, 0,0, 226,226, 0,0, 0,0, 0,0, 226,226, 0,0, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 0,0, 0,0, 0,0, 0,0, 0,0, 226,226, 0,0, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 0,0, 0,0, 0,0, 0,0, 228,228, 226,226, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 228,228, 0,0, 0,0}; struct yysvf yysvec[] = { 0, 0, 0, yycrank+-1, 0, 0, yycrank+-30, yysvec+1, 0, yycrank+0, 0, yyvstop+1, yycrank+0, 0, yyvstop+3, yycrank+0, 0, yyvstop+5, yycrank+-127, 0, yyvstop+8, yycrank+1, 0, yyvstop+10, yycrank+0, 0, yyvstop+12, yycrank+161, 0, yyvstop+15, yycrank+4, yysvec+9, yyvstop+18, yycrank+9, yysvec+9, yyvstop+21, yycrank+46, yysvec+9, yyvstop+24, yycrank+40, yysvec+9, yyvstop+27, yycrank+44, yysvec+9, yyvstop+30, yycrank+2, yysvec+9, yyvstop+33, yycrank+3, yysvec+9, yyvstop+36, yycrank+32, yysvec+9, yyvstop+39, yycrank+14, yysvec+9, yyvstop+42, yycrank+4, yysvec+9, yyvstop+45, yycrank+58, yysvec+9, yyvstop+48, yycrank+18, yysvec+9, yyvstop+51, yycrank+2, yysvec+9, yyvstop+54, yycrank+45, yysvec+9, yyvstop+57, yycrank+3, yysvec+9, yyvstop+60, yycrank+0, 0, yyvstop+63, yycrank+0, 0, yyvstop+66, yycrank+60, 0, yyvstop+69, yycrank+2, 0, 0, yycrank+250, 0, 0, yycrank+0, 0, yyvstop+71, yycrank+303, 0, 0, yycrank+0, 0, yyvstop+73, yycrank+0, yysvec+9, yyvstop+75, yycrank+42, yysvec+9, yyvstop+77, yycrank+7, yysvec+9, yyvstop+79, yycrank+44, yysvec+9, yyvstop+81, yycrank+70, yysvec+9, yyvstop+83, yycrank+59, yysvec+9, yyvstop+85, yycrank+70, yysvec+9, yyvstop+87, yycrank+56, yysvec+9, yyvstop+89, yycrank+61, yysvec+9, yyvstop+92, yycrank+78, yysvec+9, yyvstop+94, yycrank+63, yysvec+9, yyvstop+96, yycrank+69, yysvec+9, yyvstop+98, yycrank+67, yysvec+9, yyvstop+100, yycrank+66, yysvec+9, yyvstop+102, yycrank+327, yysvec+9, yyvstop+104, yycrank+84, yysvec+9, yyvstop+106, yycrank+74, yysvec+9, yyvstop+108, yycrank+82, yysvec+9, yyvstop+110, yycrank+75, yysvec+9, yyvstop+112, yycrank+65, yysvec+9, yyvstop+114, yycrank+91, yysvec+9, yyvstop+116, yycrank+84, yysvec+9, yyvstop+118, yycrank+78, yysvec+9, yyvstop+120, yycrank+91, yysvec+9, yyvstop+122, yycrank+94, yysvec+9, yyvstop+124, yycrank+92, yysvec+9, yyvstop+126, yycrank+0, yysvec+27, 0, yycrank+102, 0, 0, yycrank+94, 0, 0, yycrank+102, 0, 0, yycrank+0, 0, yyvstop+128, yycrank+3, 0, 0, yycrank+5, 0, 0, yycrank+417, 0, 0, yycrank+97, yysvec+9, yyvstop+130, yycrank+123, yysvec+9, yyvstop+132, yycrank+120, yysvec+9, yyvstop+134, yycrank+108, yysvec+9, yyvstop+136, yycrank+108, yysvec+9, yyvstop+138, yycrank+188, yysvec+9, yyvstop+140, yycrank+154, yysvec+9, yyvstop+142, yycrank+152, yysvec+9, yyvstop+144, yycrank+149, yysvec+9, yyvstop+146, yycrank+141, yysvec+9, yyvstop+148, yycrank+148, yysvec+9, yyvstop+150, yycrank+185, yysvec+9, yyvstop+152, yycrank+190, yysvec+9, yyvstop+154, yycrank+38, yysvec+9, yyvstop+156, yycrank+177, yysvec+9, yyvstop+158, yycrank+41, yysvec+31, 0, yycrank+0, 0, yyvstop+160, yycrank+189, yysvec+9, yyvstop+163, yycrank+191, yysvec+9, yyvstop+165, yycrank+184, yysvec+9, yyvstop+167, yycrank+0, yysvec+9, yyvstop+169, yycrank+191, yysvec+9, yyvstop+172, yycrank+190, yysvec+9, yyvstop+174, yycrank+179, yysvec+9, yyvstop+176, yycrank+183, yysvec+9, yyvstop+178, yycrank+207, yysvec+9, yyvstop+180, yycrank+193, yysvec+9, yyvstop+182, yycrank+193, yysvec+9, yyvstop+184, yycrank+195, yysvec+9, yyvstop+186, yycrank+212, yysvec+9, yyvstop+188, yycrank+213, yysvec+9, yyvstop+190, yycrank+204, yysvec+9, yyvstop+192, yycrank+211, yysvec+9, yyvstop+194, yycrank+217, yysvec+9, yyvstop+196, yycrank+221, yysvec+9, yyvstop+198, yycrank+211, yysvec+9, yyvstop+200, yycrank+218, 0, 0, yycrank+222, 0, 0, yycrank+212, 0, 0, yycrank+0, 0, yyvstop+202, yycrank+231, 0, yyvstop+204, yycrank+419, 0, 0, yycrank+0, 0, yyvstop+206, yycrank+0, yysvec+9, yyvstop+208, yycrank+217, yysvec+9, yyvstop+211, yycrank+0, yysvec+9, yyvstop+213, yycrank+0, yysvec+9, yyvstop+216, yycrank+209, yysvec+9, yyvstop+219, yycrank+221, yysvec+9, yyvstop+221, yycrank+210, yysvec+9, yyvstop+223, yycrank+218, yysvec+9, yyvstop+225, yycrank+221, yysvec+9, yyvstop+227, yycrank+0, yysvec+9, yyvstop+229, yycrank+228, yysvec+9, yyvstop+232, yycrank+210, yysvec+9, yyvstop+234, yycrank+0, yysvec+9, yyvstop+236, yycrank+218, yysvec+9, yyvstop+239, yycrank+217, yysvec+9, yyvstop+241, yycrank+325, yysvec+31, 0, yycrank+0, 0, yyvstop+243, yycrank+0, yysvec+9, yyvstop+246, yycrank+235, yysvec+9, yyvstop+249, yycrank+237, yysvec+9, yyvstop+251, yycrank+222, yysvec+9, yyvstop+253, yycrank+0, yysvec+9, yyvstop+255, yycrank+225, yysvec+9, yyvstop+258, yycrank+227, yysvec+9, yyvstop+260, yycrank+228, yysvec+9, yyvstop+262, yycrank+234, yysvec+9, yyvstop+264, yycrank+241, yysvec+9, yyvstop+266, yycrank+248, yysvec+9, yyvstop+268, yycrank+250, yysvec+9, yyvstop+270, yycrank+250, yysvec+9, yyvstop+272, yycrank+249, yysvec+9, yyvstop+274, yycrank+243, yysvec+9, yyvstop+276, yycrank+251, yysvec+9, yyvstop+278, yycrank+0, yysvec+9, yyvstop+280, yycrank+239, yysvec+9, yyvstop+283, yycrank+255, yysvec+9, yyvstop+285, yycrank+256, 0, 0, yycrank+254, 0, 0, yycrank+262, 0, 0, yycrank+390, 0, 0, yycrank+0, yysvec+9, yyvstop+287, yycrank+0, yysvec+9, yyvstop+290, yycrank+284, yysvec+9, yyvstop+293, yycrank+287, yysvec+9, yyvstop+295, yycrank+295, yysvec+9, yyvstop+297, yycrank+296, yysvec+9, yyvstop+299, yycrank+0, yysvec+9, yyvstop+301, yycrank+0, yysvec+9, yyvstop+304, yycrank+289, yysvec+9, yyvstop+307, yycrank+0, yysvec+9, yyvstop+309, yycrank+0, yysvec+9, yyvstop+312, yycrank+327, yysvec+9, yyvstop+315, yycrank+330, yysvec+9, yyvstop+317, yycrank+315, yysvec+9, yyvstop+319, yycrank+322, yysvec+9, yyvstop+321, yycrank+0, yysvec+9, yyvstop+323, yycrank+331, yysvec+9, yyvstop+326, yycrank+335, yysvec+9, yyvstop+328, yycrank+319, yysvec+9, yyvstop+330, yycrank+332, yysvec+9, yyvstop+332, yycrank+347, yysvec+9, yyvstop+334, yycrank+0, yysvec+9, yyvstop+336, yycrank+0, yysvec+9, yyvstop+339, yycrank+340, yysvec+9, yyvstop+342, yycrank+347, yysvec+9, yyvstop+344, yycrank+531, yysvec+9, yyvstop+346, yycrank+343, 0, 0, yycrank+337, 0, 0, yycrank+-540, 0, yyvstop+348, yycrank+416, 0, 0, yycrank+339, yysvec+9, yyvstop+350, yycrank+341, yysvec+9, yyvstop+352, yycrank+358, yysvec+9, yyvstop+354, yycrank+0, yysvec+9, yyvstop+357, yycrank+0, yysvec+9, yyvstop+360, yycrank+0, yysvec+9, yyvstop+363, yycrank+358, yysvec+9, yyvstop+366, yycrank+359, yysvec+9, yyvstop+368, yycrank+533, yysvec+9, yyvstop+370, yycrank+535, yysvec+9, yyvstop+373, yycrank+0, yysvec+9, yyvstop+376, yycrank+0, yysvec+9, yyvstop+379, yycrank+536, yysvec+9, yyvstop+382, yycrank+360, yysvec+9, yyvstop+384, yycrank+363, yysvec+9, yyvstop+386, yycrank+367, yysvec+9, yyvstop+388, yycrank+537, yysvec+31, 0, yycrank+0, 0, yyvstop+390, yycrank+376, 0, 0, yycrank+379, 0, 0, yycrank+0, 0, yyvstop+393, yycrank+388, 0, yyvstop+395, yycrank+380, yysvec+9, yyvstop+397, yycrank+0, yysvec+9, yyvstop+399, yycrank+538, yysvec+9, yyvstop+402, yycrank+0, yysvec+9, yyvstop+404, yycrank+394, yysvec+9, yyvstop+407, yycrank+549, yysvec+31, 0, yycrank+0, 0, yyvstop+409, yycrank+550, yysvec+31, 0, yycrank+0, 0, yyvstop+412, yycrank+551, yysvec+31, 0, yycrank+0, 0, yyvstop+415, yycrank+0, yysvec+9, yyvstop+418, yycrank+409, yysvec+9, yyvstop+421, yycrank+409, yysvec+9, yyvstop+423, yycrank+534, 0, 0, yycrank+410, 0, 0, yycrank+544, 0, 0, yycrank+0, yysvec+9, yyvstop+425, yycrank+571, yysvec+31, 0, yycrank+0, 0, yyvstop+428, yycrank+0, yysvec+9, yyvstop+431, yycrank+0, yysvec+9, yyvstop+434, yycrank+0, yysvec+9, yyvstop+437, yycrank+576, 0, 0, yycrank+-698, 0, yyvstop+440, yycrank+474, 0, 0, yycrank+700, 0, yyvstop+442, yycrank+0, 0, yyvstop+444, yycrank+0, 0, yyvstop+446, 0, 0, 0}; struct yywork *yytop = yycrank+822; struct yysvf *yybgin = yysvec+1; Uchar yymatch[] = { 00 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,011 ,012 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 011 ,01 ,'"' ,01 ,01 ,01 ,01 ,047 , 01 ,01 ,01 ,01 ,',' ,01 ,01 ,01 , '0' ,'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,'0' , '0' ,'0' ,01 ,',' ,01 ,01 ,01 ,01 , 01 ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' , 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' , 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' , 'A' ,'A' ,'A' ,01 ,047 ,01 ,01 ,'A' , 01 ,'A' ,'b' ,'A' ,'A' ,'A' ,'b' ,'A' , 'A' ,'A' ,'A' ,'A' ,'b' ,'A' ,'b' ,'A' , 'A' ,'A' ,'b' ,'A' ,'b' ,'A' ,'A' ,'A' , 'A' ,'A' ,'A' ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 0}; Uchar yyextra[] = { 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,1,1,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0}; #pragma lib "libl.a" int yylineno =1; # define YYU(x) x char yytext[YYLMAX]; struct yysvf *yylstate [YYLMAX], **yylsp, **yyolsp; Uchar yysbuf[YYLMAX]; Uchar *yysptr = yysbuf; int *yyfnd; extern struct yysvf *yyestate; int yyprevious = YYNEWLINE; # ifdef LEXDEBUG extern void allprint(int); # endif yylook(void){ struct yysvf *yystate, **lsp; struct yywork *yyt; struct yysvf *yyz; int yych; struct yywork *yyr; # ifdef LEXDEBUG int debug; # endif Uchar *yylastch; /* start off machines */ # ifdef LEXDEBUG debug = 0; # endif if (!yymorfg) yylastch = (Uchar*)yytext; else { yymorfg=0; yylastch = (Uchar*)yytext+yyleng; } for(;;){ lsp = yylstate; yyestate = yystate = yybgin; if (yyprevious==YYNEWLINE) yystate++; for (;;){ # ifdef LEXDEBUG if(debug)fprintf(yyout,"state %d\n",yystate-yysvec-1); # endif yyt = yystate->yystoff; if(yyt == yycrank){ /* may not be any transitions */ yyz = yystate->yyother; if(yyz == 0)break; if(yyz->yystoff == yycrank)break; } *yylastch++ = yych = input(); tryagain: # ifdef LEXDEBUG if(debug){ fprintf(yyout,"char "); allprint(yych); putchar('\n'); } # endif yyr = yyt; if ( (int)yyt > (int)yycrank){ yyt = yyr + yych; if (yyt <= yytop && yyt->verify+yysvec == yystate){ if(yyt->advance+yysvec == YYLERR) /* error transitions */ {unput(*--yylastch);break;} *lsp++ = yystate = yyt->advance+yysvec; goto contin; } } # ifdef YYOPTIM else if((int)yyt < (int)yycrank) { /* r < yycrank */ yyt = yyr = yycrank+(yycrank-yyt); # ifdef LEXDEBUG if(debug)fprintf(yyout,"compressed state\n"); # endif yyt = yyt + yych; if(yyt <= yytop && yyt->verify+yysvec == yystate){ if(yyt->advance+yysvec == YYLERR) /* error transitions */ {unput(*--yylastch);break;} *lsp++ = yystate = yyt->advance+yysvec; goto contin; } yyt = yyr + YYU(yymatch[yych]); # ifdef LEXDEBUG if(debug){ fprintf(yyout,"try fall back character "); allprint(YYU(yymatch[yych])); putchar('\n'); } # endif if(yyt <= yytop && yyt->verify+yysvec == yystate){ if(yyt->advance+yysvec == YYLERR) /* error transition */ {unput(*--yylastch);break;} *lsp++ = yystate = yyt->advance+yysvec; goto contin; } } if ((yystate = yystate->yyother) && (yyt= yystate->yystoff) != yycrank){ # ifdef LEXDEBUG if(debug)fprintf(yyout,"fall back to state %d\n",yystate-yysvec-1); # endif goto tryagain; } # endif else {unput(*--yylastch);break;} contin: # ifdef LEXDEBUG if(debug){ fprintf(yyout,"state %d char ",yystate-yysvec-1); allprint(yych); putchar('\n'); } # endif ; } # ifdef LEXDEBUG if(debug){ fprintf(yyout,"stopped at %d with ",lsp>yylstate?*(lsp-1)-yysvec-1:0); allprint(yych); putchar('\n'); } # endif while (lsp-- > yylstate){ *yylastch-- = 0; if (*lsp != 0 && (yyfnd= (*lsp)->yystops) && *yyfnd > 0){ yyolsp = lsp; if(yyextra[*yyfnd]){ /* must backup */ while(yyback((*lsp)->yystops,-*yyfnd) != 1 && lsp > yylstate){ lsp--; unput(*yylastch--); } } yyprevious = YYU(*yylastch); yylsp = lsp; yyleng = yylastch-(Uchar*)yytext+1; yytext[yyleng] = 0; # ifdef LEXDEBUG if(debug){ fprintf(yyout,"\nmatch '%s'", yytext); fprintf(yyout," action %d\n",*yyfnd); } # endif return(*yyfnd++); } unput(*yylastch); } if (yytext[0] == 0 /* && feof(yyin) */) { yysptr=yysbuf; return(0); } yyprevious = input(); yytext[0] = yyprevious; if (yyprevious>0) output(yyprevious); yylastch = (Uchar*)yytext; # ifdef LEXDEBUG if(debug)putchar('\n'); # endif } } yyback(int *p, int m) { if (p==0) return(0); while (*p) { if (*p++ == m) return(1); } return(0); } /* the following are only used in the lex library */ yyinput(void){ return(input()); } void yyoutput(int c) { output(c); } void yyunput(int c) { unput(c); }