CMake/Source/cmDependsJavaParser.y
Brad King 86578eccf2 Simplify CMake per-source license notices
Per-source copyright/license notice headers that spell out copyright holder
names and years are hard to maintain and often out-of-date or plain wrong.
Precise contributor information is already maintained automatically by the
version control tool.  Ultimately it is the receiver of a file who is
responsible for determining its licensing status, and per-source notices are
merely a convenience.  Therefore it is simpler and more accurate for
each source to have a generic notice of the license name and references to
more detailed information on copyright holders and full license terms.

Our `Copyright.txt` file now contains a list of Contributors whose names
appeared source-level copyright notices.  It also references version control
history for more precise information.  Therefore we no longer need to spell
out the list of Contributors in each source file notice.

Replace CMake per-source copyright/license notice headers with a short
description of the license and links to `Copyright.txt` and online information
available from "https://cmake.org/licensing".  The online URL also handles
cases of modules being copied out of our source into other projects, so we
can drop our notices about replacing links with full license text.

Run the `Utilities/Scripts/filter-notices.bash` script to perform the majority
of the replacements mechanically.  Manually fix up shebang lines and trailing
newlines in a few files.  Manually update the notices in a few files that the
script does not handle.
2016-09-27 15:14:44 -04:00

3213 lines
48 KiB
Plaintext

%{
/* 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:
- remove TABs
- remove use of the 'register' storage class specifier
- add __HP_aCC to the #if test for yyerrorlab warning suppression
*/
/* Configure the parser to use a lexer object. */
#define YYPARSE_PARAM yyscanner
#define YYLEX_PARAM yyscanner
#define YYERROR_VERBOSE 1
#define cmDependsJava_yyerror(x) \
cmDependsJavaError(yyscanner, x)
#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;
/* Internal utility functions. */
static void cmDependsJavaError(yyscan_t yyscanner, const char* message);
#define YYDEBUG 1
#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. */
%pure_parser
/*
%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 cmDependsJavaError(yyscan_t yyscanner, const char* message)
{
yyGetParser->Error(message);
}