|
|
1.1 root 1: # include <ingres.h>
2: # include "scanner.h"
3: # include <sccs.h>
4:
5: SCCSID(@(#)s_name.c 7.2 5/4/83)
6:
7: /*
8: ** NAME
9: ** A name is defined to be a sequence of MAXNAME or fewer alphanumeric
10: ** characters, starting with an alphabetic (underscore "_" is considered
11: ** an alphabetic). If it is not a keyword, each name is entered into
12: ** the symbol table, indexed by 'yylval'. A token is then returned for
13: ** that name.
14: */
15: name(chr)
16: char chr;
17: {
18: extern char *yylval;
19: extern char Cmap[];
20: char namebuf[MAXNAME + 1];
21: register int hi, lo, curr;
22: extern char *syment();
23:
24: /* fill in the name */
25: yylval = namebuf;
26: *yylval = chr;
27: do
28: {
29: *++yylval = get_scan(NORMAL);
30: if ((yylval - namebuf) > MAXNAME)
31: {
32: /* name too long */
33: *yylval = '\0';
34: par_error(NAMELONG, WARN, namebuf, 0);
35: }
36:
37: } while (Cmap[*yylval] == ALPHA || Cmap[*yylval] == NUMBR);
38: backup(*yylval);
39: *yylval = '\0';
40:
41: /* is it a keyword ? */
42: lo = 0;
43: hi = Keyent - 1;
44: while (lo <= hi)
45: {
46: curr = (lo + hi) / 2;
47: switch (scompare(Keyword[curr].term, MAXNAME, namebuf, MAXNAME))
48: {
49: case 1:
50: hi = curr - 1;
51: continue;
52:
53: case -1:
54: lo = curr + 1;
55: continue;
56:
57: case 0:
58: Lastok.toktyp = Tokens.sconst;
59: Lastok.tok = Keyword[curr].term;
60: Lastok.tokop = Keyword[curr].opcode;
61: yylval = (char *) Lastok.tokop;
62: return (Keyword[curr].token);
63: }
64: }
65:
66: /* else, USER DEFINED NAME */
67: # ifdef xSTR2
68: tTfp(71, 0, "name: %s\n", namebuf);
69: # endif
70: yylval = syment(namebuf, length(namebuf) + 1);
71: Lastok.tok = yylval;
72: Lastok.toktyp = Tokens.sconst;
73: Lastok.tokop = 0;
74: return (Tokens.name);
75: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.