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;
}
|