%{
/* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
   file Copyright.txt or https://cmake.org/licensing for details.  */
/*

This file must be translated to C and modified to build everywhere.

Run bison like this:

  bison --yacc --name-prefix=cmDependsJava_yy --defines=cmDependsJavaParserTokens.h -ocmDependsJavaParser.cxx cmDependsJavaParser.y

Modify cmDependsJavaParser.cxx:
  - "#if 0" out yyerrorlab block in range ["goto yyerrlab1", "yyerrlab1:"]

*/

#include "cmConfigure.h" // IWYU pragma: keep

#include <stdlib.h>
#include <string.h>
#include <string>

#define yyGetParser (cmDependsJava_yyget_extra(yyscanner))

/*-------------------------------------------------------------------------*/
#include "cmDependsJavaParserHelper.h" /* Interface to parser object.  */
#include "cmDependsJavaLexer.h"  /* Interface to lexer object.  */
#include "cmDependsJavaParserTokens.h" /* Need YYSTYPE for YY_DECL.  */

/* Forward declare the lexer entry point.  */
YY_DECL;

/* Helper function to forward error callback from parser.  */
static void cmDependsJava_yyerror(yyscan_t yyscanner, const char* message);

#define YYMAXDEPTH 1000000


#define jpCheckEmpty(cnt) yyGetParser->CheckEmpty(__LINE__, cnt, yyvsp)
#define jpElementStart(cnt) yyGetParser->PrepareElement(&yyval)
#define jpStoreClass(str) yyGetParser->AddClassFound(str); yyGetParser->DeallocateParserType(&(str))
/* Disable some warnings in the generated code.  */
#ifdef _MSC_VER
# pragma warning (disable: 4102) /* Unused goto label.  */
# pragma warning (disable: 4065) /* Switch statement contains default but no case. */
#endif
#if defined(__GNUC__) && __GNUC__ >= 8
# pragma GCC diagnostic ignored "-Wconversion"
#endif
%}

/* Generate a reentrant parser object.  */
%define api.pure

/* Configure the parser to use a lexer object.  */
%lex-param   {yyscan_t yyscanner}
%parse-param {yyscan_t yyscanner}

%define parse.error verbose

/*
%union {
  char* string;
}
*/

/*-------------------------------------------------------------------------*/
/* Tokens */
%token jp_ABSTRACT
%token jp_ASSERT
%token jp_BOOLEAN_TYPE
%token jp_BREAK
%token jp_BYTE_TYPE
%token jp_CASE
%token jp_CATCH
%token jp_CHAR_TYPE
%token jp_CLASS
%token jp_CONTINUE
%token jp_DEFAULT
%token jp_DO
%token jp_DOUBLE_TYPE
%token jp_ELSE
%token jp_EXTENDS
%token jp_FINAL
%token jp_FINALLY
%token jp_FLOAT_TYPE
%token jp_FOR
%token jp_IF
%token jp_IMPLEMENTS
%token jp_IMPORT
%token jp_INSTANCEOF
%token jp_INT_TYPE
%token jp_INTERFACE
%token jp_LONG_TYPE
%token jp_NATIVE
%token jp_NEW
%token jp_PACKAGE
%token jp_PRIVATE
%token jp_PROTECTED
%token jp_PUBLIC
%token jp_RETURN
%token jp_SHORT_TYPE
%token jp_STATIC
%token jp_STRICTFP
%token jp_SUPER
%token jp_SWITCH
%token jp_SYNCHRONIZED
%token jp_THIS
%token jp_THROW
%token jp_THROWS
%token jp_TRANSIENT
%token jp_TRY
%token jp_VOID
%token jp_VOLATILE
%token jp_WHILE

%token jp_BOOLEANLITERAL
%token jp_CHARACTERLITERAL
%token jp_DECIMALINTEGERLITERAL
%token jp_FLOATINGPOINTLITERAL
%token jp_HEXINTEGERLITERAL
%token jp_NULLLITERAL
%token jp_STRINGLITERAL

%token jp_NAME

%token jp_AND
%token jp_ANDAND
%token jp_ANDEQUALS
%token jp_BRACKETEND
%token jp_BRACKETSTART
%token jp_CARROT
%token jp_CARROTEQUALS
%token jp_COLON
%token jp_COMMA
%token jp_CURLYEND
%token jp_CURLYSTART
%token jp_DIVIDE
%token jp_DIVIDEEQUALS
%token jp_DOLLAR
%token jp_DOT
%token jp_EQUALS
%token jp_EQUALSEQUALS
%token jp_EXCLAMATION
%token jp_EXCLAMATIONEQUALS
%token jp_GREATER
%token jp_GTEQUALS
%token jp_GTGT
%token jp_GTGTEQUALS
%token jp_GTGTGT
%token jp_GTGTGTEQUALS
%token jp_LESLESEQUALS
%token jp_LESSTHAN
%token jp_LTEQUALS
%token jp_LTLT
%token jp_MINUS
%token jp_MINUSEQUALS
%token jp_MINUSMINUS
%token jp_PAREEND
%token jp_PARESTART
%token jp_PERCENT
%token jp_PERCENTEQUALS
%token jp_PIPE
%token jp_PIPEEQUALS
%token jp_PIPEPIPE
%token jp_PLUS
%token jp_PLUSEQUALS
%token jp_PLUSPLUS
%token jp_QUESTION
%token jp_SEMICOL
%token jp_TILDE
%token jp_TIMES
%token jp_TIMESEQUALS

%token jp_ERROR

/*-------------------------------------------------------------------------*/
/* grammar */
%%

Goal:
CompilationUnit
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}

Literal:
IntegerLiteral
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}
|
jp_FLOATINGPOINTLITERAL
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}
|
jp_BOOLEANLITERAL
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}
|
jp_CHARACTERLITERAL
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}
|
jp_STRINGLITERAL
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}
|
jp_NULLLITERAL
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}

IntegerLiteral:
jp_DECIMALINTEGERLITERAL
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}
|
jp_HEXINTEGERLITERAL
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}

Type:
PrimitiveType
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}
|
ReferenceType
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}

PrimitiveType:
jp_BYTE_TYPE
{
  jpElementStart(0);
}
|
jp_SHORT_TYPE
{
  jpElementStart(0);
}
|
jp_INT_TYPE
{
  jpElementStart(0);
}
|
jp_LONG_TYPE
{
  jpElementStart(0);
}
|
jp_CHAR_TYPE
{
  jpElementStart(0);
}
|
jp_FLOAT_TYPE
{
  jpElementStart(0);
}
|
jp_DOUBLE_TYPE
{
  jpElementStart(0);
}
|
jp_BOOLEAN_TYPE
{
  jpElementStart(0);
}

ReferenceType:
ClassOrInterfaceType
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}
|
ArrayType
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}

ClassOrInterfaceType:
Name
{
  jpElementStart(1);
  jpStoreClass($<str>1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}

ClassType:
ClassOrInterfaceType
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}

InterfaceType:
ClassOrInterfaceType
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}

ArrayType:
PrimitiveType Dims
{
  jpElementStart(2);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}
|
Name Dims
{
  jpElementStart(2);
  jpStoreClass($<str>1);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}

Name:
SimpleName
{
  jpElementStart(1);
  $<str>$ = $<str>1;
}
|
QualifiedName
{
  jpElementStart(1);
  $<str>$ = $<str>1;
}

SimpleName:
Identifier
{
  jpElementStart(1);
  $<str>$ = $<str>1;
}

Identifier:
jp_NAME
{
  jpElementStart(1);
  $<str>$ = $<str>1;
}
|
jp_DOLLAR jp_NAME
{
  jpElementStart(2);
  $<str>$ = $<str>2;
}

QualifiedName:
Name jp_DOT Identifier
{
  jpElementStart(3);
  yyGetParser->AddClassFound($<str>1);
  yyGetParser->UpdateCombine($<str>1, $<str>3);
  yyGetParser->DeallocateParserType(&($<str>1));
  $<str>$ = const_cast<char*>(yyGetParser->GetCurrentCombine());
}
|
Name jp_DOT jp_CLASS
{
  jpElementStart(3);
  jpStoreClass($<str>1);
  jpCheckEmpty(3);
  yyGetParser->SetCurrentCombine("");
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}
|
Name jp_DOT jp_THIS
{
  jpElementStart(3);
  jpStoreClass($<str>1);
  yyGetParser->SetCurrentCombine("");
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}
|
SimpleType jp_DOT jp_CLASS
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}

SimpleType:
PrimitiveType
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}
|
jp_VOID
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}

CompilationUnit:
PackageDeclarationopt ImportDeclarations TypeDeclarations
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}

PackageDeclarationopt:
{
  jpElementStart(0);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}
|
PackageDeclaration
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}

ImportDeclarations:
{
  jpElementStart(0);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}
|
ImportDeclarations ImportDeclaration
{
  jpElementStart(2);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}

TypeDeclarations:
{
  jpElementStart(0);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}
|
TypeDeclarations TypeDeclaration
{
  jpElementStart(2);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}

PackageDeclaration:
jp_PACKAGE Name jp_SEMICOL
{
  jpElementStart(3);
  yyGetParser->SetCurrentPackage($<str>2);
  yyGetParser->DeallocateParserType(&($<str>2));
  yyGetParser->SetCurrentCombine("");
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}

ImportDeclaration:
SingleTypeImportDeclaration
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}
|
TypeImportOnDemandDeclaration
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}

SingleTypeImportDeclaration:
jp_IMPORT Name jp_SEMICOL
{
  jpElementStart(3);
  yyGetParser->AddPackagesImport($<str>2);
  yyGetParser->DeallocateParserType(&($<str>2));
  yyGetParser->SetCurrentCombine("");
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}

TypeImportOnDemandDeclaration:
jp_IMPORT Name jp_DOT jp_TIMES jp_SEMICOL
{
  jpElementStart(5);
  std::string str = $<str>2;
  str += ".*";
  yyGetParser->AddPackagesImport(str.c_str());
  yyGetParser->DeallocateParserType(&($<str>2));
  yyGetParser->SetCurrentCombine("");
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}

TypeDeclaration:
ClassDeclaration
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}
|
InterfaceDeclaration
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}
|
jp_SEMICOL
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}

Modifiers:
Modifier
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}
|
Modifiers Modifier
{
  jpElementStart(2);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}

Modifier:
jp_PUBLIC | jp_PROTECTED | jp_PRIVATE |
jp_STATIC |
jp_ABSTRACT | jp_FINAL | jp_NATIVE | jp_SYNCHRONIZED | jp_TRANSIENT | jp_VOLATILE |
jp_STRICTFP

ClassHeader:
Modifiersopt jp_CLASS Identifier
{
  yyGetParser->StartClass($<str>3);
  jpElementStart(3);
  yyGetParser->DeallocateParserType(&($<str>3));
  jpCheckEmpty(3);
}


ClassDeclaration:
ClassHeader ClassBody
{
  jpElementStart(2);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
  yyGetParser->EndClass();
}
|
ClassHeader Interfaces ClassBody
{
  jpElementStart(3);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
  yyGetParser->EndClass();
}
|
ClassHeader Super ClassBody
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
  yyGetParser->EndClass();
}
|
ClassHeader Super Interfaces ClassBody
{
  jpElementStart(4);
  jpCheckEmpty(4);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
  yyGetParser->EndClass();
}

Modifiersopt:
{
  jpElementStart(0);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}
|
Modifiers
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}

Super:
jp_EXTENDS ClassType
{
  jpElementStart(2);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}

Interfaces:
jp_IMPLEMENTS InterfaceTypeList
{
  jpElementStart(2);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}

InterfaceTypeList:
InterfaceType
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}
|
InterfaceTypeList jp_COMMA InterfaceType
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}

ClassBody:
jp_CURLYSTART ClassBodyDeclarations jp_CURLYEND
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}

ClassBodyDeclarations:
{
  jpElementStart(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}
|
ClassBodyDeclarations ClassBodyDeclaration
{
  jpElementStart(2);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}

ClassBodyDeclaration:
ClassMemberDeclaration
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}
|
StaticInitializer
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}
|
ConstructorDeclaration
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}
|
TypeDeclaration
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}

ClassMemberDeclaration:
FieldDeclaration
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}
|
MethodDeclaration
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}

FieldDeclaration:
Modifiersopt Type VariableDeclarators jp_SEMICOL
{
  jpElementStart(4);
}

VariableDeclarators:
VariableDeclarator
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}
|
VariableDeclarators jp_COMMA VariableDeclarator
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}

VariableDeclarator:
VariableDeclaratorId
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}
|
VariableDeclaratorId jp_EQUALS VariableInitializer
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}

VariableDeclaratorId:
Identifier
{
  jpElementStart(1);
  yyGetParser->DeallocateParserType(&($<str>1));
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}
|
VariableDeclaratorId jp_BRACKETSTART jp_BRACKETEND
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}

VariableInitializer:
Expression
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}
|
ArrayInitializer
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}

MethodDeclaration:
MethodHeader jp_SEMICOL
{
  jpElementStart(2);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}
|
MethodHeader MethodBody
{
  jpElementStart(2);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}
|
MethodHeader MethodBody jp_SEMICOL
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}

MethodHeader:
Modifiersopt Type MethodDeclarator Throwsopt
{
  jpElementStart(4);
  jpCheckEmpty(4);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
Modifiersopt jp_VOID MethodDeclarator Throwsopt
{
  jpElementStart(4);
  jpCheckEmpty(4);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

Throwsopt:
{
  jpElementStart(0);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
Throws
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

MethodDeclarator:
Identifier jp_PARESTART FormalParameterListopt jp_PAREEND
{
  jpElementStart(4);
  yyGetParser->DeallocateParserType(&($<str>1));
  jpCheckEmpty(4);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
MethodDeclarator jp_BRACKETSTART jp_BRACKETEND
{
  jpElementStart(3);

}

FormalParameterListopt:
{
  jpElementStart(0);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
FormalParameterList

FormalParameterList:
FormalParameter
{
  jpElementStart(1);

}
|
FormalParameterList jp_COMMA FormalParameter
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

FormalParameter:
Modifiersopt Type VariableDeclaratorId
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

Throws:
jp_THROWS ClassTypeList
{
  jpElementStart(2);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

ClassTypeList:
ClassType
{
  jpElementStart(1);

}
|
ClassTypeList jp_COMMA ClassType
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

MethodBody:
Block
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

StaticInitializer:
jp_STATIC Block
{
  jpElementStart(2);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

ConstructorDeclaration:
Modifiersopt ConstructorDeclarator Throwsopt ConstructorBody
{
  jpElementStart(4);
  jpCheckEmpty(4);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
Modifiersopt ConstructorDeclarator Throwsopt ConstructorBody jp_SEMICOL
{
  jpElementStart(5);
  jpCheckEmpty(5);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

ConstructorDeclarator:
SimpleName jp_PARESTART FormalParameterListopt jp_PAREEND
{
  jpElementStart(4);
  yyGetParser->DeallocateParserType(&($<str>1));
  jpCheckEmpty(4);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

ConstructorBody:
jp_CURLYSTART ExplicitConstructorInvocationopt BlockStatementsopt jp_CURLYEND
{
  jpElementStart(4);
  jpCheckEmpty(4);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

ExplicitConstructorInvocationopt:
{
  jpElementStart(0);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
ExplicitConstructorInvocationopt ExplicitConstructorInvocation
{
  jpElementStart(2);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

ExplicitConstructorInvocation:
jp_THIS jp_PARESTART ArgumentListopt jp_PAREEND jp_SEMICOL
{
  jpElementStart(5);
  jpCheckEmpty(5);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
jp_SUPER jp_PARESTART ArgumentListopt jp_PAREEND jp_SEMICOL
{
  jpElementStart(5);
  jpCheckEmpty(5);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

InterfaceHeader:
Modifiersopt jp_INTERFACE Identifier
{
  yyGetParser->StartClass($<str>3);
  jpElementStart(3);
  yyGetParser->DeallocateParserType(&($<str>3));
  jpCheckEmpty(3);
}

InterfaceDeclaration:
InterfaceHeader ExtendsInterfacesopt InterfaceBody
{
  jpElementStart(2);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
  yyGetParser->EndClass();
}

ExtendsInterfacesopt:
{
  jpElementStart(0);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");
}
|
ExtendsInterfaces
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

ExtendsInterfaces:
jp_EXTENDS InterfaceType
{
  jpElementStart(2);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
ExtendsInterfaces jp_COMMA InterfaceType
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

InterfaceBody:
jp_CURLYSTART InterfaceMemberDeclarations jp_CURLYEND
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

InterfaceMemberDeclarations:
{
  jpElementStart(0);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
InterfaceMemberDeclarations InterfaceMemberDeclaration
{
  jpElementStart(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

InterfaceMemberDeclaration:
ConstantDeclaration
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
AbstractMethodDeclaration
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
ClassDeclaration
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
ClassDeclaration jp_SEMICOL
{
  jpElementStart(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
InterfaceDeclaration
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
InterfaceDeclaration jp_SEMICOL
{
  jpElementStart(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

ConstantDeclaration:
FieldDeclaration
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

AbstractMethodDeclaration:
MethodHeader Semicols
{
  jpElementStart(2);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

Semicols:
jp_SEMICOL
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
Semicols jp_SEMICOL
{
  jpElementStart(2);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

ArrayInitializer:
jp_CURLYSTART VariableInitializersOptional jp_CURLYEND
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

VariableInitializersOptional:
{
  jpElementStart(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
VariableInitializers
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
VariableInitializers jp_COMMA
{
  jpElementStart(2);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

VariableInitializers:
VariableInitializer
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
VariableInitializers jp_COMMA VariableInitializer
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

Block:
jp_CURLYSTART BlockStatementsopt jp_CURLYEND
{
  jpElementStart(4);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

BlockStatementsopt:
{
  jpElementStart(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
BlockStatements
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

BlockStatements:
BlockStatement
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
BlockStatements BlockStatement
{
  jpElementStart(1);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

BlockStatement:
LocalVariableDeclarationStatement
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
Statement
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
ClassDeclaration
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

LocalVariableDeclarationStatement:
LocalVariableDeclaration jp_SEMICOL
{
  jpElementStart(1);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

LocalVariableDeclaration:
Modifiers Type VariableDeclarators
{
  jpElementStart(1);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
Type VariableDeclarators
{
  jpElementStart(1);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

Statement:
StatementWithoutTrailingSubstatement
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
LabeledStatement
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
IfThenStatement
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
IfThenElseStatement
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
WhileStatement
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
ForStatement
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

StatementNoShortIf:
StatementWithoutTrailingSubstatement
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
LabeledStatementNoShortIf
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
IfThenElseStatementNoShortIf
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
WhileStatementNoShortIf
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
ForStatementNoShortIf
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

StatementWithoutTrailingSubstatement:
Block
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
EmptyStatement
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
ExpressionStatement
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
SwitchStatement
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
DoStatement
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
BreakStatement
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
ContinueStatement
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
ReturnStatement
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
SynchronizedStatement
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
ThrowStatement
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
TryStatement
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
AssertStatement
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

EmptyStatement:
jp_SEMICOL
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

LabeledStatement:
Identifier jp_COLON Statement
{
  jpElementStart(3);
  yyGetParser->DeallocateParserType(&($<str>1));
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

LabeledStatementNoShortIf:
Identifier jp_COLON StatementNoShortIf
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

ExpressionStatement:
StatementExpression jp_SEMICOL
{
  jpElementStart(2);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

StatementExpression:
Assignment
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
PreIncrementExpression
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
PreDecrementExpression
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
PostIncrementExpression
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
PostDecrementExpression
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
MethodInvocation
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
ClassInstanceCreationExpression
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

IfThenStatement:
jp_IF jp_PARESTART Expression jp_PAREEND Statement
{
  jpElementStart(5);
  jpCheckEmpty(5);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

IfThenElseStatement:
jp_IF jp_PARESTART Expression jp_PAREEND StatementNoShortIf jp_ELSE Statement
{
  jpElementStart(7);
  jpCheckEmpty(7);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

IfThenElseStatementNoShortIf:
jp_IF jp_PARESTART Expression jp_PAREEND StatementNoShortIf jp_ELSE StatementNoShortIf
{
  jpElementStart(7);
  jpCheckEmpty(7);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

SwitchStatement:
jp_SWITCH jp_PARESTART Expression jp_PAREEND SwitchBlock
{
  jpElementStart(5);

}

SwitchBlock:
jp_CURLYSTART SwitchBlockStatementGroups SwitchLabelsopt jp_CURLYEND
{
  jpElementStart(4);

}

SwitchLabelsopt:
{
  jpElementStart(0);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
SwitchLabels
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

SwitchBlockStatementGroups:
{
  jpElementStart(0);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
SwitchBlockStatementGroups SwitchBlockStatementGroup
{
  jpElementStart(2);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

SwitchBlockStatementGroup:
SwitchLabels BlockStatements
{
  jpElementStart(2);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

SwitchLabels:
SwitchLabel
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
SwitchLabels SwitchLabel
{
  jpElementStart(2);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

SwitchLabel:
jp_CASE ConstantExpression jp_COLON
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
jp_DEFAULT jp_COLON
{
  jpElementStart(2);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

WhileStatement:
jp_WHILE jp_PARESTART Expression jp_PAREEND Statement
{
  jpElementStart(5);

}

WhileStatementNoShortIf:
jp_WHILE jp_PARESTART Expression jp_PAREEND StatementNoShortIf
{
  jpElementStart(5);

}

DoStatement:
jp_DO Statement jp_WHILE jp_PARESTART Expression jp_PAREEND jp_SEMICOL
{
  jpElementStart(7);

}

ForStatement:
jp_FOR jp_PARESTART ForInitopt jp_SEMICOL Expressionopt jp_SEMICOL ForUpdateopt jp_PAREEND
Statement
{
  jpElementStart(9);

}

ForUpdateopt:
{
  jpElementStart(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
ForUpdate
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

ForInitopt:
{
  jpElementStart(0);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
ForInit
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

ForStatementNoShortIf:
jp_FOR jp_PARESTART ForInitopt jp_SEMICOL Expressionopt jp_SEMICOL ForUpdateopt jp_PAREEND
StatementNoShortIf
{
  jpElementStart(9);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

Expressionopt:
{
  jpElementStart(0);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
Expression
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

ForInit:
StatementExpressionList
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
LocalVariableDeclaration
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

ForUpdate:
StatementExpressionList
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

StatementExpressionList:
StatementExpression
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
StatementExpressionList jp_COMMA StatementExpression
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

AssertStatement:
jp_ASSERT Expression jp_SEMICOL
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
jp_ASSERT Expression jp_COLON Expression jp_SEMICOL
{
  jpElementStart(5);
  jpCheckEmpty(5);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

BreakStatement:
jp_BREAK Identifieropt jp_SEMICOL
{
  jpElementStart(3);
  yyGetParser->DeallocateParserType(&($<str>2));
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

Identifieropt:
{
  jpElementStart(0);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
Identifier
{
  jpElementStart(1);

}

ContinueStatement:
jp_CONTINUE Identifieropt jp_SEMICOL
{
  jpElementStart(3);
  yyGetParser->DeallocateParserType(&($<str>2));
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

ReturnStatement:
jp_RETURN Expressionopt jp_SEMICOL
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

ThrowStatement:
jp_THROW Expression jp_SEMICOL
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

SynchronizedStatement:
jp_SYNCHRONIZED jp_PARESTART Expression jp_PAREEND Block
{
  jpElementStart(5);
  jpCheckEmpty(5);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

TryStatement:
jp_TRY Block Catches
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
jp_TRY Block Catchesopt Finally
{
  jpElementStart(4);
  jpCheckEmpty(4);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

Catchesopt:
{
  jpElementStart(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
Catches
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

Catches:
CatchClause
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
Catches CatchClause
{
  jpElementStart(2);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

CatchClause:
jp_CATCH jp_PARESTART FormalParameter jp_PAREEND Block
{
  jpElementStart(5);

}

Finally:
jp_FINALLY Block
{
  jpElementStart(2);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

Primary:
PrimaryNoNewArray
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
ArrayCreationExpression
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

PrimaryNoNewArray:
Literal
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
jp_THIS
{
  jpElementStart(1);

}
|
jp_PARESTART Expression jp_PAREEND
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
ClassInstanceCreationExpression
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
FieldAccess
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
MethodInvocation
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
ArrayAccess
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

ClassInstanceCreationExpression:
New ClassType jp_PARESTART ArgumentListopt jp_PAREEND ClassBodyOpt
{
  jpElementStart(6);
  jpCheckEmpty(6);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

ClassBodyOpt:
{
  jpElementStart(0);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
ClassBody
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

ArgumentListopt:
{
  jpElementStart(0);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
ArgumentList
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

ArgumentList:
Expression
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
ArgumentList jp_COMMA Expression
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

ArrayCreationExpression:
New PrimitiveType DimExprs Dimsopt
{
  jpElementStart(4);
  jpCheckEmpty(4);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
New ClassOrInterfaceType DimExprs Dimsopt
{
  jpElementStart(4);
  jpCheckEmpty(4);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
New PrimitiveType Dims ArrayInitializer
{
  jpElementStart(4);
  jpCheckEmpty(4);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
New ClassOrInterfaceType Dims ArrayInitializer
{
  jpElementStart(4);
  jpCheckEmpty(4);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

Dimsopt:
{
  jpElementStart(0);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
Dims
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

DimExprs:
DimExpr
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
DimExprs DimExpr
{
  jpElementStart(2);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

DimExpr:
jp_BRACKETSTART Expression jp_BRACKETEND
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

Dims:
jp_BRACKETSTART jp_BRACKETEND
{
  jpElementStart(2);

}
|
Dims jp_BRACKETSTART jp_BRACKETEND
{
  jpElementStart(3);

}

FieldAccess:
Primary jp_DOT Identifier
{
  jpElementStart(3);
  yyGetParser->DeallocateParserType(&($<str>3));
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
jp_SUPER jp_DOT Identifier
{
  jpElementStart(3);
  yyGetParser->DeallocateParserType(&($<str>3));
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
jp_THIS jp_DOT Identifier
{
  jpElementStart(3);
  yyGetParser->DeallocateParserType(&($<str>3));
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
Primary jp_DOT jp_THIS
{
  jpElementStart(3);
  yyGetParser->DeallocateParserType(&($<str>3));
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

MethodInvocation:
Name jp_PARESTART ArgumentListopt jp_PAREEND
{
  jpElementStart(4);
  yyGetParser->DeallocateParserType(&($<str>1));
  jpCheckEmpty(4);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
Primary jp_DOT Identifier jp_PARESTART ArgumentListopt jp_PAREEND
{
  jpElementStart(6);
  yyGetParser->DeallocateParserType(&($<str>1));
  yyGetParser->DeallocateParserType(&($<str>3));
  jpCheckEmpty(6);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
jp_SUPER jp_DOT Identifier jp_PARESTART ArgumentListopt jp_PAREEND
{
  jpElementStart(6);
  yyGetParser->DeallocateParserType(&($<str>3));
  jpCheckEmpty(6);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
jp_THIS jp_DOT Identifier jp_PARESTART ArgumentListopt jp_PAREEND
{
  jpElementStart(6);
  yyGetParser->DeallocateParserType(&($<str>3));
  jpCheckEmpty(6);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

ArrayAccess:
Name jp_BRACKETSTART Expression jp_BRACKETEND
{
  jpElementStart(4);
  yyGetParser->DeallocateParserType(&($<str>1));
  jpCheckEmpty(4);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
PrimaryNoNewArray jp_BRACKETSTART Expression jp_BRACKETEND
{
  jpElementStart(4);
  jpCheckEmpty(4);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

PostfixExpression:
Primary
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
Name
{
  jpElementStart(1);
  yyGetParser->DeallocateParserType(&($<str>1));
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
ArrayType jp_DOT jp_CLASS
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
PostIncrementExpression
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
PostDecrementExpression
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

PostIncrementExpression:
PostfixExpression jp_PLUSPLUS
{
  jpElementStart(2);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

PostDecrementExpression:
PostfixExpression jp_MINUSMINUS
{
  jpElementStart(2);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

UnaryExpression:
PreIncrementExpression
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
PreDecrementExpression
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
jp_PLUS UnaryExpression
{
  jpElementStart(2);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
jp_MINUS UnaryExpression
{
  jpElementStart(2);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
UnaryExpressionNotPlusMinus
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

PreIncrementExpression:
jp_PLUSPLUS UnaryExpression
{
  jpElementStart(2);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

PreDecrementExpression:
jp_MINUSMINUS UnaryExpression
{
  jpElementStart(2);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

UnaryExpressionNotPlusMinus:
PostfixExpression
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
jp_TILDE UnaryExpression
{
  jpElementStart(2);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
jp_EXCLAMATION UnaryExpression
{
  jpElementStart(2);
  jpCheckEmpty(2);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
CastExpression
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

CastExpression:
jp_PARESTART PrimitiveType Dimsopt jp_PAREEND UnaryExpression
{
  jpElementStart(5);
  jpCheckEmpty(5);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
jp_PARESTART Expression jp_PAREEND UnaryExpressionNotPlusMinus
{
  jpElementStart(4);
  jpCheckEmpty(4);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
jp_PARESTART Name Dims jp_PAREEND UnaryExpressionNotPlusMinus
{
  jpElementStart(5);

}

MultiplicativeExpression:
UnaryExpression
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
MultiplicativeExpression jp_TIMES UnaryExpression
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
MultiplicativeExpression jp_DIVIDE UnaryExpression
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
MultiplicativeExpression jp_PERCENT UnaryExpression
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

AdditiveExpression:
MultiplicativeExpression
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
AdditiveExpression jp_PLUS MultiplicativeExpression
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
AdditiveExpression jp_MINUS MultiplicativeExpression
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

ShiftExpression:
AdditiveExpression
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
ShiftExpression jp_LTLT AdditiveExpression
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
ShiftExpression jp_GTGT AdditiveExpression
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
ShiftExpression jp_GTGTGT AdditiveExpression
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

RelationalExpression:
ShiftExpression
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
RelationalExpression jp_LESSTHAN ShiftExpression
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
RelationalExpression jp_GREATER ShiftExpression
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
RelationalExpression jp_LTEQUALS ShiftExpression
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
RelationalExpression jp_GTEQUALS ShiftExpression
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
RelationalExpression jp_INSTANCEOF ReferenceType
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

EqualityExpression:
RelationalExpression
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
EqualityExpression jp_EQUALSEQUALS RelationalExpression
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
EqualityExpression jp_EXCLAMATIONEQUALS RelationalExpression
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

AndExpression:
EqualityExpression
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
AndExpression jp_AND EqualityExpression
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

ExclusiveOrExpression:
AndExpression
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
ExclusiveOrExpression jp_CARROT AndExpression
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

InclusiveOrExpression:
ExclusiveOrExpression
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
InclusiveOrExpression jp_PIPE ExclusiveOrExpression
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

ConditionalAndExpression:
InclusiveOrExpression
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
ConditionalAndExpression jp_ANDAND InclusiveOrExpression
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

ConditionalOrExpression:
ConditionalAndExpression
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
ConditionalOrExpression jp_PIPEPIPE ConditionalAndExpression
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

ConditionalExpression:
ConditionalOrExpression
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
ConditionalOrExpression jp_QUESTION Expression jp_COLON ConditionalExpression
{
  jpElementStart(5);
  jpCheckEmpty(5);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

AssignmentExpression:
ConditionalExpression
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
Assignment
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

Assignment:
LeftHandSide AssignmentOperator AssignmentExpression
{
  jpElementStart(3);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

LeftHandSide:
Name
{
  jpElementStart(1);
  yyGetParser->DeallocateParserType(&($<str>1));
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
FieldAccess
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
ArrayAccess
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

AssignmentOperator:
jp_EQUALS
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
jp_TIMESEQUALS
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
jp_DIVIDEEQUALS
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
jp_PERCENTEQUALS
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
jp_PLUSEQUALS
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
jp_MINUSEQUALS
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
jp_LESLESEQUALS
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
jp_GTGTEQUALS
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
jp_GTGTGTEQUALS
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
jp_ANDEQUALS
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
jp_CARROTEQUALS
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
jp_PIPEEQUALS
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

Expression:
AssignmentExpression
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

ConstantExpression:
Expression
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

New:
jp_NEW
{
  jpElementStart(1);
  jpCheckEmpty(1);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}
|
Name jp_DOT jp_NEW
{
  jpElementStart(3);
  jpStoreClass($<str>1);
  jpCheckEmpty(3);
  $<str>$ = 0;
  yyGetParser->SetCurrentCombine("");

}

%%
/* End of grammar */

/*--------------------------------------------------------------------------*/
void cmDependsJava_yyerror(yyscan_t yyscanner, const char* message)
{
  yyGetParser->Error(message);
}
