/*******************************************************************************
* Copyright (c) 2012, 2012 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Bruno Medeiros - initial API and implementation
*******************************************************************************/
package dtool.parser;
import static melnorme.utilbox.core.Assert.AssertNamespace.assertTrue;
import java.util.Hashtable;
public class DeeLexerKeywordHelper {
protected final static Hashtable<String, DeeTokens> keywordTable;
static {
Hashtable<String, DeeTokens> temp = new Hashtable<String, DeeTokens>();
storeKeyword(temp, DeeTokens.KW_ABSTRACT);
storeKeyword(temp, DeeTokens.KW_ALIAS);
storeKeyword(temp, DeeTokens.KW_ALIGN);
storeKeyword(temp, DeeTokens.KW_ASM);
storeKeyword(temp, DeeTokens.KW_ASSERT);
storeKeyword(temp, DeeTokens.KW_AUTO);
storeKeyword(temp, DeeTokens.KW_BODY);
storeKeyword(temp, DeeTokens.KW_BOOL);
storeKeyword(temp, DeeTokens.KW_BREAK);
storeKeyword(temp, DeeTokens.KW_BYTE);
storeKeyword(temp, DeeTokens.KW_CASE);
storeKeyword(temp, DeeTokens.KW_CAST);
storeKeyword(temp, DeeTokens.KW_CATCH);
storeKeyword(temp, DeeTokens.KW_CDOUBLE);
storeKeyword(temp, DeeTokens.KW_CENT);
storeKeyword(temp, DeeTokens.KW_CFLOAT);
storeKeyword(temp, DeeTokens.KW_CHAR);
storeKeyword(temp, DeeTokens.KW_CLASS);
storeKeyword(temp, DeeTokens.KW_CONST);
storeKeyword(temp, DeeTokens.KW_CONTINUE);
storeKeyword(temp, DeeTokens.KW_CREAL);
storeKeyword(temp, DeeTokens.KW_DCHAR);
storeKeyword(temp, DeeTokens.KW_DEBUG);
storeKeyword(temp, DeeTokens.KW_DEFAULT);
storeKeyword(temp, DeeTokens.KW_DELEGATE);
storeKeyword(temp, DeeTokens.KW_DELETE);
storeKeyword(temp, DeeTokens.KW_DEPRECATED);
storeKeyword(temp, DeeTokens.KW_DO);
storeKeyword(temp, DeeTokens.KW_DOUBLE);
storeKeyword(temp, DeeTokens.KW_ELSE);
storeKeyword(temp, DeeTokens.KW_ENUM);
storeKeyword(temp, DeeTokens.KW_EXPORT);
storeKeyword(temp, DeeTokens.KW_EXTERN);
storeKeyword(temp, DeeTokens.KW_FALSE);
storeKeyword(temp, DeeTokens.KW_FINAL);
storeKeyword(temp, DeeTokens.KW_FINALLY);
storeKeyword(temp, DeeTokens.KW_FLOAT);
storeKeyword(temp, DeeTokens.KW_FOR);
storeKeyword(temp, DeeTokens.KW_FOREACH);
storeKeyword(temp, DeeTokens.KW_FOREACH_REVERSE);
storeKeyword(temp, DeeTokens.KW_FUNCTION);
storeKeyword(temp, DeeTokens.KW_GOTO);
storeKeyword(temp, DeeTokens.KW_IDOUBLE);
storeKeyword(temp, DeeTokens.KW_IF);
storeKeyword(temp, DeeTokens.KW_IFLOAT);
storeKeyword(temp, DeeTokens.KW_IMMUTABLE);
storeKeyword(temp, DeeTokens.KW_IMPORT);
storeKeyword(temp, DeeTokens.KW_IN);
storeKeyword(temp, DeeTokens.KW_INOUT);
storeKeyword(temp, DeeTokens.KW_INT);
storeKeyword(temp, DeeTokens.KW_INTERFACE);
storeKeyword(temp, DeeTokens.KW_INVARIANT);
storeKeyword(temp, DeeTokens.KW_IREAL);
storeKeyword(temp, DeeTokens.KW_IS);
storeKeyword(temp, DeeTokens.KW_LAZY);
storeKeyword(temp, DeeTokens.KW_LONG);
storeKeyword(temp, DeeTokens.KW_MACRO);
storeKeyword(temp, DeeTokens.KW_MIXIN);
storeKeyword(temp, DeeTokens.KW_MODULE);
storeKeyword(temp, DeeTokens.KW_NEW);
storeKeyword(temp, DeeTokens.KW_NOTHROW);
storeKeyword(temp, DeeTokens.KW_NULL);
storeKeyword(temp, DeeTokens.KW_OUT);
storeKeyword(temp, DeeTokens.KW_OVERRIDE);
storeKeyword(temp, DeeTokens.KW_PACKAGE);
storeKeyword(temp, DeeTokens.KW_PRAGMA);
storeKeyword(temp, DeeTokens.KW_PRIVATE);
storeKeyword(temp, DeeTokens.KW_PROTECTED);
storeKeyword(temp, DeeTokens.KW_PUBLIC);
storeKeyword(temp, DeeTokens.KW_PURE);
storeKeyword(temp, DeeTokens.KW_REAL);
storeKeyword(temp, DeeTokens.KW_REF);
storeKeyword(temp, DeeTokens.KW_RETURN);
storeKeyword(temp, DeeTokens.KW_SCOPE);
storeKeyword(temp, DeeTokens.KW_SHARED);
storeKeyword(temp, DeeTokens.KW_SHORT);
storeKeyword(temp, DeeTokens.KW_STATIC);
storeKeyword(temp, DeeTokens.KW_STRUCT);
storeKeyword(temp, DeeTokens.KW_SUPER);
storeKeyword(temp, DeeTokens.KW_SWITCH);
storeKeyword(temp, DeeTokens.KW_SYNCHRONIZED);
storeKeyword(temp, DeeTokens.KW_TEMPLATE);
storeKeyword(temp, DeeTokens.KW_THIS);
storeKeyword(temp, DeeTokens.KW_THROW);
storeKeyword(temp, DeeTokens.KW_TRUE);
storeKeyword(temp, DeeTokens.KW_TRY);
storeKeyword(temp, DeeTokens.KW_TYPEDEF);
storeKeyword(temp, DeeTokens.KW_TYPEID);
storeKeyword(temp, DeeTokens.KW_TYPEOF);
storeKeyword(temp, DeeTokens.KW_UBYTE);
storeKeyword(temp, DeeTokens.KW_UCENT);
storeKeyword(temp, DeeTokens.KW_UINT);
storeKeyword(temp, DeeTokens.KW_ULONG);
storeKeyword(temp, DeeTokens.KW_UNION);
storeKeyword(temp, DeeTokens.KW_UNITTEST);
storeKeyword(temp, DeeTokens.KW_USHORT);
storeKeyword(temp, DeeTokens.KW_VERSION);
storeKeyword(temp, DeeTokens.KW_VOID);
storeKeyword(temp, DeeTokens.KW_VOLATILE);
storeKeyword(temp, DeeTokens.KW_WCHAR);
storeKeyword(temp, DeeTokens.KW_WHILE);
storeKeyword(temp, DeeTokens.KW_WITH);
storeKeyword(temp, DeeTokens.KW___TRAITS);
storeKeyword(temp, DeeTokens.KW___GSHARED);
storeKeyword(temp, DeeTokens.KW___THREAD);
storeKeyword(temp, DeeTokens.KW___VECTOR);
storeKeyword(temp, DeeTokens.KW___FILE__);
storeKeyword(temp, DeeTokens.KW___LINE__);
storeKeyword(temp, DeeTokens.KW___MODULE__);
storeKeyword(temp, DeeTokens.KW___FUNCTION__);
storeKeyword(temp, DeeTokens.KW___PRETTY_FUNCTION__);
storeKeyword(temp, DeeTokens.KW___DATE__);
storeKeyword(temp, DeeTokens.KW___TIME__);
storeKeyword(temp, DeeTokens.KW___TIMESTAMP__);
storeKeyword(temp, DeeTokens.KW___VENDOR__);
storeKeyword(temp, DeeTokens.KW___VERSION__);
temp.put("__EOF__", DeeTokens.EOF); // Special keyword value that can generate an EOF
keywordTable = temp;
}
/** Returns the token that matches given string, or null if none matches. */
public static final DeeTokens getKeywordToken(String string) {
return keywordTable.get(string);
}
private static void storeKeyword(Hashtable<String, DeeTokens> table, DeeTokens keyword) {
String key = keyword.getSourceValue();
assertTrue(table.get(key) == null);
table.put(key, keyword);
}
}