/* C code produced by gperf version 2.1 (K&R C version) */ /* Command-line: gperf -N c_rsvd -t -p c.prf */ #include #include "ansi.h" #include "host.h" #include "files.h" #include "hash.h" #include "il.h" #include "y.tab.h" struct resword {char *name; short token;}; #define MIN_WORD_LENGTH 2 #define MAX_WORD_LENGTH 8 #define MIN_HASH_VALUE 4 #define MAX_HASH_VALUE 61 /* 32 keywords 58 is the maximum key range */ static int hash (str, len) register char *str; register unsigned int len; { static unsigned char hash_table[] = { 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 5, 15, 10, 30, 0, 20, 25, 15, 20, 61, 0, 10, 15, 5, 0, 61, 61, 10, 25, 0, 0, 0, 0, 61, 61, 61, 61, 61, 61, 61, 61, }; return len + hash_table[str[len - 1]] + hash_table[str[0]]; } struct resword * c_rsvd (str, len) register char *str; register unsigned int len; { static struct resword wordlist[] = { {"",}, {"",}, {"",}, {"",}, {"else", ELSE}, {"while", WHILE}, {"",}, {"",}, {"volatile", VOLATILE}, {"auto", AUTO}, {"union", UNION}, {"extern", EXTERN}, {"",}, {"",}, {"case", CASE}, {"const", CONST}, {"",}, {"",}, {"continue", CONTINUE}, {"enum", ENUM}, {"break", BREAK}, {"return", RETURN}, {"",}, {"int", INT}, {"char", CHAR}, {"float", FLOAT}, {"",}, {"typedef", TYPEDEF}, {"register", REGISTER}, {"goto", GOTO}, {"short", SHORT}, {"struct", STRUCT}, {"do", DO}, {"for", FOR}, {"void", VOID}, {"",}, {"double", DOUBLE}, {"default", DEFAULT}, {"unsigned", UNSIGNED}, {"long", LONG}, {"",}, {"static", STATIC}, {"if", IF}, {"",}, {"",}, {"",}, {"switch", SWITCH}, {"",}, {"",}, {"",}, {"",}, {"sizeof", SIZEOF}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"signed", SIGNED}, }; if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) { register int key = hash (str, len); if (key <= MAX_HASH_VALUE && key >= MIN_HASH_VALUE) { register char *s = wordlist[key].name; if (*s == *str && !strcmp (str + 1, s + 1)) return &wordlist[key]; } } return 0; }