/*
* Copyright 2010 Jean-Paul Balabanian and Yngve Devik Hammersland
*
* This file is part of glsl4idea.
*
* Glsl4idea is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of
* the License, or (at your option) any later version.
*
* Glsl4idea is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with glsl4idea. If not, see <http://www.gnu.org/licenses/>.
*/
package glslplugin.lang.elements;
import com.intellij.psi.TokenType;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.TokenSet;
public class GLSLTokenTypes {
public static final IElementType IDENTIFIER = new GLSLElementType("IDENTIFIER");
public static final IElementType INTEGER_CONSTANT = new GLSLElementType("INTEGER_CONSTANT");
public static final IElementType UINT_CONSTANT = new GLSLElementType("UINT_CONSTANT");
public static final IElementType FLOAT_CONSTANT = new GLSLElementType("FLOAT_CONSTANT");
public static final IElementType DOUBLE_CONSTANT = new GLSLElementType("DOUBLE_CONSTANT");
public static final IElementType BOOL_CONSTANT = new GLSLElementType("BOOL_CONSTANT");
public static final IElementType VOID_TYPE = new GLSLElementType("VOID_TYPE");
public static final IElementType FLOAT_TYPE = new GLSLElementType("FLOAT_TYPE");
public static final IElementType DOUBLE_TYPE = new GLSLElementType("DOUBLE_TYPE");
public static final IElementType INT_TYPE = new GLSLElementType("INT_TYPE");
public static final IElementType UINT_TYPE = new GLSLElementType("UINT_TYPE");
public static final IElementType BOOL_TYPE = new GLSLElementType("BOOL_TYPE");
public static final IElementType VEC2_TYPE = new GLSLElementType("VEC2_TYPE");
public static final IElementType VEC3_TYPE = new GLSLElementType("VEC3_TYPE");
public static final IElementType VEC4_TYPE = new GLSLElementType("VEC4_TYPE");
public static final IElementType DVEC2_TYPE = new GLSLElementType("DVEC2_TYPE");
public static final IElementType DVEC3_TYPE = new GLSLElementType("DVEC3_TYPE");
public static final IElementType DVEC4_TYPE = new GLSLElementType("DVEC4_TYPE");
public static final IElementType IVEC2_TYPE = new GLSLElementType("IVEC2_TYPE");
public static final IElementType IVEC3_TYPE = new GLSLElementType("IVEC3_TYPE");
public static final IElementType IVEC4_TYPE = new GLSLElementType("IVEC4_TYPE");
public static final IElementType UVEC2_TYPE = new GLSLElementType("UVEC2_TYPE");
public static final IElementType UVEC3_TYPE = new GLSLElementType("UVEC3_TYPE");
public static final IElementType UVEC4_TYPE = new GLSLElementType("UVEC4_TYPE");
public static final IElementType BVEC2_TYPE = new GLSLElementType("BVEC2_TYPE");
public static final IElementType BVEC3_TYPE = new GLSLElementType("BVEC3_TYPE");
public static final IElementType BVEC4_TYPE = new GLSLElementType("BVEC4_TYPE");
public static final IElementType MAT2_TYPE = new GLSLElementType("MAT2_TYPE");
public static final IElementType MAT3_TYPE = new GLSLElementType("MAT3_TYPE");
public static final IElementType MAT4_TYPE = new GLSLElementType("MAT4_TYPE");
public static final IElementType MAT2X2_TYPE = new GLSLElementType("MAT2X2_TYPE");
public static final IElementType MAT2X3_TYPE = new GLSLElementType("MAT2X3_TYPE");
public static final IElementType MAT2X4_TYPE = new GLSLElementType("MAT2X4_TYPE");
public static final IElementType MAT3X2_TYPE = new GLSLElementType("MAT3X2_TYPE");
public static final IElementType MAT3X3_TYPE = new GLSLElementType("MAT3X3_TYPE");
public static final IElementType MAT3X4_TYPE = new GLSLElementType("MAT3X4_TYPE");
public static final IElementType MAT4X2_TYPE = new GLSLElementType("MAT4X2_TYPE");
public static final IElementType MAT4X3_TYPE = new GLSLElementType("MAT4X3_TYPE");
public static final IElementType MAT4X4_TYPE = new GLSLElementType("MAT4X4_TYPE");
public static final IElementType DMAT2_TYPE = new GLSLElementType("DMAT2_TYPE");
public static final IElementType DMAT3_TYPE = new GLSLElementType("DMAT3_TYPE");
public static final IElementType DMAT4_TYPE = new GLSLElementType("DMAT4_TYPE");
public static final IElementType DMAT2X2_TYPE = new GLSLElementType("DMAT2X2_TYPE");
public static final IElementType DMAT2X3_TYPE = new GLSLElementType("DMAT2X3_TYPE");
public static final IElementType DMAT2X4_TYPE = new GLSLElementType("DMAT2X4_TYPE");
public static final IElementType DMAT3X2_TYPE = new GLSLElementType("DMAT3X2_TYPE");
public static final IElementType DMAT3X3_TYPE = new GLSLElementType("DMAT3X3_TYPE");
public static final IElementType DMAT3X4_TYPE = new GLSLElementType("DMAT3X4_TYPE");
public static final IElementType DMAT4X2_TYPE = new GLSLElementType("DMAT4X2_TYPE");
public static final IElementType DMAT4X3_TYPE = new GLSLElementType("DMAT4X3_TYPE");
public static final IElementType DMAT4X4_TYPE = new GLSLElementType("DMAT4X4_TYPE");
public static final IElementType SAMPLER_TYPE = new GLSLElementType("SAMPLER_TYPE");
public static final IElementType ATOMIC_UINT_TYPE = new GLSLElementType("ATOMIC_UINT_TYPE");
public static final IElementType NAMED_TYPE = new GLSLElementType("NAMED_TYPE");
public static final IElementType CONST_KEYWORD = new GLSLElementType("CONST_KEYWORD");
public static final IElementType ATTRIBUTE_KEYWORD = new GLSLElementType("ATTRIBUTE_KEYWORD");
public static final IElementType UNIFORM_KEYWORD = new GLSLElementType("UNIFORM_KEYWORD");
public static final IElementType VARYING_KEYWORD = new GLSLElementType("VARYING_KEYWORD");
public static final IElementType CENTROID_KEYWORD = new GLSLElementType("CENTROID_KEYWORD");
public static final IElementType INVARIANT_KEYWORD = new GLSLElementType("INVARIANT_KEYWORD");
public static final IElementType PATCH_KEYWORD = new GLSLElementType("PATCH_KEYWORD");
public static final IElementType SAMPLE_KEYWORD = new GLSLElementType("SAMPLE_KEYWORD");
public static final IElementType BUFFER_KEYWORD = new GLSLElementType("BUFFER_KEYWORD");
public static final IElementType SHARED_KEYWORD = new GLSLElementType("SHARED_KEYWORD");
public static final IElementType COHERENT_KEYWORD = new GLSLElementType("COHERENT_KEYWORD");
public static final IElementType VOLATILE_KEYWORD = new GLSLElementType("VOLATILE_KEYWORD");
public static final IElementType RESTRICT_KEYWORD = new GLSLElementType("RESTRICT_KEYWORD");
public static final IElementType READONLY_KEYWORD = new GLSLElementType("READONLY_KEYWORD");
public static final IElementType WRITEONLY_KEYWORD = new GLSLElementType("WRITEONLY_KEYWORD");
public static final IElementType SUBROUTINE_KEYWORD = new GLSLElementType("SUBROUTINE_KEYWORD");
public static final IElementType PRECISE_KEYWORD = new GLSLElementType("PRECISE_KEYWORD");
public static final IElementType SMOOTH_KEYWORD = new GLSLElementType("SMOOTH_KEYWORD");
public static final IElementType FLAT_KEYWORD = new GLSLElementType("FLAT_KEYWORD");
public static final IElementType NOPERSPECTIVE_KEYWORD = new GLSLElementType("NOPERSPECTIVE_KEYWORD");
public static final IElementType HIGHP_KEYWORD = new GLSLElementType("HIGHP_KEYWORD");
public static final IElementType MEDIUMP_KEYWORD = new GLSLElementType("MEDIUMP_KEYWORD");
public static final IElementType LOWP_KEYWORD = new GLSLElementType("LOWP_KEYWORD");
public static final IElementType LAYOUT_KEYWORD = new GLSLElementType("LAYOUT_KEYWORD");
public static final IElementType PRECISION_KEYWORD = new GLSLElementType("PRECISION_KEYWORD");
public static final IElementType IN_KEYWORD = new GLSLElementType("IN_KEYWORD");
public static final IElementType OUT_KEYWORD = new GLSLElementType("OUT_KEYWORD");
public static final IElementType INOUT_KEYWORD = new GLSLElementType("INOUT_KEYWORD");
public static final IElementType WHILE_KEYWORD = new GLSLElementType("WHILE_KEYWORD");
public static final IElementType DO_KEYWORD = new GLSLElementType("DO_KEYWORD");
public static final IElementType FOR_KEYWORD = new GLSLElementType("FOR_KEYWORD");
public static final IElementType BREAK_JUMP_STATEMENT = new GLSLElementType("BREAK_JUMP_STATEMENT");
public static final IElementType CONTINUE_JUMP_STATEMENT = new GLSLElementType("CONTINUE_JUMP_STATEMENT");
public static final IElementType RETURN_JUMP_STATEMENT = new GLSLElementType("RETURN_JUMP_STATEMENT");
public static final IElementType DISCARD_JUMP_STATEMENT = new GLSLElementType("DISCARD_JUMP_STATEMENT");
public static final IElementType STRUCT = new GLSLElementType("STRUCT");
public static final IElementType IF_KEYWORD = new GLSLElementType("IF_KEYWORD");
public static final IElementType ELSE_KEYWORD = new GLSLElementType("ELSE_KEYWORD");
public static final IElementType SWITCH_KEYWORD = new GLSLElementType("SWITCH_KEYWORD");
public static final IElementType CASE_KEYWORD = new GLSLElementType("CASE_KEYWORD");
public static final IElementType DEFAULT_KEYWORD = new GLSLElementType("DEFAULT_KEYWORD");
public static final IElementType COMMENT_LINE = new GLSLElementType("COMMENT_LINE");
public static final IElementType COMMENT_BLOCK = new GLSLElementType("COMMENT_BLOCK");
public static final IElementType LEFT_BRACE = new GLSLElementType("LEFT_BRACE");
public static final IElementType RIGHT_BRACE = new GLSLElementType("RIGHT_BRACE");
public static final IElementType LEFT_PAREN = new GLSLElementType("LEFT_PAREN");
public static final IElementType RIGHT_PAREN = new GLSLElementType("RIGHT_PAREN");
public static final IElementType LEFT_BRACKET = new GLSLElementType("LEFT_BRACKET");
public static final IElementType RIGHT_BRACKET = new GLSLElementType("RIGHT_BRACKET");
public static final IElementType EQUAL = new GLSLElementType("EQUAL");
public static final IElementType MUL_ASSIGN = new GLSLElementType("MUL_ASSIGN");
public static final IElementType STAR = new GLSLElementType("STAR");
public static final IElementType DIV_ASSIGN = new GLSLElementType("DIV_ASSIGN");
public static final IElementType SLASH = new GLSLElementType("SLASH");
public static final IElementType ADD_ASSIGN = new GLSLElementType("ADD_ASSIGN");
public static final IElementType PLUS = new GLSLElementType("PLUS");
public static final IElementType SUB_ASSIGN = new GLSLElementType("SUB_ASSIGN");
public static final IElementType DASH = new GLSLElementType("DASH");
public static final IElementType MOD_ASSIGN = new GLSLElementType("MOD_ASSIGN");
public static final IElementType PERCENT = new GLSLElementType("PERCENT");
public static final IElementType LEFT_ASSIGN = new GLSLElementType("LEFT_ASSIGN");
public static final IElementType LEFT_OP = new GLSLElementType("LEFT_OP");
public static final IElementType RIGHT_ASSIGN = new GLSLElementType("RIGHT_ASSIGN");
public static final IElementType RIGHT_OP = new GLSLElementType("RIGHT_OP");
public static final IElementType AND_ASSIGN = new GLSLElementType("AND_ASSIGN");
public static final IElementType AMPERSAND = new GLSLElementType("AMPERSAND");
public static final IElementType XOR_ASSIGN = new GLSLElementType("XOR_ASSIGN");
public static final IElementType CARET = new GLSLElementType("CARET");
public static final IElementType OR_ASSIGN = new GLSLElementType("OR_ASSIGN");
public static final IElementType VERTICAL_BAR = new GLSLElementType("VERTICAL_BAR");
public static final IElementType TILDE = new GLSLElementType("TILDE");
public static final IElementType DEC_OP = new GLSLElementType("DEC_OP");
public static final IElementType INC_OP = new GLSLElementType("INC_OP");
public static final IElementType EQ_OP = new GLSLElementType("EQ_OP");
public static final IElementType LEFT_ANGLE = new GLSLElementType("LEFT_ANGLE");
public static final IElementType RIGHT_ANGLE = new GLSLElementType("RIGHT_ANGLE");
public static final IElementType GE_OP = new GLSLElementType("GE_OP");
public static final IElementType LE_OP = new GLSLElementType("LE_OP");
public static final IElementType NE_OP = new GLSLElementType("NE_OP");
public static final IElementType AND_OP = new GLSLElementType("AND_OP");
public static final IElementType OR_OP = new GLSLElementType("OR_OP");
public static final IElementType XOR_OP = new GLSLElementType("XOR_OP");
public static final IElementType QUESTION = new GLSLElementType("QUESTION");
public static final IElementType COLON = new GLSLElementType("COLON");
public static final IElementType BANG = new GLSLElementType("BANG");
public static final IElementType DOT = new GLSLElementType("DOT");
public static final IElementType SEMICOLON = new GLSLElementType("SEMICOLON");
public static final IElementType COMMA = new GLSLElementType("COMMA");
public static final IElementType WHITE_SPACE = TokenType.WHITE_SPACE;
public static final IElementType UNKNOWN = new GLSLElementType("UNKNOWN");
public static final IElementType PREPROCESSOR_BEGIN = new GLSLElementType("PREPROCESSOR_BEGIN");
public static final IElementType PREPROCESSOR_END = new GLSLElementType("PREPROCESSOR_END");
public static final IElementType PREPROCESSOR_DEFINE = new GLSLElementType("PREPROCESSOR_DEFINE");
public static final IElementType PREPROCESSOR_UNDEF = new GLSLElementType("PREPROCESSOR_UNDEF");
public static final IElementType PREPROCESSOR_IF = new GLSLElementType("PREPROCESSOR_IF");
public static final IElementType PREPROCESSOR_IFDEF = new GLSLElementType("PREPROCESSOR_IFDEF");
public static final IElementType PREPROCESSOR_IFNDEF = new GLSLElementType("PREPROCESSOR_IFNDEF");
public static final IElementType PREPROCESSOR_ELSE = new GLSLElementType("PREPROCESSOR_ELSE");
public static final IElementType PREPROCESSOR_ELIF = new GLSLElementType("PREPROCESSOR_ELIF");
public static final IElementType PREPROCESSOR_ENDIF = new GLSLElementType("PREPROCESSOR_ENDIF");
public static final IElementType PREPROCESSOR_ERROR = new GLSLElementType("PREPROCESSOR_ERROR");
public static final IElementType PREPROCESSOR_PRAGMA = new GLSLElementType("PREPROCESSOR_PRAGMA");
public static final IElementType PREPROCESSOR_EXTENSION = new GLSLElementType("PREPROCESSOR_EXTENSION");
public static final IElementType PREPROCESSOR_VERSION = new GLSLElementType("PREPROCESSOR_VERSION");
public static final IElementType PREPROCESSOR_LINE = new GLSLElementType("PREPROCESSOR_LINE");
public static final IElementType PREPROCESSOR_DEFINED = new GLSLElementType("PREPROCESSOR_DEFINED");
public static final IElementType PREPROCESSOR_CONCAT = new GLSLElementType("PREPROCESSOR_CONCAT");
public static final IElementType PREPROCESSOR_STRING = new GLSLElementType("PREPROCESSOR_STRING");
/** Not returned by lexer but used instead of PREPROCESSOR_[something] when the kind of directive is unknown */
public static final IElementType PREPROCESSOR_OTHER = new GLSLElementType("PREPROCESSOR_OTHER");
public static final IElementType RESERVED_KEYWORD = new GLSLElementType("RESERVED_KEYWORD");
public static final TokenSet PREPROCESSOR_DIRECTIVES = TokenSet.create(
PREPROCESSOR_BEGIN,
PREPROCESSOR_END,
PREPROCESSOR_DEFINE,
PREPROCESSOR_UNDEF,
PREPROCESSOR_IF,
PREPROCESSOR_IFDEF,
PREPROCESSOR_IFNDEF,
PREPROCESSOR_ELSE,
PREPROCESSOR_ELIF,
PREPROCESSOR_ENDIF,
PREPROCESSOR_ERROR,
PREPROCESSOR_PRAGMA,
PREPROCESSOR_EXTENSION,
PREPROCESSOR_VERSION,
PREPROCESSOR_LINE,
PREPROCESSOR_DEFINED,
PREPROCESSOR_CONCAT,
PREPROCESSOR_OTHER);
// Type specifiers
public static final TokenSet FLOAT_TYPE_SPECIFIER_NONARRAY = TokenSet.create(
FLOAT_TYPE, VEC2_TYPE, VEC3_TYPE, VEC4_TYPE,
DOUBLE_TYPE, DVEC2_TYPE, DVEC3_TYPE, DVEC4_TYPE);
public static final TokenSet INTEGER_TYPE_SPECIFIER_NONARRAY = TokenSet.create(
INT_TYPE, IVEC2_TYPE, IVEC3_TYPE, IVEC4_TYPE,
UINT_TYPE, UVEC2_TYPE, UVEC3_TYPE, UVEC4_TYPE);
public static final TokenSet BOOL_TYPE_SPECIFIER_NONARRAY = TokenSet.create(BOOL_TYPE, BVEC2_TYPE, BVEC3_TYPE, BVEC4_TYPE);
public static final TokenSet MATRIX_TYPE_SPECIFIER_NONARRAY = TokenSet.create(
MAT2_TYPE, MAT3_TYPE, MAT4_TYPE,
MAT2X2_TYPE, MAT2X3_TYPE, MAT2X4_TYPE,
MAT3X2_TYPE, MAT3X3_TYPE, MAT3X4_TYPE,
MAT4X2_TYPE, MAT4X3_TYPE, MAT4X4_TYPE,
DMAT2_TYPE, DMAT3_TYPE, DMAT4_TYPE,
DMAT2X2_TYPE, DMAT2X3_TYPE, DMAT2X4_TYPE,
DMAT3X2_TYPE, DMAT3X3_TYPE, DMAT3X4_TYPE,
DMAT4X2_TYPE, DMAT4X3_TYPE, DMAT4X4_TYPE);
public static final TokenSet OPAQUE_TYPE_SPECIFIER_NONARRAY =
TokenSet.create(SAMPLER_TYPE, ATOMIC_UINT_TYPE);
public static final TokenSet TYPE_SPECIFIER_NONARRAY_TOKENS =
merge(TokenSet.create(VOID_TYPE), FLOAT_TYPE_SPECIFIER_NONARRAY, INTEGER_TYPE_SPECIFIER_NONARRAY,
BOOL_TYPE_SPECIFIER_NONARRAY, MATRIX_TYPE_SPECIFIER_NONARRAY, OPAQUE_TYPE_SPECIFIER_NONARRAY,
TokenSet.create(STRUCT, NAMED_TYPE));
//
//When modifying, don't forget to modify GLSLQualifier as well
public static final TokenSet QUALIFIER_TOKENS = TokenSet.create(
//GLSL Storage qualifiers
CONST_KEYWORD,
ATTRIBUTE_KEYWORD,
UNIFORM_KEYWORD,
VARYING_KEYWORD,
CENTROID_KEYWORD,
PATCH_KEYWORD,
SAMPLE_KEYWORD,
BUFFER_KEYWORD,
SHARED_KEYWORD,
//GLSL Memory qualifiers
COHERENT_KEYWORD,
VOLATILE_KEYWORD,
RESTRICT_KEYWORD,
READONLY_KEYWORD,
WRITEONLY_KEYWORD,
//GLSL Invariant qualifier
INVARIANT_KEYWORD,
//GLSL Subroutine qualifier
SUBROUTINE_KEYWORD,
//GLSL Precise qualifier
PRECISE_KEYWORD,
//GLSL Precision qualifiers
HIGHP_KEYWORD,
MEDIUMP_KEYWORD,
LOWP_KEYWORD,
//GLSL Parameter modifiers
IN_KEYWORD,
OUT_KEYWORD,
INOUT_KEYWORD,
//GLSL Interpolation modifiers
SMOOTH_KEYWORD,
FLAT_KEYWORD,
NOPERSPECTIVE_KEYWORD,
//GLSL Layout qualifiers
LAYOUT_KEYWORD);
public static final TokenSet PRECISION_QUALIFIER_TOKENS = TokenSet.create(HIGHP_KEYWORD, MEDIUMP_KEYWORD, LOWP_KEYWORD);
// A subset of QUALIFIER_TOKENS which can be used for interface block definition
public static final TokenSet INTERFACE_QUALIFIER_TOKENS = TokenSet.create(
IN_KEYWORD,
OUT_KEYWORD,
UNIFORM_KEYWORD,
BUFFER_KEYWORD
);
public static final TokenSet COMMENTS = TokenSet.create(COMMENT_BLOCK, COMMENT_LINE);
public static final TokenSet ITERATION_KEYWORDS = TokenSet.create(WHILE_KEYWORD, DO_KEYWORD, FOR_KEYWORD);
public static final TokenSet JUMP_KEYWORDS = TokenSet.create(BREAK_JUMP_STATEMENT, CONTINUE_JUMP_STATEMENT, RETURN_JUMP_STATEMENT, DISCARD_JUMP_STATEMENT, CASE_KEYWORD, DEFAULT_KEYWORD);
public static final TokenSet SELECTION_KEYWORDS = TokenSet.create(IF_KEYWORD, ELSE_KEYWORD, SWITCH_KEYWORD);
public static final TokenSet FLOW_KEYWORDS = merge(SELECTION_KEYWORDS, JUMP_KEYWORDS, ITERATION_KEYWORDS);
//Operators in order of precedence (high to low) (Doesn't have to be here, but for clarity)
//(missing) postfix inc & dec
public static final TokenSet UNARY_OPERATORS = TokenSet.create(INC_OP, DEC_OP, PLUS, DASH, BANG, TILDE);
public static final TokenSet MULTIPLICATIVE_OPERATORS = TokenSet.create(STAR, SLASH, PERCENT);
public static final TokenSet ADDITIVE_OPERATORS = TokenSet.create(PLUS, DASH);
public static final TokenSet BIT_SHIFT_OPERATORS = TokenSet.create(LEFT_OP, RIGHT_OP);
public static final TokenSet RELATIONAL_OPERATORS = TokenSet.create(LEFT_ANGLE, RIGHT_ANGLE, LE_OP, GE_OP);
public static final TokenSet EQUALITY_OPERATORS = TokenSet.create(EQ_OP, NE_OP);
public static final TokenSet BIT_WISE_OPERATORS = TokenSet.create(AMPERSAND, CARET, VERTICAL_BAR);//In this order, separately
public static final TokenSet LOGICAL_OPERATORS = TokenSet.create(AND_OP, XOR_OP, OR_OP);//In this order, separately
//(missing) selection (? :)
public static final TokenSet ASSIGNMENT_OPERATORS = TokenSet.create(EQUAL, MUL_ASSIGN, DIV_ASSIGN, ADD_ASSIGN, SUB_ASSIGN, MOD_ASSIGN, LEFT_ASSIGN, RIGHT_ASSIGN, AND_ASSIGN, XOR_ASSIGN, OR_ASSIGN);
public static final TokenSet OPERATORS = merge(
UNARY_OPERATORS, MULTIPLICATIVE_OPERATORS, ADDITIVE_OPERATORS,
BIT_SHIFT_OPERATORS, RELATIONAL_OPERATORS, EQUALITY_OPERATORS,
BIT_WISE_OPERATORS, LOGICAL_OPERATORS, ASSIGNMENT_OPERATORS);
public static final TokenSet CONSTANT_TOKENS = TokenSet.create(
BOOL_CONSTANT, INTEGER_CONSTANT, UINT_CONSTANT, FLOAT_CONSTANT, DOUBLE_CONSTANT);
public static final TokenSet EXPRESSION_FIRST_SET = merge(TokenSet.create(
INTEGER_CONSTANT, FLOAT_CONSTANT, BOOL_CONSTANT, // constants
INC_OP, DEC_OP, PLUS, DASH, BANG, TILDE, // unary operators
IDENTIFIER, // function call, variable name, typename
LEFT_PAREN, // group
SEMICOLON // empty statement
),
TYPE_SPECIFIER_NONARRAY_TOKENS
);
public static final TokenSet STATEMENT_FIRST_SET = merge(TokenSet.create(
LEFT_BRACE, // compound_statement
BREAK_JUMP_STATEMENT, CONTINUE_JUMP_STATEMENT, RETURN_JUMP_STATEMENT, CASE_KEYWORD, DEFAULT_KEYWORD,
DISCARD_JUMP_STATEMENT, IF_KEYWORD,
DO_KEYWORD, FOR_KEYWORD, WHILE_KEYWORD, SWITCH_KEYWORD // flow control
),
QUALIFIER_TOKENS,
EXPRESSION_FIRST_SET
);
public static TokenSet merge(TokenSet... sets) {
TokenSet tokenSet = TokenSet.create();
for (TokenSet set : sets) {
tokenSet = TokenSet.orSet(tokenSet, set);
}
return tokenSet;
}
}