|
|
1.1 root 1: #include "lexlib.h"
2: #include "lextype.h"
3:
4: char yytext[YYTSIZE];
5: struct ll_queue ll_tq;
6: int *ll_ctxt = yy_lextab;
7: int ll_cc;
8: int ll_lc = '\n';
9: int ll_tf;
10: int ll_lf;
11: int ll_tokn;
12: int ll_tlen;
13: int ll_more;
14: int yyscon;
15: int yyleng;
16: int yyline;
17:
18: char inpovf[] = "input buffer overflow";
19: char yytovf[] = "yytext overflow";
20:
21: _lltk()
22: {
23: ll_tlen = 0;
24: ll_tokn = MAXINT;
25: {
26: register int **clist, **nlist, **llist;
27: register int **tlist;
28: register c;
29:
30: clist = yy_clist;
31: nlist = yy_nlist;
32: llist = yy_llist;
33: loop:
34: ll_cc = 0;
35: *clist++ = ll_ctxt;
36: *clist-- = NULL;
37: do {
38: _llex(ll_cc, clist, nlist, llist);
39: tlist = nlist;
40: nlist = clist;
41: clist = tlist;
42: *nlist = NULL;
43: if (*llist != NULL) {
44: c = ll_cc;
45: do {
46: _llex(c, llist, nlist, llist);
47: tlist = nlist;
48: nlist = llist;
49: llist = tlist;
50: *nlist = NULL;
51: ++c;
52: } while (*llist != NULL);
53: }
54: ++ll_cc;
55: } while (*clist != NULL);
56: ll_tf = 0;
57: if (ll_tokn == MAXINT) {
58: if ((c=(qct(ll_tq)?qgt(ll_tq):_llic())) == EOF) {
59: ll_lc = '\n';
60: return (0);
61: }
62: ll_lc = c;
63: _lloc(c);
64: goto loop;
65: }
66: }
67: {
68: register char *pc;
69: register i;
70:
71: pc = yytext;
72: if (ll_more) {
73: pc += yyleng;
74: ll_more = 0;
75: } else {
76: yyleng = 0;
77: }
78: i = ll_tlen;
79: if ((yyleng += i) > sizeof(yytext))
80: error(yytovf);
81: while (i--)
82: *pc++ = qgt(ll_tq);
83: *pc = '\0';
84: if (pc-- > yytext)
85: ll_lc = *pc;
86: }
87: return (ll_tokn);
88: }
89:
90: _llex(n, clist, nlist, llist)
91: int **clist, **nlist, **llist;
92: {
93: register int **listp, *statep;
94: register int c;
95: register int **clistp;
96:
97: c = MAXUCHAR + 1;
98: clistp = clist;
99: while ((statep=*clistp++) != NULL) {
100: switch (*statep & LR_MASK) {
101: _list:
102: while (*listp != statep)
103: if (*listp++ == NULL) {
104: *listp-- = NULL;
105: *listp = statep;
106: break;
107: }
108: break;
109: _look:
110: --clistp;
111: if (qct(ll_tq) <= n)
112: if (n >= QSIZE)
113: error(inpovf);
114: else
115: qpt(ll_tq, c=_llic());
116: else
117: c = qlk(ll_tq, n);
118: break;
119: case LX_STOP:
120: break;
121: case LX_LINK:
122: ++statep;
123: listp = clist;
124: while (*listp != statep)
125: if (*listp++ == NULL) {
126: *listp-- = NULL;
127: *listp = statep;
128: break;
129: }
130: --statep;
131: case LX_JUMP:
132: statep += *statep >> LR_SHFT;
133: listp = clist;
134: goto _list;
135: case LX_LOOK:
136: ++statep;
137: listp = llist;
138: goto _list;
139: case LX_ACPT:
140: if ((*statep>>LR_SHFT)<ll_tokn || ll_cc>ll_tlen)
141: if (ll_tf == 0
142: || ll_cc < ll_lf
143: || ll_tf > *statep
144: ){
145: ll_tokn = (*statep>>LR_SHFT);
146: ll_tlen = ll_cc;
147: }
148: break;
149: case LX_CHAR:
150: if (c > MAXUCHAR)
151: goto _look;
152: if (c == (*statep++>>LR_SHFT)) {
153: listp = nlist;
154: goto _list;
155: }
156: break;
157: case LX_CLAS:
158: if (c > MAXUCHAR)
159: goto _look;
160: if (c & ~MAXUCHAR)
161: break;
162: if (yy_lxctab[(*statep>>LR_SHFT)*((MAXUCHAR+1)/NBINT)
163: +(c/NBINT)] & yy_lxbtab[c&((1<<LOGINT)-1)]) {
164: ++statep;
165: listp = nlist;
166: goto _list;
167: }
168: break;
169: case LX_BLIN:
170: if (ll_lc == '\n') {
171: ++statep;
172: listp = clist;
173: goto _list;
174: }
175: break;
176: case LX_ELIN:
177: if (c > MAXUCHAR)
178: goto _look;
179: if (c=='\n' || c==EOF) {
180: ++statep;
181: listp = clist;
182: goto _list;
183: }
184: break;
185: case LX_ANYC:
186: if (c > MAXUCHAR)
187: goto _look;
188: if (c!='\n' && c!=EOF) {
189: ++statep;
190: listp = nlist;
191: goto _list;
192: }
193: break;
194: case LX_SCON:
195: if (yyscon == (*statep++>>LR_SHFT)) {
196: listp = clist;
197: goto _list;
198: }
199: break;
200: }
201: }
202: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.