diff options
Diffstat (limited to 'Source/LexerParser/cmDependsJavaParser.y')
-rw-r--r-- | Source/LexerParser/cmDependsJavaParser.y | 3214 |
1 files changed, 3214 insertions, 0 deletions
diff --git a/Source/LexerParser/cmDependsJavaParser.y b/Source/LexerParser/cmDependsJavaParser.y new file mode 100644 index 0000000..f7eb228 --- /dev/null +++ b/Source/LexerParser/cmDependsJavaParser.y @@ -0,0 +1,3214 @@ +%{ +/* 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 +%} + +/* 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); +} |