%struct-type
%language=C++
%global-table
%define initializer-suffix ,Token::IDENTIFIER
%define hash-function-name Hash
%define lookup-function-name GetToken
%define class-name PerfectKeywordHash
%define word-array-name kPerfectKeywordHashTable
%define length-table-name kPerfectKeywordLengthTable
%7bit
%compare-lengths
%enum
%readonly-tables
%compare-strncmp

struct PerfectKeywordHashTableEntry { const char* name; Token::Value value; };
%%
async, Token::ASYNC
await, Token::AWAIT
break, Token::BREAK
case, Token::CASE
catch, Token::CATCH
class, Token::CLASS
const, Token::CONST
continue, Token::CONTINUE
debugger, Token::DEBUGGER
default, Token::DEFAULT
delete, Token::DELETE
do, Token::DO
else, Token::ELSE
enum, Token::ENUM
export, Token::EXPORT
extends, Token::EXTENDS
false, Token::FALSE_LITERAL
finally, Token::FINALLY
for, Token::FOR
function, Token::FUNCTION
get, Token::GET
if, Token::IF
implements, Token::FUTURE_STRICT_RESERVED_WORD
import, Token::IMPORT
in, Token::IN
instanceof, Token::INSTANCEOF
interface, Token::FUTURE_STRICT_RESERVED_WORD
let, Token::LET
new, Token::NEW
null, Token::NULL_LITERAL
package, Token::FUTURE_STRICT_RESERVED_WORD
private, Token::FUTURE_STRICT_RESERVED_WORD
protected, Token::FUTURE_STRICT_RESERVED_WORD
public, Token::FUTURE_STRICT_RESERVED_WORD
return, Token::RETURN
set, Token::SET
static, Token::STATIC
super, Token::SUPER
switch, Token::SWITCH
this, Token::THIS
throw, Token::THROW
true, Token::TRUE_LITERAL
try, Token::TRY
typeof, Token::TYPEOF
var, Token::VAR
void, Token::VOID
while, Token::WHILE
with, Token::WITH
yield, Token::YIELD