|
|
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.