|
|
1.1 root 1: # include <stdio.h>
2: # include "constants.h"
3: # include "globals.h"
4: # include "y.tab.h"
5: # include <sccs.h>
6:
7: SCCSID(@(#)name.c 7.1 2/5/81)
8:
9:
10: /*
11: ** NAME -- Process an identifier or keyword token.
12: **
13: ** Name gets the identifier that follows in the std.
14: ** input, and checks if it is a keyword.
15: ** An identifier is defined as a sequence of
16: ** MAXNAME or fewer alphanumerics, starting with an
17: ** alphabetic character.
18: **
19: ** Parameters:
20: ** chr - the first character of the identifier
21: **
22: ** Returns:
23: ** Tokens.sp_name - for a user-defined name
24: ** Tokens.sp_struct_var -- if the name is declared
25: ** a structurw variable
26: ** other - lexical codes for keys
27: **
28: ** Side Effects:
29: ** Adds a token to the symbol space.
30: ** yylval is set to the new node in the space.
31: ** If the identifier is a keyword, sets Opcode to
32: ** op_code from tokens.y.
33: */
34:
35: name(chr)
36: char chr;
37: {
38: int lval;
39: register i;
40: char wbuf [MAXNAME + 1];
41: register char *cp;
42: register char c;
43: struct optab *op;
44: struct optab *getkey();
45: struct cvar *getcvar();
46:
47: c = chr;
48: cp = wbuf;
49: for (i = 0; i <= MAXNAME; i++)
50: {
51: lval = Cmap [c];
52: if (i < MAXNAME &&
53: (lval == ALPHA || lval == NUMBR))
54: {
55: *cp++ = c;
56: c = getch();
57: }
58: else if (lval == ALPHA || lval == NUMBR)
59: {
60: /* {i == MAXNAME && "c is legal" &&
61: * cp == &wbuf [MAXNAME]}
62: */
63: *cp = '\0';
64: yysemerr("name too long", wbuf);
65: /* chomp to end of identifier */
66:
67: do
68: {
69: c = getch();
70: lval = Cmap [c];
71: } while (lval == ALPHA || lval == NUMBR);
72: backup(c);
73:
74: /* take first MAXNAME characters as IDENTIFIER
75: * (non-key)
76: */
77: yylval.u_dn = addsym(salloc(wbuf));
78: return (Tokens.sp_name);
79: }
80: else
81: {
82: /* {cp <= &wbuf [MAXNAME] && i <= MAXNAME
83: * && "c is not part of id"}
84: */
85: backup(c);
86: *cp = '\0';
87: i = 0;
88: break;
89: }
90: }
91: op = getkey(wbuf);
92:
93: /* Is it a keyword ? */
94: if (op)
95: {
96: yylval.u_dn = addsym(op->op_term);
97: Opcode = op->op_code;
98: return (op->op_token);
99: }
100: /* user-defined name */
101: yylval.u_dn = addsym(salloc(wbuf));
102: if (getcvar(wbuf)->c_type == opSTRUCT)
103: return(Tokens.sp_struct_var);
104: return (Tokens.sp_name);
105: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.