3228 lines
49 KiB
Plaintext
3228 lines
49 KiB
Plaintext
%{
|
|
/*=========================================================================
|
|
|
|
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 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 __BORLANDC__
|
|
# pragma warn -8004 /* Variable assigned a value that is not used. */
|
|
#endif
|
|
#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);
|
|
}
|
|
|