summaryrefslogtreecommitdiff
path: root/apps/gperf/tests/test-5.exp
blob: 101e2798d40e245d637609c884a7ffd6db0de70c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/* C code produced by gperf version 2.5 (GNU C++ version) */
/* Command-line: ../src/gperf -g -o -j1 -t -p -N is_reserved_word  */
/* ISO Pascal 7185 reserved words.
 *
 * For GNU Pascal compiler (GPC) by jtv@hut.fi
 *
 * run this through the Doug Schmidt's gperf program
 * with command
 * gperf  -g -o -j1 -t -p -N is_reserved_word
 *
 */
struct resword { char *name; short token; short iclass;};

#define TOTAL_KEYWORDS 35
#define MIN_WORD_LENGTH 2
#define MAX_WORD_LENGTH 9
#define MIN_HASH_VALUE 2
#define MAX_HASH_VALUE 43
/* maximum key range = 42, duplicates = 0 */

#ifdef __GNUC__
inline
#endif
static unsigned int
hash (str, len)
     register char *str;
     register int unsigned len;
{
  static unsigned char asso_values[] =
    {
     44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
     44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
     44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
     44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
     44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
     44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
     44, 44, 44, 44, 44, 18, 29, 14,  6,  7,
     10, 20, 44, 28, 44, 44, 28, 19, 22, 15,
      0, 44,  9, 23,  0, 23, 26,  2, 44, 44,
     44, 44, 44, 44, 44, 44, 44, 44, 44, 44,
      0,  0, 13, 44, 30, 44, 44, 44,  0, 25,
      1,  0, 44, 44,  0, 44,  1, 44, 25, 44,
     44,  0, 44, 44, 44, 44, 44, 44,
    };
  return len + asso_values[str[len - 1]] + asso_values[str[0]];
}

#ifdef __GNUC__
inline
#endif
struct resword *
is_reserved_word (str, len)
     register char *str;
     register unsigned int len;
{
  static struct resword wordlist[] =
    {
      {"",}, {"",}, 
      {"To",  TO, PASCAL_ISO},
      {"",}, 
      {"Type",  TYPE, PASCAL_ISO},
      {"Then",  THEN, PASCAL_ISO},
      {"Packed",  PACKED, PASCAL_ISO},
      {"While",   WHILE,  PASCAL_ISO},
      {"Do",  DO, PASCAL_ISO},
      {"Procedure",  PROCEDURE, PASCAL_ISO},
      {"End",   END,  PASCAL_ISO},
      {"Else",  ELSE, PASCAL_ISO},
      {"Downto",  DOWNTO, PASCAL_ISO},
      {"For",   FOR,  PASCAL_ISO},
      {"File",  FILE_,  PASCAL_ISO},
      {"Record",  RECORD, PASCAL_ISO},
      {"Repeat",  REPEAT, PASCAL_ISO},
      {"Or",  OR, PASCAL_ISO},
      {"Case",  CASE, PASCAL_ISO},
      {"Function",  FUNCTION, PASCAL_ISO},
      {"Const",   CONST,  PASCAL_ISO},
      {"And",   AND,  PASCAL_ISO},
      {"Mod",   MOD,  PASCAL_ISO},
      {"Array",   ARRAY,  PASCAL_ISO},
      {"Goto",  GOTO, PASCAL_ISO},
      {"Nil",   NIL,  PASCAL_ISO},
      {"Not",   NOT,  PASCAL_ISO},
      {"Set",   SET,  PASCAL_ISO},
      {"Until",   UNTIL,  PASCAL_ISO},
      {"Var",   VAR,  PASCAL_ISO},
      {"Of",  OF, PASCAL_ISO},
      {"In",  IN, PASCAL_ISO},
      {"Program", PROGRAM,PASCAL_ISO},
      {"Label",   LABEL,  PASCAL_ISO},
      {"Div",   DIV,  PASCAL_ISO},
      {"Begin",   BEGIN_, PASCAL_ISO},
      {"With",  WITH, PASCAL_ISO},
      {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
      {"If",  IF, PASCAL_ISO},
    };

  if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
    {
      register int key = hash (str, len);

      if (key <= MAX_HASH_VALUE && key >= 0)
        {
          register char *s = wordlist[key].name;

          if (*s == *str && !strcmp (str + 1, s + 1))
            return &wordlist[key];
        }
    }
  return 0;
}