You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
3215 lines
48 KiB
3215 lines
48 KiB
16 years ago
|
%{
|
||
8 years ago
|
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||
|
file Copyright.txt or https://cmake.org/licensing for details. */
|
||
16 years ago
|
/*
|
||
|
|
||
|
This file must be translated to C and modified to build everywhere.
|
||
|
|
||
|
Run bison like this:
|
||
|
|
||
|
bison --yacc --name-prefix=cmDependsJava_yy --defines=cmDependsJavaParserTokens.h -ocmDependsJavaParser.cxx cmDependsJavaParser.y
|
||
|
|
||
|
Modify cmDependsJavaParser.cxx:
|
||
8 years ago
|
- "#if 0" out yyerrorlab block in range ["goto yyerrlab1", "yyerrlab1:"]
|
||
16 years ago
|
|
||
|
*/
|
||
|
|
||
8 years ago
|
#include "cmConfigure.h" // IWYU pragma: keep
|
||
|
|
||
|
#include <stdlib.h>
|
||
|
#include <string.h>
|
||
|
#include <string>
|
||
|
|
||
16 years ago
|
#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;
|
||
|
|
||
8 years ago
|
/* Helper function to forward error callback from parser. */
|
||
|
static void cmDependsJava_yyerror(yyscan_t yyscanner, const char* message);
|
||
16 years ago
|
|
||
|
#define YYMAXDEPTH 1000000
|
||
|
|
||
|
|
||
|
#define jpCheckEmpty(cnt) yyGetParser->CheckEmpty(__LINE__, cnt, yyvsp);
|
||
|
#define jpElementStart(cnt) yyGetParser->PrepareElement(&yyval)
|
||
|
#define jpStoreClass(str) yyGetParser->AddClassFound(str); yyGetParser->DeallocateParserType(&(str))
|
||
|
/* Disable some warnings in the generated code. */
|
||
|
#ifdef _MSC_VER
|
||
|
# pragma warning (disable: 4102) /* Unused goto label. */
|
||
|
# pragma warning (disable: 4065) /* Switch statement contains default but no case. */
|
||
|
#endif
|
||
|
%}
|
||
|
|
||
|
/* Generate a reentrant parser object. */
|
||
8 years ago
|
%define api.pure
|
||
|
|
||
|
/* Configure the parser to use a lexer object. */
|
||
|
%lex-param {yyscan_t yyscanner}
|
||
|
%parse-param {yyscan_t yyscanner}
|
||
|
|
||
|
%define parse.error verbose
|
||
16 years ago
|
|
||
|
/*
|
||
|
%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("");
|
||
|
}
|
||
|
|
|
||
8 years ago
|
jp_HEXINTEGERLITERAL
|
||
16 years ago
|
{
|
||
|
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 */
|
||
|
|
||
|
/*--------------------------------------------------------------------------*/
|
||
8 years ago
|
void cmDependsJava_yyerror(yyscan_t yyscanner, const char* message)
|
||
16 years ago
|
{
|
||
|
yyGetParser->Error(message);
|
||
|
}
|