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