struct js_keyword { const char * name; int token; } %% abstract, 1 boolean, 2 break, 3 byte, 4 case, 5 catch, 6 char, 7 class, 8 const, 9 continue, 10 default, 11 do, 12 double, 13 else, 14 extends, 15 false, 16 final, 17 finally, 18 float, 19 for, 20 function, 21 goto, 22 if, 23 implements, 24 import, 25 in, 26 instanceof, 27 int, 28 interface, 29 long, 30 native, 31 new, 32 null, 33 package, 34 private, 35 protected, 36 public, 37 return, 38 short, 39 static, 40 super, 41 switch, 42 synchronized, 43 this, 44 throw, 45 throws, 46 transient, 47 true, 48 try, 49 var, 50 void, 51 while, 52 with, 53 %% #include #include #if defined(__STDC__) || defined(__cplusplus) #define CONST const #else #define CONST #endif static CONST char* testdata[] = { "bogus", "abstract", "boolean", "break", "byte", "case", "catch", "char", "class", "const", "continue", "default", "do", "double", "else", "extends", "false", "final", "finally", "float", "for", "function", "goto", "if", "implements", "import", "in", "instanceof", "int", "interface", "long", "native", "new", "null", "package", "private", "protected", "public", "return", "short", "static", "super", "switch", "synchronized", "this", "throw", "throws", "transient", "true", "try", "var", "void", "while", "with" }; int main () { int i; for (i = 0; i < sizeof(testdata)/sizeof(testdata[0]); i++) { #ifdef CPLUSPLUS_TEST CONST struct js_keyword * resword = Perfect_Hash::in_word_set(testdata[i],strlen(testdata[i])); #else CONST struct js_keyword * resword = in_word_set(testdata[i],strlen(testdata[i])); #endif if (i > 0) { if (!resword) exit (1); if (strcmp(testdata[i],resword->name)) exit (1); } else { if (resword) exit (1); } } return 0; }