/*******************************************************************************
 * Copyright (c) 2000, 2019 IBM Corporation and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * This is an implementation of an early-draft specification developed under the Java
 * Community Process (JCP) and is made available for testing and evaluation purposes
 * only. The code is not compatible with any specification of the JCP.
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.jdt.internal.compiler.parser;

/**
 * IMPORTANT NOTE: These constants are dedicated to the internal Scanner implementation.
 * It is mirrored in org.eclipse.jdt.core.compiler public package where it is API.
 * The mirror implementation is using the backward compatible ITerminalSymbols constant
 * definitions (stable with 2.0), whereas the internal implementation uses TerminalTokens
 * which constant values reflect the latest parser generation state.
 */
/**
 * Maps each terminal symbol in the java-grammar into a unique integer.
 * This integer is used to represent the terminal when computing a parsing action.
 *
 * Disclaimer : These constant values are generated automatically using a Java
 * grammar, therefore their actual values are subject to change if new keywords
 * were added to the language (for instance, 'assert' is a keyword in 1.4).
 */
public interface TerminalTokens {

	// special tokens not part of grammar - not autogenerated
	int TokenNameNotAToken = 0,
							TokenNameWHITESPACE = 1000,
							TokenNameCOMMENT_LINE = 1001,
							TokenNameCOMMENT_BLOCK = 1002,
							TokenNameCOMMENT_JAVADOC = 1003;

	int TokenNameIdentifier = 21,
							TokenNameabstract = 52,
							TokenNameassert = 79,
							TokenNameboolean = 102,
							TokenNamebreak = 80,
							TokenNamebyte = 103,
							TokenNamecase = 104,
							TokenNamecatch = 105,
							TokenNamechar = 106,
							TokenNameclass = 68,
							TokenNamecontinue = 81,
							TokenNameconst = 130,
							TokenNamedefault = 74,
							TokenNamedo = 82,
							TokenNamedouble = 107,
							TokenNameelse = 117,
							TokenNameenum = 72,
							TokenNameextends = 89,
							TokenNamefalse = 41,
							TokenNamefinal = 53,
							TokenNamefinally = 114,
							TokenNamefloat = 108,
							TokenNamefor = 83,
							TokenNamegoto = 131,
							TokenNameif = 84,
							TokenNameimplements = 127,
							TokenNameimport = 109,
							TokenNameinstanceof = 17,
							TokenNameint = 110,
							TokenNameinterface = 71,
							TokenNamelong = 111,
							TokenNamenative = 54,
							TokenNamenew = 36,
							TokenNamenull = 42,
							TokenNamepackage = 88,
							TokenNameprivate = 55,
							TokenNameprotected = 56,
							TokenNamepublic = 57,
							TokenNamereturn = 85,
							TokenNameshort = 112,
							TokenNamestatic = 39,
							TokenNamestrictfp = 58,
							TokenNamesuper = 34,
							TokenNameswitch = 61,
							TokenNamesynchronized = 40,
							TokenNamethis = 35,
							TokenNamethrow = 76,
							TokenNamethrows = 115,
							TokenNametransient = 59,
							TokenNametrue = 43,
							TokenNametry = 86,
							TokenNamevoid = 113,
							TokenNamevolatile = 60,
							TokenNamewhile = 77,
							TokenNamemodule = 118,
							TokenNameopen = 119,
							TokenNamerequires = 120,
							TokenNametransitive = 125,
							TokenNameexports = 121,
							TokenNameopens = 122,
							TokenNameto = 128,
							TokenNameuses = 123,
							TokenNameprovides = 124,
							TokenNamewith = 129,
							TokenNameIntegerLiteral = 44,
							TokenNameLongLiteral = 45,
							TokenNameFloatingPointLiteral = 46,
							TokenNameDoubleLiteral = 47,
							TokenNameCharacterLiteral = 48,
							TokenNameStringLiteral = 49,
							TokenNameTextBlock = 50,
							TokenNamePLUS_PLUS = 2,
							TokenNameMINUS_MINUS = 3,
							TokenNameEQUAL_EQUAL = 19,
							TokenNameLESS_EQUAL = 12,
							TokenNameGREATER_EQUAL = 13,
							TokenNameNOT_EQUAL = 20,
							TokenNameLEFT_SHIFT = 18,
							TokenNameRIGHT_SHIFT = 14,
							TokenNameUNSIGNED_RIGHT_SHIFT = 16,
							TokenNamePLUS_EQUAL = 90,
							TokenNameMINUS_EQUAL = 91,
							TokenNameMULTIPLY_EQUAL = 92,
							TokenNameDIVIDE_EQUAL = 93,
							TokenNameAND_EQUAL = 94,
							TokenNameOR_EQUAL = 95,
							TokenNameXOR_EQUAL = 96,
							TokenNameREMAINDER_EQUAL = 97,
							TokenNameLEFT_SHIFT_EQUAL = 98,
							TokenNameRIGHT_SHIFT_EQUAL = 99,
							TokenNameUNSIGNED_RIGHT_SHIFT_EQUAL = 100,
							TokenNameOR_OR = 31,
							TokenNameAND_AND = 30,
							TokenNamePLUS = 4,
							TokenNameMINUS = 5,
							TokenNameNOT = 64,
							TokenNameREMAINDER = 9,
							TokenNameXOR = 24,
							TokenNameAND = 22,
							TokenNameMULTIPLY = 8,
							TokenNameOR = 28,
							TokenNameTWIDDLE = 65,
							TokenNameDIVIDE = 10,
							TokenNameGREATER = 15,
							TokenNameLESS = 11,
							TokenNameLPAREN = 23,
							TokenNameRPAREN = 26,
							TokenNameLBRACE = 37,
							TokenNameRBRACE = 33,
							TokenNameLBRACKET = 6,
							TokenNameRBRACKET = 67,
							TokenNameSEMICOLON = 25,
							TokenNameQUESTION = 29,
							TokenNameCOLON = 63,
							TokenNameCOMMA = 32,
							TokenNameDOT = 1,
							TokenNameEQUAL = 75,
							TokenNameAT = 38,
							TokenNameELLIPSIS = 116,
							TokenNameARROW = 101,
							TokenNameCOLON_COLON = 7,
							TokenNameBeginLambda = 51,
							TokenNameBeginIntersectionCast = 66,
							TokenNameBeginTypeArguments = 87,
							TokenNameElidedSemicolonAndRightBrace = 69,
							TokenNameAT308 = 27,
							TokenNameAT308DOTDOTDOT = 126,
							TokenNameBeginCaseExpr = 70,
							TokenNameRestrictedIdentifierYield = 78,
							TokenNameRestrictedIdentifierrecord = 73,
							TokenNameEOF = 62,
							TokenNameERROR = 132;
}
