Annotation of 43BSD/ingres/source/parser/s_yylex.c, revision 1.1.1.1

1.1       root        1: # include      <ingres.h>
                      2: # include      "scanner.h"
                      3: # include      <sccs.h>
                      4: # include      <errors.h>
                      5: 
                      6: SCCSID(@(#)s_yylex.c   8.2     2/8/85)
                      7: 
                      8: struct special Tokens;                 /* special tokens table */
                      9: struct optab   Optab[];                /* operator table */
                     10: struct optab   Keyword[];              /* keyword table */
                     11: struct lastok  Lastok;
                     12: int            Opcode;                 /* opcode for current token */
                     13: int            Lcase;                  /* UPPER->lower conversion flag */
                     14: int            Pars;                   /* flag for call to getcvar or not */
                     15: int            Newline;                /* set if last char read was a newline */
                     16: int            Cflag;                  /* set if line of C-code recognized */
                     17: int            Keyent;                 /* number of entries in the Keyword table */
                     18: 
                     19: char           Sbuf[SBUFSIZ];          /* symbol table buffer */
                     20: 
                     21: /*
                     22: ** YYLEX
                     23: ** This is the control program for the scanner (lexical analyzer).
                     24: ** Each call to yylex() returns a token for the next syntactic unit.
                     25: ** If the object is of type I2CONST, I4CONST, F8CONST, SCONST or NAME, that
                     26: ** object will also be entered in the symbol table, indexed by 'yylval'.
                     27: ** If the object is not one of these types, yylval is the opcode field of
                     28: ** the operator or keyword tables.
                     29: ** The end-of-file token is zero.
                     30: */
                     31: yylex()
                     32: {
                     33:        register char   chr;
                     34:        register int    rtval;
                     35:        extern char     Cmap[];
                     36: 
                     37:        rtval = -1;
                     38:        Lastok.tokop = 0;
                     39:        /* GET NEXT TOKEN */
                     40:        do
                     41:        {
                     42:                if((chr = get_scan(NORMAL)) <= 0)
                     43:                {
                     44: #                      ifdef   xSTR2
                     45:                        tTfp(72, 8, "end-of-file\n");
                     46: #                      endif
                     47:                        rtval = 0;
                     48:                        break;
                     49:                }
                     50:                switch(Cmap[chr])
                     51:                {
                     52:                  case ALPHA:
                     53:                        rtval = name(chr);
                     54:                        break;
                     55: 
                     56:                  case NUMBR:
                     57:                        rtval = number(chr);
                     58:                        break;
                     59: 
                     60:                  case OPATR:
                     61:                        if ((rtval = operator(chr)) == 0)
                     62:                                rtval = -1;
                     63:                        break;
                     64: 
                     65:                  case PUNCT:
                     66:                        continue;
                     67: 
                     68:                  case CNTRL:
                     69:                        /* already converted number ? */
                     70:                        if (Pars)
                     71:                                switch (chr)
                     72:                                {
                     73:                                  case CVAR_I2:
                     74:                                        rtval = getcvar(Tokens.i2const, 2);
                     75:                                        break;
                     76: 
                     77:                                  case CVAR_I4:
                     78:                                        rtval = getcvar(Tokens.i4const, 4);
                     79:                                        break;
                     80: 
                     81:                                  case CVAR_F8:
                     82:                                        rtval = getcvar(Tokens.f8const, 8);
                     83:                                        break;
                     84: 
                     85:                                  case CVAR_S:
                     86:                                        rtval = getcvar(Tokens.sconst, 0);
                     87:                                        break;
                     88: 
                     89:                                  default:
                     90:                                        printf("funny character 0%o ingnored\n", chr);
                     91:                                        continue;
                     92:                                }
                     93:                        break;
                     94:                  default:
                     95:                        syserr("invalid type in yylex()");
                     96:                }
                     97:        }  while (rtval == -1);
                     98:        if (rtval == 0)
                     99:        {
                    100:                Lastok.tokop = GOVAL;
                    101:                Lastok.tok = 0;
                    102:                Lastok.toktyp = 0;
                    103:        }
                    104:        return (rtval);
                    105: }
                    106: 
                    107: 
                    108: getcvar(type, len)
                    109: int    type;
                    110: int    len;
                    111: {
                    112:        extern char     *yylval;
                    113:        extern char     Cmap[];
                    114:        extern char     *syment();
                    115:        register int    save;
                    116:        char            buf[MAXSTRING + 1];
                    117: 
                    118:        save = Lcase;
                    119:        Lcase = 0;
                    120:        yylval = buf;
                    121:        if (len)
                    122:                while ((yylval - buf) < len)
                    123:                        *yylval++ = get_scan(NORMAL);
                    124:        else
                    125:        {
                    126:                do
                    127:                {
                    128:                        *yylval = get_scan(NORMAL);
                    129:                        if ((yylval - buf) > MAXSTRING)
                    130:                        {
                    131:                                Lcase = save;
                    132:                                par_error(STRLONG, WARN, 0);
                    133:                        }
                    134:                        if (Cmap[*yylval] == CNTRL && *yylval != '\0')
                    135:                        {
                    136:                                Lcase = save;
                    137:                                /* control char in string from equel */
                    138:                                par_error(CNTRLCHR, WARN, 0);
                    139:                        }
                    140:                } while (*yylval++);
                    141:                len = yylval - buf;
                    142:        }
                    143:        Lcase = save;
                    144:        yylval = syment(buf, len);
                    145:        Lastok.tok = yylval;
                    146:        Lastok.toktyp = type;
                    147:        return (type);
                    148: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.