1 /* $Id: keytab.c,v 1.6 1994/06/24 12:27:01 ceriel Exp $ */
3 * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
4 * See the copyright notice in the ACK home directory, in the file "Copyright".
10 # define NKEYWORDS ((sizeof keytab) / (sizeof *keytab))
19 { AFTER, "AFTER" }, { ALLOCATE, "ALLOCATE" },
20 { ALT, "ALT" }, { AND, "AND" },
21 { ANY, "ANY" }, { BYTE, "BYTE" },
22 { CHAN, "CHAN" }, { DEF, "DEF" },
23 { FALSE, "FALSE" }, { FOR, "FOR" },
24 { IF, "IF" }, { LOAD, "LOAD" },
25 { NOT, "NOT" }, { NOW, "NOW" },
26 { OR, "OR" }, { PAR, "PAR" },
27 { PLACED, "PLACED" }, { PORT, "PORT" },
28 { PRI, "PRI" }, { PROC, "PROC" },
29 { SEQ, "SEQ" }, { SKIP, "SKIP" },
30 { TABLE, "TABLE" }, { TRUE, "TRUE" },
31 { VALUE, "VALUE" }, { VAR, "VAR" },
32 { WAIT, "WAIT" }, { WHILE, "WHILE" },
36 * The table of keywords is searched for the occurence of `str',
37 * if found the corresponding token number is returned,
38 * otherwise IDENTIFIER is the returned token number.
40 keyword(str) char *str;
42 register int high= NKEYWORDS-1;
48 if ((key=lowerupper(str))==0) return IDENTIFIER;
52 if ((cmp= strcmp(key, keytab[i].k_str)) == 0) break;
53 else if (cmp > 0) low= i+1;
55 } while (low <= high);
57 return low<=high ? keytab[i].k_token : IDENTIFIER;
60 char *lowerupper(str) register char *str;
62 static char keyword[MAXKEYLEN+1];
63 register char *key=keyword;
67 *key++ = toupper(*str);
69 } while (key<keyword+MAXKEYLEN && islower(*str));
73 while (key<keyword+MAXKEYLEN && isupper(*str));
77 return *str==0 ? keyword : 0;
80 char *keyname(key) register int key;
84 for (kp= keytab; kp< keytab+NKEYWORDS; kp++)
85 if (kp->k_token == key) return kp->k_str;