CMake/Source/cmDependsJavaParser.y

3228 lines
46 KiB
Plaintext
Raw Normal View History

2005-01-29 01:13:58 +03:00
%{
/*=========================================================================
Program: CMake - Cross-Platform Makefile Generator
Module: $RCSfile$
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved.
See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
/*
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.c:
- remove TABs
*/
/* 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 CHECKEMPTY(cnt) yyGetParser->CheckEmpty(__LINE__, cnt, yyvsp);
#define ELEMENTSTART(cnt) yyGetParser->PrepareElement(&yyval)
#define STORECLASS(str) yyGetParser->AddClassFound(str); yyGetParser->DeallocateParserType(&(str))
/* Disable some warnings in the generated code. */
#ifdef __BORLANDC__
# pragma warn -8004 /* Variable assigned a value that is not used. */
#endif
#ifdef _MSC_VER
# pragma warning (disable: 4102) /* Unused goto label. */
2005-01-29 01:24:45 +03:00
# pragma warning (disable: 4065) /* Switch statement contains default but no case. */
2005-01-29 01:13:58 +03:00
#endif
%}
/* Generate a reentrant parser object. */
%pure_parser
/*
%union {
char* string;
}
*/
/*-------------------------------------------------------------------------*/
/* Tokens */
%token ABSTRACT
%token ASSERT
2005-01-29 01:24:45 +03:00
%token BOOLEAN_TYPE
2005-01-29 01:13:58 +03:00
%token BREAK
2005-01-29 01:24:45 +03:00
%token BYTE_TYPE
2005-01-29 01:13:58 +03:00
%token CASE
%token CATCH
2005-01-29 01:24:45 +03:00
%token CHAR_TYPE
2005-01-29 01:13:58 +03:00
%token CLASS
%token CONTINUE
%token DEFAULT
%token DO
2005-01-29 01:24:45 +03:00
%token DOUBLE_TYPE
2005-01-29 01:13:58 +03:00
%token ELSE
%token EXTENDS
%token FINAL
%token FINALLY
2005-01-29 01:24:45 +03:00
%token FLOAT_TYPE
2005-01-29 01:13:58 +03:00
%token FOR
%token IF
%token IMPLEMENTS
%token IMPORT
%token INSTANCEOF
2005-01-29 01:24:45 +03:00
%token INT_TYPE
2005-01-29 01:13:58 +03:00
%token INTERFACE
2005-01-29 01:24:45 +03:00
%token LONG_TYPE
2005-01-29 01:13:58 +03:00
%token NATIVE
%token NEW
%token PACKAGE
%token PRIVATE
%token PROTECTED
%token PUBLIC
%token RETURN
2005-01-29 01:24:45 +03:00
%token SHORT_TYPE
2005-01-29 01:13:58 +03:00
%token STATIC
%token STRICTFP
%token SUPER
%token SWITCH
%token SYNCHRONIZED
%token THIS
%token THROW
%token THROWS
%token TRANSIENT
%token TRY
%token VOID
%token VOLATILE
%token WHILE
%token BOOLEANLITERAL
%token CHARACTERLITERAL
%token DECIMALINTEGERLITERAL
%token FLOATINGPOINTLITERAL
%token HEXINTEGERLITERAL
%token NULLLITERAL
%token STRINGLITERAL
%token NAME
%token AND
%token ANDAND
%token ANDEQUALS
%token BRACKETEND
%token BRACKETSTART
%token CARROT
%token CARROTEQUALS
%token COLON
%token COMMA
%token CURLYEND
%token CURLYSTART
%token DIVIDE
%token DIVIDEEQUALS
%token DOLLAR
%token DOT
%token EQUALS
%token EQUALSEQUALS
%token EXCLAMATION
%token EXCLAMATIONEQUALS
%token GREATER
%token GTEQUALS
%token GTGT
%token GTGTEQUALS
%token GTGTGT
%token GTGTGTEQUALS
%token LESLESEQUALS
%token LESSTHAN
%token LTEQUALS
%token LTLT
%token MINUS
%token MINUSEQUALS
%token MINUSMINUS
%token PAREEND
%token PARESTART
%token PERCENT
%token PERCENTEQUALS
%token PIPE
%token PIPEEQUALS
%token PIPEPIPE
%token PLUS
%token PLUSEQUALS
%token PLUSPLUS
%token QUESTION
%token SEMICOL
%token TILDE
%token TIMES
%token TIMESEQUALS
%token ERROR
/*-------------------------------------------------------------------------*/
/* grammar */
%%
Goal:
CompilationUnit
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
Literal:
IntegerLiteral
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
FLOATINGPOINTLITERAL
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
BOOLEANLITERAL
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
CHARACTERLITERAL
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
STRINGLITERAL
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
NULLLITERAL
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
IntegerLiteral:
DECIMALINTEGERLITERAL
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
HEXINTEGERLITERAL
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
Type:
PrimitiveType
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ReferenceType
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
PrimitiveType:
2005-01-29 01:24:45 +03:00
BYTE_TYPE
2005-01-29 01:13:58 +03:00
{
ELEMENTSTART(0);
}
|
2005-01-29 01:24:45 +03:00
SHORT_TYPE
2005-01-29 01:13:58 +03:00
{
ELEMENTSTART(0);
}
|
2005-01-29 01:24:45 +03:00
INT_TYPE
2005-01-29 01:13:58 +03:00
{
ELEMENTSTART(0);
}
|
2005-01-29 01:24:45 +03:00
LONG_TYPE
2005-01-29 01:13:58 +03:00
{
ELEMENTSTART(0);
}
|
2005-01-29 01:24:45 +03:00
CHAR_TYPE
2005-01-29 01:13:58 +03:00
{
ELEMENTSTART(0);
}
|
2005-01-29 01:24:45 +03:00
FLOAT_TYPE
2005-01-29 01:13:58 +03:00
{
ELEMENTSTART(0);
}
|
2005-01-29 01:24:45 +03:00
DOUBLE_TYPE
2005-01-29 01:13:58 +03:00
{
ELEMENTSTART(0);
}
|
2005-01-29 01:24:45 +03:00
BOOLEAN_TYPE
2005-01-29 01:13:58 +03:00
{
ELEMENTSTART(0);
}
ReferenceType:
ClassOrInterfaceType
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ArrayType
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ClassOrInterfaceType:
Name
{
ELEMENTSTART(1);
STORECLASS($<str>1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ClassType:
ClassOrInterfaceType
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
InterfaceType:
ClassOrInterfaceType
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ArrayType:
PrimitiveType Dims
{
ELEMENTSTART(2);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
Name Dims
{
ELEMENTSTART(2);
STORECLASS($<str>1);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
Name:
SimpleName
{
ELEMENTSTART(1);
$<str>$ = $<str>1;
}
|
QualifiedName
{
ELEMENTSTART(1);
$<str>$ = $<str>1;
}
SimpleName:
Identifier
{
ELEMENTSTART(1);
$<str>$ = $<str>1;
}
Identifier:
NAME
{
ELEMENTSTART(1);
$<str>$ = $<str>1;
}
|
DOLLAR NAME
{
ELEMENTSTART(2);
$<str>$ = $<str>2;
}
QualifiedName:
Name DOT Identifier
{
ELEMENTSTART(3);
yyGetParser->AddClassFound($<str>1);
yyGetParser->UpdateCombine($<str>1, $<str>3);
yyGetParser->DeallocateParserType(&($<str>1));
$<str>$ = const_cast<char*>(yyGetParser->GetCurrentCombine());
}
|
Name DOT CLASS
{
ELEMENTSTART(3);
STORECLASS($<str>1);
CHECKEMPTY(3);
yyGetParser->SetCurrentCombine("");
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
Name DOT THIS
{
ELEMENTSTART(3);
STORECLASS($<str>1);
yyGetParser->SetCurrentCombine("");
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
SimpleType DOT CLASS
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
SimpleType:
PrimitiveType
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
VOID
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
CompilationUnit:
PackageDeclarationopt ImportDeclarations TypeDeclarations
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
PackageDeclarationopt:
{
ELEMENTSTART(0);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
PackageDeclaration
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ImportDeclarations:
{
ELEMENTSTART(0);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ImportDeclarations ImportDeclaration
{
ELEMENTSTART(2);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
TypeDeclarations:
{
ELEMENTSTART(0);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
TypeDeclarations TypeDeclaration
{
ELEMENTSTART(2);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
PackageDeclaration:
PACKAGE Name SEMICOL
{
ELEMENTSTART(3);
yyGetParser->SetCurrentPackage($<str>2);
yyGetParser->DeallocateParserType(&($<str>2));
yyGetParser->SetCurrentCombine("");
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ImportDeclaration:
SingleTypeImportDeclaration
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
TypeImportOnDemandDeclaration
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
SingleTypeImportDeclaration:
IMPORT Name SEMICOL
{
ELEMENTSTART(3);
yyGetParser->AddPackagesImport($<str>2);
yyGetParser->DeallocateParserType(&($<str>2));
yyGetParser->SetCurrentCombine("");
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
TypeImportOnDemandDeclaration:
IMPORT Name DOT TIMES SEMICOL
{
ELEMENTSTART(5);
std::string str = $<str>2;
str += ".*";
yyGetParser->AddPackagesImport(str.c_str());
yyGetParser->DeallocateParserType(&($<str>2));
yyGetParser->SetCurrentCombine("");
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
TypeDeclaration:
ClassDeclaration
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
InterfaceDeclaration
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
SEMICOL
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
Modifiers:
Modifier
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
Modifiers Modifier
{
ELEMENTSTART(2);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
Modifier:
PUBLIC | PROTECTED | PRIVATE |
STATIC |
ABSTRACT | FINAL | NATIVE | SYNCHRONIZED | TRANSIENT | VOLATILE |
STRICTFP
ClassHeader:
Modifiersopt CLASS Identifier
{
yyGetParser->StartClass($<str>3);
ELEMENTSTART(3);
yyGetParser->DeallocateParserType(&($<str>3));
CHECKEMPTY(3);
}
ClassDeclaration:
ClassHeader ClassBody
{
ELEMENTSTART(2);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
yyGetParser->EndClass();
}
|
ClassHeader Interfaces ClassBody
{
ELEMENTSTART(3);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
yyGetParser->EndClass();
}
|
ClassHeader Super ClassBody
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
yyGetParser->EndClass();
}
|
ClassHeader Super Interfaces ClassBody
{
ELEMENTSTART(4);
CHECKEMPTY(4);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
yyGetParser->EndClass();
}
Modifiersopt:
{
ELEMENTSTART(0);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
Modifiers
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
Super:
EXTENDS ClassType
{
ELEMENTSTART(2);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
Interfaces:
IMPLEMENTS InterfaceTypeList
{
ELEMENTSTART(2);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
InterfaceTypeList:
InterfaceType
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
InterfaceTypeList COMMA InterfaceType
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ClassBody:
CURLYSTART ClassBodyDeclarations CURLYEND
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ClassBodyDeclarations:
{
ELEMENTSTART(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ClassBodyDeclarations ClassBodyDeclaration
{
ELEMENTSTART(2);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ClassBodyDeclaration:
ClassMemberDeclaration
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
StaticInitializer
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ConstructorDeclaration
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
TypeDeclaration
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ClassMemberDeclaration:
FieldDeclaration
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
MethodDeclaration
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
FieldDeclaration:
Modifiersopt Type VariableDeclarators SEMICOL
{
ELEMENTSTART(4);
}
VariableDeclarators:
VariableDeclarator
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
VariableDeclarators COMMA VariableDeclarator
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
VariableDeclarator:
VariableDeclaratorId
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
VariableDeclaratorId EQUALS VariableInitializer
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
VariableDeclaratorId:
Identifier
{
ELEMENTSTART(1);
yyGetParser->DeallocateParserType(&($<str>1));
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
VariableDeclaratorId BRACKETSTART BRACKETEND
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
VariableInitializer:
Expression
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ArrayInitializer
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
MethodDeclaration:
MethodHeader SEMICOL
{
ELEMENTSTART(2);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
MethodHeader MethodBody
{
ELEMENTSTART(2);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
MethodHeader MethodBody SEMICOL
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
MethodHeader:
Modifiersopt Type MethodDeclarator Throwsopt
{
ELEMENTSTART(4);
CHECKEMPTY(4);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
Modifiersopt VOID MethodDeclarator Throwsopt
{
ELEMENTSTART(4);
CHECKEMPTY(4);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
Throwsopt:
{
ELEMENTSTART(0);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
Throws
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
MethodDeclarator:
Identifier PARESTART FormalParameterListopt PAREEND
{
ELEMENTSTART(4);
yyGetParser->DeallocateParserType(&($<str>1));
CHECKEMPTY(4);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
MethodDeclarator BRACKETSTART BRACKETEND
{
ELEMENTSTART(3);
}
FormalParameterListopt:
{
ELEMENTSTART(0);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
FormalParameterList
FormalParameterList:
FormalParameter
{
ELEMENTSTART(1);
}
|
FormalParameterList COMMA FormalParameter
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
FormalParameter:
Modifiersopt Type VariableDeclaratorId
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
Throws:
THROWS ClassTypeList
{
ELEMENTSTART(2);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ClassTypeList:
ClassType
{
ELEMENTSTART(1);
}
|
ClassTypeList COMMA ClassType
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
MethodBody:
Block
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
StaticInitializer:
STATIC Block
{
ELEMENTSTART(2);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ConstructorDeclaration:
Modifiersopt ConstructorDeclarator Throwsopt ConstructorBody
{
ELEMENTSTART(4);
CHECKEMPTY(4);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
Modifiersopt ConstructorDeclarator Throwsopt ConstructorBody SEMICOL
{
ELEMENTSTART(5);
CHECKEMPTY(5);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ConstructorDeclarator:
SimpleName PARESTART FormalParameterListopt PAREEND
{
ELEMENTSTART(4);
yyGetParser->DeallocateParserType(&($<str>1));
CHECKEMPTY(4);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ConstructorBody:
CURLYSTART ExplicitConstructorInvocationopt BlockStatementsopt CURLYEND
{
ELEMENTSTART(4);
CHECKEMPTY(4);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ExplicitConstructorInvocationopt:
{
ELEMENTSTART(0);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ExplicitConstructorInvocationopt ExplicitConstructorInvocation
{
ELEMENTSTART(2);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ExplicitConstructorInvocation:
THIS PARESTART ArgumentListopt PAREEND SEMICOL
{
ELEMENTSTART(5);
CHECKEMPTY(5);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
SUPER PARESTART ArgumentListopt PAREEND SEMICOL
{
ELEMENTSTART(5);
CHECKEMPTY(5);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
InterfaceHeader:
Modifiersopt INTERFACE Identifier
{
yyGetParser->StartClass($<str>3);
ELEMENTSTART(3);
yyGetParser->DeallocateParserType(&($<str>3));
CHECKEMPTY(3);
}
InterfaceDeclaration:
InterfaceHeader ExtendsInterfacesopt InterfaceBody
{
ELEMENTSTART(2);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
yyGetParser->EndClass();
}
ExtendsInterfacesopt:
{
ELEMENTSTART(0);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ExtendsInterfaces
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ExtendsInterfaces:
EXTENDS InterfaceType
{
ELEMENTSTART(2);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ExtendsInterfaces COMMA InterfaceType
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
InterfaceBody:
CURLYSTART InterfaceMemberDeclarations CURLYEND
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
InterfaceMemberDeclarations:
{
ELEMENTSTART(0);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
InterfaceMemberDeclarations InterfaceMemberDeclaration
{
ELEMENTSTART(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
InterfaceMemberDeclaration:
ConstantDeclaration
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
AbstractMethodDeclaration
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ClassDeclaration
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ClassDeclaration SEMICOL
{
ELEMENTSTART(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
InterfaceDeclaration
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
InterfaceDeclaration SEMICOL
{
ELEMENTSTART(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ConstantDeclaration:
FieldDeclaration
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
AbstractMethodDeclaration:
MethodHeader Semicols
{
ELEMENTSTART(2);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
Semicols:
SEMICOL
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
Semicols SEMICOL
{
ELEMENTSTART(2);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ArrayInitializer:
CURLYSTART VariableInitializersOptional CURLYEND
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
VariableInitializersOptional:
{
ELEMENTSTART(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
VariableInitializers
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
VariableInitializers COMMA
{
ELEMENTSTART(2);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
VariableInitializers:
VariableInitializer
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
VariableInitializers COMMA VariableInitializer
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
Block:
CURLYSTART BlockStatementsopt CURLYEND
{
ELEMENTSTART(4);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
BlockStatementsopt:
{
ELEMENTSTART(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
BlockStatements
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
BlockStatements:
BlockStatement
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
BlockStatements BlockStatement
{
ELEMENTSTART(1);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
BlockStatement:
LocalVariableDeclarationStatement
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
Statement
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ClassDeclaration
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
LocalVariableDeclarationStatement:
LocalVariableDeclaration SEMICOL
{
ELEMENTSTART(1);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
LocalVariableDeclaration:
Modifiers Type VariableDeclarators
{
ELEMENTSTART(1);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
Type VariableDeclarators
{
ELEMENTSTART(1);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
Statement:
StatementWithoutTrailingSubstatement
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
LabeledStatement
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
IfThenStatement
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
IfThenElseStatement
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
WhileStatement
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ForStatement
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
StatementNoShortIf:
StatementWithoutTrailingSubstatement
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
LabeledStatementNoShortIf
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
IfThenElseStatementNoShortIf
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
WhileStatementNoShortIf
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ForStatementNoShortIf
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
StatementWithoutTrailingSubstatement:
Block
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
EmptyStatement
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ExpressionStatement
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
SwitchStatement
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
DoStatement
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
BreakStatement
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ContinueStatement
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ReturnStatement
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
SynchronizedStatement
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ThrowStatement
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
TryStatement
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
AssertStatement
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
EmptyStatement:
SEMICOL
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
LabeledStatement:
Identifier COLON Statement
{
ELEMENTSTART(3);
yyGetParser->DeallocateParserType(&($<str>1));
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
LabeledStatementNoShortIf:
Identifier COLON StatementNoShortIf
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ExpressionStatement:
StatementExpression SEMICOL
{
ELEMENTSTART(2);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
StatementExpression:
Assignment
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
PreIncrementExpression
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
PreDecrementExpression
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
PostIncrementExpression
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
PostDecrementExpression
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
MethodInvocation
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ClassInstanceCreationExpression
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
IfThenStatement:
IF PARESTART Expression PAREEND Statement
{
ELEMENTSTART(5);
CHECKEMPTY(5);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
IfThenElseStatement:
IF PARESTART Expression PAREEND StatementNoShortIf ELSE Statement
{
ELEMENTSTART(7);
CHECKEMPTY(7);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
IfThenElseStatementNoShortIf:
IF PARESTART Expression PAREEND StatementNoShortIf ELSE StatementNoShortIf
{
ELEMENTSTART(7);
CHECKEMPTY(7);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
SwitchStatement:
SWITCH PARESTART Expression PAREEND SwitchBlock
{
ELEMENTSTART(5);
}
SwitchBlock:
CURLYSTART SwitchBlockStatementGroups SwitchLabelsopt CURLYEND
{
ELEMENTSTART(4);
}
SwitchLabelsopt:
{
ELEMENTSTART(0);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
SwitchLabels
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
SwitchBlockStatementGroups:
{
ELEMENTSTART(0);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
SwitchBlockStatementGroups SwitchBlockStatementGroup
{
ELEMENTSTART(2);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
SwitchBlockStatementGroup:
SwitchLabels BlockStatements
{
ELEMENTSTART(2);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
SwitchLabels:
SwitchLabel
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
SwitchLabels SwitchLabel
{
ELEMENTSTART(2);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
SwitchLabel:
CASE ConstantExpression COLON
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
DEFAULT COLON
{
ELEMENTSTART(2);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
WhileStatement:
WHILE PARESTART Expression PAREEND Statement
{
ELEMENTSTART(5);
}
WhileStatementNoShortIf:
WHILE PARESTART Expression PAREEND StatementNoShortIf
{
ELEMENTSTART(5);
}
DoStatement:
DO Statement WHILE PARESTART Expression PAREEND SEMICOL
{
ELEMENTSTART(7);
}
ForStatement:
FOR PARESTART ForInitopt SEMICOL Expressionopt SEMICOL ForUpdateopt PAREEND
Statement
{
ELEMENTSTART(9);
}
ForUpdateopt:
{
ELEMENTSTART(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ForUpdate
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ForInitopt:
{
ELEMENTSTART(0);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ForInit
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ForStatementNoShortIf:
FOR PARESTART ForInitopt SEMICOL Expressionopt SEMICOL ForUpdateopt PAREEND
StatementNoShortIf
{
ELEMENTSTART(9);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
Expressionopt:
{
ELEMENTSTART(0);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
Expression
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ForInit:
StatementExpressionList
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
LocalVariableDeclaration
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ForUpdate:
StatementExpressionList
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
StatementExpressionList:
StatementExpression
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
StatementExpressionList COMMA StatementExpression
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
AssertStatement:
ASSERT Expression SEMICOL
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ASSERT Expression COLON Expression SEMICOL
{
ELEMENTSTART(5);
CHECKEMPTY(5);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
BreakStatement:
BREAK Identifieropt SEMICOL
{
ELEMENTSTART(3);
yyGetParser->DeallocateParserType(&($<str>2));
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
Identifieropt:
{
ELEMENTSTART(0);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
Identifier
{
ELEMENTSTART(1);
}
ContinueStatement:
CONTINUE Identifieropt SEMICOL
{
ELEMENTSTART(3);
yyGetParser->DeallocateParserType(&($<str>2));
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ReturnStatement:
RETURN Expressionopt SEMICOL
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ThrowStatement:
THROW Expression SEMICOL
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
SynchronizedStatement:
SYNCHRONIZED PARESTART Expression PAREEND Block
{
ELEMENTSTART(5);
CHECKEMPTY(5);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
TryStatement:
TRY Block Catches
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
TRY Block Catchesopt Finally
{
ELEMENTSTART(4);
CHECKEMPTY(4);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
Catchesopt:
{
ELEMENTSTART(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
Catches
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
Catches:
CatchClause
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
Catches CatchClause
{
ELEMENTSTART(2);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
CatchClause:
CATCH PARESTART FormalParameter PAREEND Block
{
ELEMENTSTART(5);
}
Finally:
FINALLY Block
{
ELEMENTSTART(2);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
Primary:
PrimaryNoNewArray
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ArrayCreationExpression
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
PrimaryNoNewArray:
Literal
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
THIS
{
ELEMENTSTART(1);
}
|
PARESTART Expression PAREEND
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ClassInstanceCreationExpression
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
FieldAccess
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
MethodInvocation
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ArrayAccess
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ClassInstanceCreationExpression:
New ClassType PARESTART ArgumentListopt PAREEND ClassBodyOpt
{
ELEMENTSTART(6);
CHECKEMPTY(6);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ClassBodyOpt:
{
ELEMENTSTART(0);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ClassBody
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ArgumentListopt:
{
ELEMENTSTART(0);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ArgumentList
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ArgumentList:
Expression
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ArgumentList COMMA Expression
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ArrayCreationExpression:
New PrimitiveType DimExprs Dimsopt
{
ELEMENTSTART(4);
CHECKEMPTY(4);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
New ClassOrInterfaceType DimExprs Dimsopt
{
ELEMENTSTART(4);
CHECKEMPTY(4);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
New PrimitiveType Dims ArrayInitializer
{
ELEMENTSTART(4);
CHECKEMPTY(4);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
New ClassOrInterfaceType Dims ArrayInitializer
{
ELEMENTSTART(4);
CHECKEMPTY(4);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
Dimsopt:
{
ELEMENTSTART(0);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
Dims
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
DimExprs:
DimExpr
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
DimExprs DimExpr
{
ELEMENTSTART(2);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
DimExpr:
BRACKETSTART Expression BRACKETEND
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
Dims:
BRACKETSTART BRACKETEND
{
ELEMENTSTART(2);
}
|
Dims BRACKETSTART BRACKETEND
{
ELEMENTSTART(3);
}
FieldAccess:
Primary DOT Identifier
{
ELEMENTSTART(3);
yyGetParser->DeallocateParserType(&($<str>3));
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
SUPER DOT Identifier
{
ELEMENTSTART(3);
yyGetParser->DeallocateParserType(&($<str>3));
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
THIS DOT Identifier
{
ELEMENTSTART(3);
yyGetParser->DeallocateParserType(&($<str>3));
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
Primary DOT THIS
{
ELEMENTSTART(3);
yyGetParser->DeallocateParserType(&($<str>3));
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
MethodInvocation:
Name PARESTART ArgumentListopt PAREEND
{
ELEMENTSTART(4);
yyGetParser->DeallocateParserType(&($<str>1));
CHECKEMPTY(4);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
Primary DOT Identifier PARESTART ArgumentListopt PAREEND
{
ELEMENTSTART(6);
yyGetParser->DeallocateParserType(&($<str>1));
yyGetParser->DeallocateParserType(&($<str>3));
CHECKEMPTY(6);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
SUPER DOT Identifier PARESTART ArgumentListopt PAREEND
{
ELEMENTSTART(6);
yyGetParser->DeallocateParserType(&($<str>3));
CHECKEMPTY(6);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
THIS DOT Identifier PARESTART ArgumentListopt PAREEND
{
ELEMENTSTART(6);
yyGetParser->DeallocateParserType(&($<str>3));
CHECKEMPTY(6);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ArrayAccess:
Name BRACKETSTART Expression BRACKETEND
{
ELEMENTSTART(4);
yyGetParser->DeallocateParserType(&($<str>1));
CHECKEMPTY(4);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
PrimaryNoNewArray BRACKETSTART Expression BRACKETEND
{
ELEMENTSTART(4);
CHECKEMPTY(4);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
PostfixExpression:
Primary
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
Name
{
ELEMENTSTART(1);
yyGetParser->DeallocateParserType(&($<str>1));
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ArrayType DOT CLASS
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
PostIncrementExpression
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
PostDecrementExpression
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
PostIncrementExpression:
PostfixExpression PLUSPLUS
{
ELEMENTSTART(2);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
PostDecrementExpression:
PostfixExpression MINUSMINUS
{
ELEMENTSTART(2);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
UnaryExpression:
PreIncrementExpression
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
PreDecrementExpression
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
PLUS UnaryExpression
{
ELEMENTSTART(2);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
MINUS UnaryExpression
{
ELEMENTSTART(2);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
UnaryExpressionNotPlusMinus
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
PreIncrementExpression:
PLUSPLUS UnaryExpression
{
ELEMENTSTART(2);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
PreDecrementExpression:
MINUSMINUS UnaryExpression
{
ELEMENTSTART(2);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
UnaryExpressionNotPlusMinus:
PostfixExpression
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
TILDE UnaryExpression
{
ELEMENTSTART(2);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
EXCLAMATION UnaryExpression
{
ELEMENTSTART(2);
CHECKEMPTY(2);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
CastExpression
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
CastExpression:
PARESTART PrimitiveType Dimsopt PAREEND UnaryExpression
{
ELEMENTSTART(5);
CHECKEMPTY(5);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
PARESTART Expression PAREEND UnaryExpressionNotPlusMinus
{
ELEMENTSTART(4);
CHECKEMPTY(4);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
PARESTART Name Dims PAREEND UnaryExpressionNotPlusMinus
{
ELEMENTSTART(5);
}
MultiplicativeExpression:
UnaryExpression
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
MultiplicativeExpression TIMES UnaryExpression
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
MultiplicativeExpression DIVIDE UnaryExpression
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
MultiplicativeExpression PERCENT UnaryExpression
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
AdditiveExpression:
MultiplicativeExpression
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
AdditiveExpression PLUS MultiplicativeExpression
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
AdditiveExpression MINUS MultiplicativeExpression
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ShiftExpression:
AdditiveExpression
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ShiftExpression LTLT AdditiveExpression
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ShiftExpression GTGT AdditiveExpression
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ShiftExpression GTGTGT AdditiveExpression
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
RelationalExpression:
ShiftExpression
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
RelationalExpression LESSTHAN ShiftExpression
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
RelationalExpression GREATER ShiftExpression
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
RelationalExpression LTEQUALS ShiftExpression
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
RelationalExpression GTEQUALS ShiftExpression
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
RelationalExpression INSTANCEOF ReferenceType
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
EqualityExpression:
RelationalExpression
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
EqualityExpression EQUALSEQUALS RelationalExpression
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
EqualityExpression EXCLAMATIONEQUALS RelationalExpression
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
AndExpression:
EqualityExpression
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
AndExpression AND EqualityExpression
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ExclusiveOrExpression:
AndExpression
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ExclusiveOrExpression CARROT AndExpression
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
InclusiveOrExpression:
ExclusiveOrExpression
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
InclusiveOrExpression PIPE ExclusiveOrExpression
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ConditionalAndExpression:
InclusiveOrExpression
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ConditionalAndExpression ANDAND InclusiveOrExpression
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ConditionalOrExpression:
ConditionalAndExpression
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ConditionalOrExpression PIPEPIPE ConditionalAndExpression
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ConditionalExpression:
ConditionalOrExpression
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ConditionalOrExpression QUESTION Expression COLON ConditionalExpression
{
ELEMENTSTART(5);
CHECKEMPTY(5);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
AssignmentExpression:
ConditionalExpression
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
Assignment
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
Assignment:
LeftHandSide AssignmentOperator AssignmentExpression
{
ELEMENTSTART(3);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
LeftHandSide:
Name
{
ELEMENTSTART(1);
yyGetParser->DeallocateParserType(&($<str>1));
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
FieldAccess
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ArrayAccess
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
AssignmentOperator:
EQUALS
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
TIMESEQUALS
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
DIVIDEEQUALS
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
PERCENTEQUALS
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
PLUSEQUALS
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
MINUSEQUALS
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
LESLESEQUALS
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
GTGTEQUALS
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
GTGTGTEQUALS
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
ANDEQUALS
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
CARROTEQUALS
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
PIPEEQUALS
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
Expression:
AssignmentExpression
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
ConstantExpression:
Expression
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
New:
NEW
{
ELEMENTSTART(1);
CHECKEMPTY(1);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
|
Name DOT NEW
{
ELEMENTSTART(3);
STORECLASS($<str>1);
CHECKEMPTY(3);
$<str>$ = 0;
yyGetParser->SetCurrentCombine("");
}
%%
/* End of grammar */
/*--------------------------------------------------------------------------*/
void cmDependsJavaError(yyscan_t yyscanner, const char* message)
{
yyGetParser->Error(message);
}