/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.lang.parser;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Keyword implements CharSequence
{
//
// Key/Reserved Words
//
static final Map<String, Keyword> RESERVED_WORDS = new HashMap<String, Keyword>( 64 );
public static final Keyword KW_true = addReservedWord( "true", true );
public static final Keyword KW_false = addReservedWord( "false", true );
public static final Keyword KW_NaN = addReservedWord( "NaN", true );
public static final Keyword KW_Infinity = addReservedWord( "Infinity", true );
public static final Keyword KW_and = addReservedWord( "and" );
public static final Keyword KW_or = addReservedWord( "or" );
public static final Keyword KW_not = addReservedWord( "not" );
public static final Keyword KW_null = addReservedWord( "null", true );
public static final Keyword KW_length = addReservedWord( "length", true );
public static final Keyword KW_exists = addReservedWord( "exists", true );
public static final Keyword KW_in = addReservedWord( "in" );
public static final Keyword KW_startswith = addReservedWord( "startswith", true );
public static final Keyword KW_contains = addReservedWord( "contains", true );
public static final Keyword KW_where = addReservedWord( "where", true );
public static final Keyword KW_find = addReservedWord( "find", true );
public static final Keyword KW_var = addReservedWord( "var" );
public static final Keyword KW_delegate = addReservedWord( "delegate" );
public static final Keyword KW_represents = addReservedWord( "represents" );
public static final Keyword KW_as = addReservedWord( "as", true );
public static final Keyword KW_typeof = addReservedWord( "typeof" );
public static final Keyword KW_statictypeof = addReservedWord( "statictypeof" );
public static final Keyword KW_typeis = addReservedWord( "typeis" );
public static final Keyword KW_typeas = addReservedWord( "typeas" );
public static final Keyword KW_print = addReservedWord( "print", true );
public static final Keyword KW_package = addReservedWord( "package" );
public static final Keyword KW_uses = addReservedWord( "uses" );
public static final Keyword KW_if = addReservedWord( "if" );
public static final Keyword KW_else = addReservedWord( "else" );
public static final Keyword KW_except = addReservedWord( "except", true );
public static final Keyword KW_unless = addReservedWord( "unless" );
public static final Keyword KW_foreach = addReservedWord( "foreach" );
public static final Keyword KW_for = addReservedWord( "for" );
public static final Keyword KW_index = addReservedWord( "index", true );
public static final Keyword KW_iterator = addReservedWord( "iterator", true );
public static final Keyword KW_while = addReservedWord( "while" );
public static final Keyword KW_do = addReservedWord( "do" );
public static final Keyword KW_continue = addReservedWord( "continue" );
public static final Keyword KW_break = addReservedWord( "break" );
public static final Keyword KW_return = addReservedWord( "return" );
public static final Keyword KW_construct = addReservedWord( "construct" );
public static final Keyword KW_function = addReservedWord( "function" );
public static final Keyword KW_property = addReservedWord( "property", false );
public static final Keyword KW_get = addReservedWord( "get", true );
public static final Keyword KW_set = addReservedWord( "set", true );
public static final Keyword KW_try = addReservedWord( "try" );
public static final Keyword KW_catch = addReservedWord( "catch" );
public static final Keyword KW_finally = addReservedWord( "finally" );
public static final Keyword KW_this = addReservedWord( "this", true );
public static final Keyword KW_throw = addReservedWord( "throw" );
public static final Keyword KW_assert = addReservedWord( "assert" );
public static final Keyword KW_new = addReservedWord( "new" );
public static final Keyword KW_switch = addReservedWord( "switch" );
public static final Keyword KW_case = addReservedWord( "case" );
public static final Keyword KW_default = addReservedWord( "default" );
public static final Keyword KW_eval = addReservedWord( "eval" );
public static final Keyword KW_private = addReservedWord( "private", true );
public static final Keyword KW_internal = addReservedWord( "internal", true );
public static final Keyword KW_protected = addReservedWord( "protected", true );
public static final Keyword KW_public = addReservedWord( "public", true );
public static final Keyword KW_abstract = addReservedWord( "abstract", true );
public static final Keyword KW_override = addReservedWord( "override" );
public static final Keyword KW_hide = addReservedWord( "hide", true );
public static final Keyword KW_final = addReservedWord( "final", true );
public static final Keyword KW_static = addReservedWord( "static", true );
public static final Keyword KW_extends = addReservedWord( "extends" );
public static final Keyword KW_transient = addReservedWord( "transient", false );
public static final Keyword KW_implements = addReservedWord( "implements" );
public static final Keyword KW_readonly = addReservedWord( "readonly", true );
public static final Keyword KW_class = addReservedWord( "class", false );
public static final Keyword KW_interface = addReservedWord( "interface", false );
public static final Keyword KW_structure = addReservedWord( "structure", false );
public static final Keyword KW_enum = addReservedWord( "enum", false );
public static final Keyword KW_super = addReservedWord( "super", false );
public static final Keyword KW_outer = addReservedWord( "outer", true );
public static final Keyword KW_execution = addReservedWord( "execution", true );
public static final Keyword KW_request = addReservedWord( "request", true );
public static final Keyword KW_session = addReservedWord( "session", true );
public static final Keyword KW_application = addReservedWord( "application", true );
public static final Keyword KW_void = addReservedWord( "void", true );
public static final Keyword KW_block = addReservedWord( "block", true );
public static final Keyword KW_enhancement = addReservedWord( "enhancement", true );
public static final Keyword KW_classpath = addReservedWord( "classpath", true );
public static final Keyword KW_typeloader = addReservedWord( "typeloader", true );
public static final Keyword KW_using = addReservedWord( "using" );
//public static final Keyword KW_type = addReservedWord( "Type", true );
private String _strName;
private boolean _bValue;
private Keyword( String strWord, boolean bValue )
{
_strName = strWord;
_bValue = bValue;
}
private static Keyword addReservedWord( String strWord )
{
return addReservedWord( strWord, false );
}
private static Keyword addReservedWord( String strWord, boolean bValue )
{
String strLower = strWord.toLowerCase();
if( RESERVED_WORDS.containsKey( strLower ) )
{
throw new RuntimeException( strWord + " is already defined as a reserved word." );
}
Keyword keyword = new Keyword( strWord, bValue );
RESERVED_WORDS.put( strWord, keyword );
return keyword;
}
public static boolean isKeyword( String strWord )
{
return strWord != null && RESERVED_WORDS.containsKey( strWord );
}
public static boolean isValueKeyword( String strWord )
{
Keyword keyword = RESERVED_WORDS.get( strWord );
return keyword != null && keyword.isValue();
}
public static boolean isReservedKeyword( String strWord )
{
Keyword keyword = RESERVED_WORDS.get( strWord );
return keyword != null && !keyword.isValue();
}
public static Set<String> getAll()
{
return RESERVED_WORDS.keySet();
}
public int length()
{
return _strName.length();
}
public char charAt( int index )
{
return _strName.charAt( index );
}
public CharSequence subSequence( int start, int end )
{
return _strName.subSequence( start, end );
}
public boolean isValue()
{
return _bValue;
}
@SuppressWarnings("NullableProblems")
@Override
public String toString()
{
return _strName;
}
public boolean equals( Object o )
{
if( this == o )
{
return true;
}
if( o == null || getClass() != o.getClass() )
{
return false;
}
Keyword keyword = (Keyword)o;
return _strName.equals( keyword._strName );
}
public int hashCode()
{
return _strName.hashCode();
}
public boolean equals( String str )
{
return _strName.equals( str );
}
public static boolean isExactKeywordMatch( String strValue )
{
Keyword keyword = RESERVED_WORDS.get( strValue );
return keyword.getName().equals( strValue );
}
public String getName()
{
return _strName;
}
}