typedef unsigned char Uchar;
# include <u.h>
# include <libc.h>
# include <stdio.h>
# 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 <bio.h>
#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);
}
|