# 2.11BSD#431 - /usr/ingres/source/equel/name.c

##### Functions

    name              X

       1: #
       2: # include   <stdio.h>
       3:
       4: # include   "constants.h"
       5: # include   "globals.h"
       6:
       7: /*
       8: **  NAME -- Process an identifier or keyword token.
       9: **
      10: **	Name gets the identifier that follows in the std.
      11: **	input, and checks if it is a keyword.
      12: **	An identifier is defined as a sequence of
      13: **	MAXNAME or fewer alphanumerics, starting with an
      14: **	alphabetic character.
      15: **
      16: **	Parameters:
      17: **		chr - the first character of the identifier
      18: **
      19: **
      20: **	Returns:
      21: **		Tokens.sp_name - for a user-defined name
      22: **		Tokens.sp_struct_var -- if the name is declared
      23: **			a structurw variable
      24: **		other - lexical codes for keys
      25: **
      26: **	Side Effects:
      27: **		Adds a token to the symbol space.
      28: **		yylval is set to the new node in the space.
      29: **		If the identifier is a keyword, sets Opcode to
      30: **		op_code from tokens.y.
      31: **
      32: **	Defines:
      33: **		name()
      34: **
      35: **	Requires:
      36: **		yylval - to return a value for the token
      37: **		Cmap - to get character classes
      38: **		Opcode - to return opcodes of keywords
      39: **		Tokens - for the lex codes of NAMEs
      40: **		getch() - to get next character
      41: **		yysemerr() - to report buffer ovflo
      42: **		salloc() - to allocate place for a string
      43: **		addsym() - to add a symbol to the symbol space
      44: **		backup() - to push back a single char on the input stream
      45: **		getkey() - to search the keyword table for one
      46: **		getcvar() - to see if the id is a struct id
      47: **
      48: **	Called By:
      49: **		yylex()
      50: **
      51: **	Files:
      52: **		globals.h - for globals
      53: **		constants.h
      54: **
      55: **	Diagnostics:
      56: **		"name too long"	- along with the first
      57: **				  MAXNAME chars of the name,
      58: **				  (which is what the name is
      59: **				  truncated to)
      60: **
      61: **	History:
      62: **		first written - 4/19/78 (marc)
      63: */
      64:
      65: name(chr)
      66: char        chr;
      67: {
      68:     int         lval;
      69:     register        i;
      70:     char            wbuf [MAXNAME + 1];
      71:     register char       *cp;
      72:     register char       c;
      73:     struct optab        *op;
      74:     extern struct optab *getkey();
      75:     extern struct cvar  *getcvar();
      76:
      77:     c = chr;
      78:     cp = wbuf;
      79:     for (i = 0; i <= MAXNAME; i++)
      80:     {
      81:         lval = Cmap [c];
      82:         if (i < MAXNAME &&
      83:            (lval == ALPHA || lval == NUMBR))
      84:         {
      85:             *cp++ = c;
      86:             c = getch();
      87:         }
      88:         else if (lval == ALPHA || lval == NUMBR)
      89:         {
      90:             /* {i == MAXNAME && "c is legal" &&
      91: 			 *  cp == &wbuf [MAXNAME]}
      92: 			 */
      93:             *cp = '\0';
      94:             yysemerr("name too long", wbuf);
      95:             /* chomp to end of identifier */
      96:
      97:             do
      98:             {
      99:                 c = getch();
     100:                 lval = Cmap [c];
     101:             }  while (lval == ALPHA || lval == NUMBR);
     102:             backup(c);
     103:
     104:             /* take first MAXNAME characters as IDENTIFIER
     105: 			 * (non-key)
     106: 			 */
     107:             yylval = addsym(salloc(wbuf));
     108:             return (Tokens.sp_name);
     109:         }
     110:         else
     111:         {
     112:             /* {cp <= &wbuf [MAXNAME] && i <= MAXNAME
     113: 			 * && "c is not part of id"}
     114: 			 */
     115:             backup(c);
     116:             *cp = '\0';
     117:             i = 0;
     118:             break;
     119:         }
     120:     }
     121:     op = getkey(wbuf);
     122:
     123:     /* Is it a keyword ? */
     124:     if (op)
     125:     {
     126:         yylval = addsym(op->op_term);
     127:         Opcode = op->op_code;
     128:         return (op->op_token);
     129:     }
     130:     /* user-defined name */
     131:     yylval = addsym(salloc(wbuf));
     132:     if (getcvar(wbuf)->c_type == opSTRUCT)
     133:         return(Tokens.sp_struct_var);
     134:     return (Tokens.sp_name);
     135: }

#### Defined functions

name defined in line 65; used 1 times

- in /usr/ingres/source/equel/yylex.c line 101

Last modified: 1995-04-14 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 953 |