/* A Bison parser, made by GNU Bison 3.4.2.  */

/* Bison interface for Yacc-like parsers in C

   Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation,
   Inc.

   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.

   This program 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 General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */

/* As a special exception, you may create a larger work that contains
   part or all of the Bison parser skeleton and distribute that work
   under terms of your choice, so long as that work isn't itself a
   parser generator using the skeleton or a modified version thereof
   as a parser skeleton.  Alternatively, if you modify or redistribute
   the parser skeleton itself, you may (at your option) remove this
   special exception, which will cause the skeleton and the resulting
   Bison output files to be licensed under the GNU General Public
   License without this special exception.

   This special exception was added by the Free Software Foundation in
   version 2.2 of Bison.  */

/* Undocumented macros, especially those whose name start with YY_,
   are private implementation details.  Do not rely on them.  */

#ifndef YY_CMDEPENDSJAVA_YY_CMDEPENDSJAVAPARSERTOKENS_H_INCLUDED
# define YY_CMDEPENDSJAVA_YY_CMDEPENDSJAVAPARSERTOKENS_H_INCLUDED
/* Debug traces.  */
#ifndef YYDEBUG
# define YYDEBUG 0
#endif
#if YYDEBUG
extern int cmDependsJava_yydebug;
#endif

/* Token type.  */
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
  enum yytokentype
  {
    jp_ABSTRACT = 258,
    jp_ASSERT = 259,
    jp_BOOLEAN_TYPE = 260,
    jp_BREAK = 261,
    jp_BYTE_TYPE = 262,
    jp_CASE = 263,
    jp_CATCH = 264,
    jp_CHAR_TYPE = 265,
    jp_CLASS = 266,
    jp_CONTINUE = 267,
    jp_DEFAULT = 268,
    jp_DO = 269,
    jp_DOUBLE_TYPE = 270,
    jp_ELSE = 271,
    jp_EXTENDS = 272,
    jp_FINAL = 273,
    jp_FINALLY = 274,
    jp_FLOAT_TYPE = 275,
    jp_FOR = 276,
    jp_IF = 277,
    jp_IMPLEMENTS = 278,
    jp_IMPORT = 279,
    jp_INSTANCEOF = 280,
    jp_INT_TYPE = 281,
    jp_INTERFACE = 282,
    jp_LONG_TYPE = 283,
    jp_NATIVE = 284,
    jp_NEW = 285,
    jp_PACKAGE = 286,
    jp_PRIVATE = 287,
    jp_PROTECTED = 288,
    jp_PUBLIC = 289,
    jp_RETURN = 290,
    jp_SHORT_TYPE = 291,
    jp_STATIC = 292,
    jp_STRICTFP = 293,
    jp_SUPER = 294,
    jp_SWITCH = 295,
    jp_SYNCHRONIZED = 296,
    jp_THIS = 297,
    jp_THROW = 298,
    jp_THROWS = 299,
    jp_TRANSIENT = 300,
    jp_TRY = 301,
    jp_VOID = 302,
    jp_VOLATILE = 303,
    jp_WHILE = 304,
    jp_BOOLEANLITERAL = 305,
    jp_CHARACTERLITERAL = 306,
    jp_DECIMALINTEGERLITERAL = 307,
    jp_FLOATINGPOINTLITERAL = 308,
    jp_HEXINTEGERLITERAL = 309,
    jp_NULLLITERAL = 310,
    jp_STRINGLITERAL = 311,
    jp_NAME = 312,
    jp_AND = 313,
    jp_ANDAND = 314,
    jp_ANDEQUALS = 315,
    jp_BRACKETEND = 316,
    jp_BRACKETSTART = 317,
    jp_CARROT = 318,
    jp_CARROTEQUALS = 319,
    jp_COLON = 320,
    jp_COMMA = 321,
    jp_CURLYEND = 322,
    jp_CURLYSTART = 323,
    jp_DIVIDE = 324,
    jp_DIVIDEEQUALS = 325,
    jp_DOLLAR = 326,
    jp_DOT = 327,
    jp_EQUALS = 328,
    jp_EQUALSEQUALS = 329,
    jp_EXCLAMATION = 330,
    jp_EXCLAMATIONEQUALS = 331,
    jp_GREATER = 332,
    jp_GTEQUALS = 333,
    jp_GTGT = 334,
    jp_GTGTEQUALS = 335,
    jp_GTGTGT = 336,
    jp_GTGTGTEQUALS = 337,
    jp_LESLESEQUALS = 338,
    jp_LESSTHAN = 339,
    jp_LTEQUALS = 340,
    jp_LTLT = 341,
    jp_MINUS = 342,
    jp_MINUSEQUALS = 343,
    jp_MINUSMINUS = 344,
    jp_PAREEND = 345,
    jp_PARESTART = 346,
    jp_PERCENT = 347,
    jp_PERCENTEQUALS = 348,
    jp_PIPE = 349,
    jp_PIPEEQUALS = 350,
    jp_PIPEPIPE = 351,
    jp_PLUS = 352,
    jp_PLUSEQUALS = 353,
    jp_PLUSPLUS = 354,
    jp_QUESTION = 355,
    jp_SEMICOL = 356,
    jp_TILDE = 357,
    jp_TIMES = 358,
    jp_TIMESEQUALS = 359,
    jp_ERROR = 360
  };
#endif
/* Tokens.  */
#define jp_ABSTRACT 258
#define jp_ASSERT 259
#define jp_BOOLEAN_TYPE 260
#define jp_BREAK 261
#define jp_BYTE_TYPE 262
#define jp_CASE 263
#define jp_CATCH 264
#define jp_CHAR_TYPE 265
#define jp_CLASS 266
#define jp_CONTINUE 267
#define jp_DEFAULT 268
#define jp_DO 269
#define jp_DOUBLE_TYPE 270
#define jp_ELSE 271
#define jp_EXTENDS 272
#define jp_FINAL 273
#define jp_FINALLY 274
#define jp_FLOAT_TYPE 275
#define jp_FOR 276
#define jp_IF 277
#define jp_IMPLEMENTS 278
#define jp_IMPORT 279
#define jp_INSTANCEOF 280
#define jp_INT_TYPE 281
#define jp_INTERFACE 282
#define jp_LONG_TYPE 283
#define jp_NATIVE 284
#define jp_NEW 285
#define jp_PACKAGE 286
#define jp_PRIVATE 287
#define jp_PROTECTED 288
#define jp_PUBLIC 289
#define jp_RETURN 290
#define jp_SHORT_TYPE 291
#define jp_STATIC 292
#define jp_STRICTFP 293
#define jp_SUPER 294
#define jp_SWITCH 295
#define jp_SYNCHRONIZED 296
#define jp_THIS 297
#define jp_THROW 298
#define jp_THROWS 299
#define jp_TRANSIENT 300
#define jp_TRY 301
#define jp_VOID 302
#define jp_VOLATILE 303
#define jp_WHILE 304
#define jp_BOOLEANLITERAL 305
#define jp_CHARACTERLITERAL 306
#define jp_DECIMALINTEGERLITERAL 307
#define jp_FLOATINGPOINTLITERAL 308
#define jp_HEXINTEGERLITERAL 309
#define jp_NULLLITERAL 310
#define jp_STRINGLITERAL 311
#define jp_NAME 312
#define jp_AND 313
#define jp_ANDAND 314
#define jp_ANDEQUALS 315
#define jp_BRACKETEND 316
#define jp_BRACKETSTART 317
#define jp_CARROT 318
#define jp_CARROTEQUALS 319
#define jp_COLON 320
#define jp_COMMA 321
#define jp_CURLYEND 322
#define jp_CURLYSTART 323
#define jp_DIVIDE 324
#define jp_DIVIDEEQUALS 325
#define jp_DOLLAR 326
#define jp_DOT 327
#define jp_EQUALS 328
#define jp_EQUALSEQUALS 329
#define jp_EXCLAMATION 330
#define jp_EXCLAMATIONEQUALS 331
#define jp_GREATER 332
#define jp_GTEQUALS 333
#define jp_GTGT 334
#define jp_GTGTEQUALS 335
#define jp_GTGTGT 336
#define jp_GTGTGTEQUALS 337
#define jp_LESLESEQUALS 338
#define jp_LESSTHAN 339
#define jp_LTEQUALS 340
#define jp_LTLT 341
#define jp_MINUS 342
#define jp_MINUSEQUALS 343
#define jp_MINUSMINUS 344
#define jp_PAREEND 345
#define jp_PARESTART 346
#define jp_PERCENT 347
#define jp_PERCENTEQUALS 348
#define jp_PIPE 349
#define jp_PIPEEQUALS 350
#define jp_PIPEPIPE 351
#define jp_PLUS 352
#define jp_PLUSEQUALS 353
#define jp_PLUSPLUS 354
#define jp_QUESTION 355
#define jp_SEMICOL 356
#define jp_TILDE 357
#define jp_TIMES 358
#define jp_TIMESEQUALS 359
#define jp_ERROR 360

/* Value type.  */



int cmDependsJava_yyparse (yyscan_t yyscanner);

#endif /* !YY_CMDEPENDSJAVA_YY_CMDEPENDSJAVAPARSERTOKENS_H_INCLUDED  */
