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