// ANTLR generated tree grammar




header {
}

class GroovyRecognizerTree extends TreeParser;
options {
	buildAST = false;
}


compilationUnit
	:
	(
		packageDefinition
		|
			(
				statement
			)?
	)
	(
		(
			statement
		)?
	)*
	;

snippetUnit
	:
	blockBody
	;

packageDefinition
	:
	#( 
		PACKAGE_DEF
		annotationsOpt
		identifier
	)
	;

importStatement
	:
	#( 
		"import"
		identifierStar
	)
	;

typeDefinitionInternal
	:
	classDefinition
	|
		interfaceDefinition
	|
		enumDefinition
	|
		annotationDefinition
	;

singleDeclaration
	:
	(
		varInitializer
	)?
	;

upperCaseIdent
	:
	IDENT
	;

typeSpec
	:
	classTypeSpec
	|
		builtInTypeSpec
	;

classTypeSpec
	:
	declaratorBrackets
	;

classOrInterfaceType0a
	:
	#( 
		IDENT
		(
			typeArguments
		)?
	)
	|
		#( 
			DOT
			classOrInterfaceType0a
			IDENT
			(
				typeArguments
			)?
		)
	;

classOrInterfaceType
	:
	#( 
		DOT
		classOrInterfaceType0a
		IDENT
		(
			typeArguments
		)?
	)
	|
		#( 
			IDENT
			(
				typeArguments
			)?
		)
	;

typeArgumentSpec
	:
	classTypeSpec
	|
		builtInTypeArraySpec
	;

typeArgument
	:
	(
		typeArgumentSpec
		|
			wildcardType
	)
	;

wildcardType
	:
	#( 
		WILDCARD_TYPE
		(
			typeArgumentBounds
		)?
	)
	;

typeArguments
	:
	typeArgument
	(
		typeArgument
	)*
	(
		typeArgumentsOrParametersEnd
	)?
	;

typeArgumentBounds
	:
	classOrInterfaceType
	;

builtInTypeArraySpec
	:
	(
		declaratorBrackets
		|
	)
	;

builtInTypeSpec
	:
	declaratorBrackets
	;

type
	:
	classOrInterfaceType
	|
		builtInType
	;

builtInType
	:
	"void"
	|
		"boolean"
	|
		"byte"
	|
		"char"
	|
		"short"
	|
		"int"
	|
		"float"
	|
		"long"
	|
		"double"
	|
		"any"
	;

identifier0a
	:
	IDENT
	|
		#( 
			DOT
			identifier0a
			IDENT
		)
	;

identifier
	:
	#( 
		DOT
		identifier0a
		IDENT
	)
	|
		IDENT
	;

identifierStar0a
	:
	IDENT
	|
		#( 
			DOT
			identifierStar0a
			IDENT
		)
	;

identifierStar
	:
	#( 
		DOT
		#( 
			DOT
			identifierStar0a
			IDENT
		)
		STAR
	)
	|
		#( 
			"as"
			#( 
				DOT
				identifierStar0a
				IDENT
			)
			IDENT
		)
	|
		#( 
			DOT
			identifierStar0a
			IDENT
		)
	|
		#( 
			DOT
			IDENT
			STAR
		)
	|
		#( 
			"as"
			IDENT
			IDENT
		)
	|
		IDENT
	;

modifiersInternal
	:
	(
		modifier
		|
			annotation
		|
	)+
	;

modifiers
	:
	modifiersInternal
	;

modifiersOpt
	:
	(
		modifiersInternal
	)?
	;

modifier
	:
	"private"
	|
		"public"
	|
		"protected"
	|
		"static"
	|
		"transient"
	|
		"final"
	|
		"abstract"
	|
		"native"
	|
		"threadsafe"
	|
		"synchronized"
	|
		"volatile"
	|
		"strictfp"
	;

annotationsOpt
	:
	(
		annotation
	)*
	;

annotationArguments
	:
	annotationMemberValueInitializer
	|
		anntotationMemberValuePairs
	;

anntotationMemberValuePairs
	:
	annotationMemberValuePair
	(
		annotationMemberValuePair
	)*
	;

annotationMemberValueInitializer
	:
	conditionalExpression
	|
		annotation
	;

annotationMemberArrayValueInitializer
	:
	conditionalExpression
	|
		annotation
	;

typeParameters
	:
	typeParameter
	(
		typeParameter
	)*
	(
		typeArgumentsOrParametersEnd
	)?
	;

typeParameter
	:
	(
		IDENT
	)
	(
		typeParameterBounds
	)?
	;

typeParameterBounds
	:
	classOrInterfaceType
	(
		classOrInterfaceType
	)*
	;

classBlock
	:
	(
		classField
	)?
	(
		(
			classField
		)?
	)*
	;

interfaceBlock
	:
	(
		interfaceField
	)?
	(
		(
			interfaceField
		)?
	)*
	;

annotationBlock
	:
	(
		annotationField
	)?
	(
		(
			annotationField
		)?
	)*
	;

enumBlock
	:
	(
		enumConstants
		|
			(
				classField
			)?
	)
	(
		(
			classField
		)?
	)*
	;

enumConstantsStart
	:
	enumConstant
	(
		COMMA
		|
			SEMI
		|
			NLS
		|
			RCURLY
	)
	;

enumConstants
	:
	enumConstant
	(
		enumConstant
	)*
	;

enumConstantBlock
	:
	(
		enumConstantField
	)?
	(
		(
			enumConstantField
		)?
	)*
	;

interfaceExtends
	:
	(
		classOrInterfaceType
		(
			classOrInterfaceType
		)*
	)?
	;

implementsClause
	:
	(
		classOrInterfaceType
		(
			classOrInterfaceType
		)*
	)?
	;

constructorBody
	:
	#( 
		SLIST
		(
			explicitConstructorInvocation
			(
				blockBody
			)?
			|
				blockBody
		)
	)
	;

explicitConstructorInvocation
	:
	#( 
		CTOR_CALL
		(
			typeArguments
		)?
		argList
	)
	|
		#( 
			SUPER_CTOR_CALL
			(
				typeArguments
			)?
			argList
		)
	;

variableDefinitions
	:
	variableDeclarator
	(
		variableDeclarator
	)*
	|
		(
			IDENT
			|
				STRING_LITERAL
		)
	;

constructorDefinition
	:
	IDENT
	;

variableName
	:
	IDENT
	;

declaratorBrackets0a
	:
	#( 
		ARRAY_DECLARATOR
		declaratorBrackets0a
	)
	|
	;

declaratorBrackets
	:
	#( 
		ARRAY_DECLARATOR
		declaratorBrackets0a
	)
	|
	;

varInitializer
	:
	#( 
		ASSIGN
		expression
	)
	;

throwsClause
	:
	#( 
		"throws"
		identifier
		(
			identifier
		)*
	)
	;

parameterDeclarationList
	:
	(
		parameterDeclaration
		(
			parameterDeclaration
		)*
	)?
	;

simpleParameterDeclarationList
	:
	simpleParameterDeclaration
	(
		simpleParameterDeclaration
	)*
	;

parameterModifiersOpt
	:
	(
		"final"
		|
			annotation
		|
	)*
	;

closureParametersOpt
	:
	parameterDeclarationList
	|
		oldClosureParameters
	|
		implicitParameters
	|
	;

oldClosureParameters
	:
	parameterDeclarationList
	|
		simpleParameterDeclarationList
	|
	;

compoundStatement
	:
	openBlock
	;

openBlock
	:
	#( 
		SLIST
		blockBody
	)
	;

blockBody
	:
	(
		statement
	)?
	(
		(
			statement
		)?
	)*
	;

closedBlock
	:
	#( 
		CLOSED_BLOCK
		closureParametersOpt
		blockBody
	)
	;

openOrClosedBlock
	:
	#( 
		LCURLY
		closureParametersOpt
		blockBody
	)
	;

statement
	:
	(
		openOrClosedBlock
		|
			statement
	)
	|
		expressionStatement
	|
		typeDefinitionInternal
	|
		forStatement
	|
		#( 
			"while"
			strictContextExpression
			compatibleBodyStatement
		)
	|
		#( 
			"with"
			strictContextExpression
			compoundStatement
		)
	|
		#( 
			SPREAD_ARG
			expressionStatement
		)
	|
		importStatement
	|
		tryBlock
	|
		#( 
			"synchronized"
			strictContextExpression
			compoundStatement
		)
	|
		branchStatement
	|
		declaration
	;

forStatement
	:
	#( 
		"for"
		(
			traditionalForClause
			|
				forInClause
		)
		compatibleBodyStatement
	)
	;

traditionalForClause
	:
	forInit
	forCond
	forIter
	;

forInClause
	:
	#( 
		"in"
		(
			singleDeclarationNoInit
			|
				IDENT
		)
		shiftExpression
	)
	|
		#( 
			COLON
			(
				singleDeclarationNoInit
				|
					IDENT
			)
			expression
		)
	;

compatibleBodyStatement
	:
	compoundStatement
	|
		statement
	;

branchStatement
	:
	#( 
		"break"
		(
			statementLabelPrefix
		)?
		(
			expression
		)?
	)
	|
		#( 
			"continue"
			(
				statementLabelPrefix
			)?
			(
				expression
			)?
		)
	|
		#( 
			"throw"
			expression
		)
	|
		#( 
			"assert"
			expression
			(
				expression
			)?
		)
	|
		#( 
			"return"
			(
				expression
			)?
		)
	;

statementLabelPrefix
	:
	#( 
		LABELED_STAT
		IDENT
	)
	;

expressionStatement
	:
	(
		checkSuspiciousExpressionStatement
	)?
	expression
	;

suspiciousExpressionStatementStart
	:
	(
		(
			PLUS
			|
				MINUS
		)
		|
			(
				LBRACK
				|
					LPAREN
				|
					LCURLY
			)
	)
	;

casesGroup
	:
	(
		aCase
	)+
	caseSList
	;

aCase
	:
	#( 
		"case"
		expression
	)
	|
		(
			"default"
		)
	;

caseSList
	:
	statement
	(
		(
			statement
		)?
	)*
	;

forInit
	:
	declaration
	|
		(
			controlExpressionList
		)?
	;

forCond
	:
	(
		strictContextExpression
	)?
	;

forIter
	:
	(
		controlExpressionList
	)?
	;

tryBlock
	:
	#( 
		"try"
		compoundStatement
		(
			handler
		)*
		(
			finallyClause
		)?
	)
	;

finallyClause
	:
	#( 
		"finally"
		compoundStatement
	)
	;

handler
	:
	#( 
		"catch"
		parameterDeclaration
		compoundStatement
	)
	;

commandArguments
	:
	expression
	(
		expression
	)*
	;

expression
	:
	assignmentExpression
	;

controlExpressionList
	:
	strictContextExpression
	(
		strictContextExpression
	)*
	;

pathElement
	:
	#( 
		SPREAD_DOT
		(
			typeArguments
		)?
		namePart
	)
	|
		#( 
			OPTIONAL_DOT
			(
				typeArguments
			)?
			namePart
		)
	|
		#( 
			MEMBER_POINTER
			(
				typeArguments
			)?
			namePart
		)
	|
		#( 
			DOT
			(
				typeArguments
			)?
			namePart
		)
	|
	;

namePart
	:
	#( 
		AT
		(
			IDENT
			|
				STRING_LITERAL
			|
				openBlock
			|
				keywordPropertyNames
			|
		)
	)
	|
		(
			IDENT
			|
				STRING_LITERAL
			|
				openBlock
			|
				keywordPropertyNames
			|
		)
	;

keywordPropertyNames
	:
	(
		"class"
		|
			"in"
		|
			"as"
		|
			"def"
		|
			"if"
		|
			"else"
		|
			"for"
		|
			"while"
		|
			"do"
		|
			"switch"
		|
			"try"
		|
			"catch"
		|
			"finally"
		|
			builtInType
	)
	;

dynamicMemberName
	:
	(
		parenthesizedExpression
		|
			stringConstructorExpression
	)
	;

methodCallArgs
	:
	#( 
		METHOD_CALL
		argList
	)
	;

appendedBlock
	:
	closedBlock
	;

indexPropertyArgs
	:
	#( 
		INDEX_OP
		argList
	)
	;

assignmentExpression
	:
	#( 
		ASSIGN
		conditionalExpression
		assignmentExpression
	)
	|
		#( 
			PLUS_ASSIGN
			conditionalExpression
			assignmentExpression
		)
	|
		#( 
			MINUS_ASSIGN
			conditionalExpression
			assignmentExpression
		)
	|
		#( 
			STAR_ASSIGN
			conditionalExpression
			assignmentExpression
		)
	|
		#( 
			DIV_ASSIGN
			conditionalExpression
			assignmentExpression
		)
	|
		#( 
			MOD_ASSIGN
			conditionalExpression
			assignmentExpression
		)
	|
		#( 
			SR_ASSIGN
			conditionalExpression
			assignmentExpression
		)
	|
		#( 
			BSR_ASSIGN
			conditionalExpression
			assignmentExpression
		)
	|
		#( 
			SL_ASSIGN
			conditionalExpression
			assignmentExpression
		)
	|
		#( 
			BAND_ASSIGN
			conditionalExpression
			assignmentExpression
		)
	|
		#( 
			BXOR_ASSIGN
			conditionalExpression
			assignmentExpression
		)
	|
		#( 
			BOR_ASSIGN
			conditionalExpression
			assignmentExpression
		)
	|
		#( 
			STAR_STAR_ASSIGN
			conditionalExpression
			assignmentExpression
		)
	|
		conditionalExpression
	;

conditionalExpression
	:
	#( 
		QUESTION
		logicalOrExpression
		assignmentExpression
		conditionalExpression
	)
	|
		logicalOrExpression
	;

logicalOrExpression0a
	:
	logicalAndExpression
	|
		#( 
			LOR
			logicalOrExpression0a
			logicalAndExpression
		)
	;

logicalOrExpression
	:
	#( 
		LOR
		logicalOrExpression0a
		logicalAndExpression
	)
	|
		logicalAndExpression
	;

logicalAndExpression0a
	:
	inclusiveOrExpression
	|
		#( 
			LAND
			logicalAndExpression0a
			inclusiveOrExpression
		)
	;

logicalAndExpression
	:
	#( 
		LAND
		logicalAndExpression0a
		inclusiveOrExpression
	)
	|
		inclusiveOrExpression
	;

inclusiveOrExpression0a
	:
	exclusiveOrExpression
	|
		#( 
			BOR
			inclusiveOrExpression0a
			exclusiveOrExpression
		)
	;

inclusiveOrExpression
	:
	#( 
		BOR
		inclusiveOrExpression0a
		exclusiveOrExpression
	)
	|
		exclusiveOrExpression
	;

exclusiveOrExpression0a
	:
	andExpression
	|
		#( 
			BXOR
			exclusiveOrExpression0a
			andExpression
		)
	;

exclusiveOrExpression
	:
	#( 
		BXOR
		exclusiveOrExpression0a
		andExpression
	)
	|
		andExpression
	;

andExpression0a
	:
	regexExpression
	|
		#( 
			BAND
			andExpression0a
			regexExpression
		)
	;

andExpression
	:
	#( 
		BAND
		andExpression0a
		regexExpression
	)
	|
		regexExpression
	;

regexExpression0a
	:
	equalityExpression
	|
		#( 
			REGEX_FIND
			regexExpression0a
			equalityExpression
		)
	|
		#( 
			REGEX_MATCH
			regexExpression0b
			equalityExpression
		)
	;

regexExpression0b
	:
	equalityExpression
	|
		#( 
			REGEX_FIND
			regexExpression0a
			equalityExpression
		)
	|
		#( 
			REGEX_MATCH
			regexExpression0b
			equalityExpression
		)
	;

regexExpression
	:
	#( 
		REGEX_FIND
		regexExpression0a
		equalityExpression
	)
	|
		#( 
			REGEX_MATCH
			regexExpression0b
			equalityExpression
		)
	|
		equalityExpression
	;

equalityExpression0a
	:
	relationalExpression
	|
		#( 
			NOT_EQUAL
			equalityExpression0a
			relationalExpression
		)
	|
		#( 
			EQUAL
			equalityExpression0b
			relationalExpression
		)
	|
		#( 
			COMPARE_TO
			equalityExpression0c
			relationalExpression
		)
	;

equalityExpression0b
	:
	relationalExpression
	|
		#( 
			NOT_EQUAL
			equalityExpression0a
			relationalExpression
		)
	|
		#( 
			EQUAL
			equalityExpression0b
			relationalExpression
		)
	|
		#( 
			COMPARE_TO
			equalityExpression0c
			relationalExpression
		)
	;

equalityExpression0c
	:
	relationalExpression
	|
		#( 
			NOT_EQUAL
			equalityExpression0a
			relationalExpression
		)
	|
		#( 
			EQUAL
			equalityExpression0b
			relationalExpression
		)
	|
		#( 
			COMPARE_TO
			equalityExpression0c
			relationalExpression
		)
	;

equalityExpression
	:
	#( 
		NOT_EQUAL
		equalityExpression0a
		relationalExpression
	)
	|
		#( 
			EQUAL
			equalityExpression0b
			relationalExpression
		)
	|
		#( 
			COMPARE_TO
			equalityExpression0c
			relationalExpression
		)
	|
		relationalExpression
	;

relationalExpression
	:
	#( 
		LT
		shiftExpression
		shiftExpression
	)
	|
		#( 
			GT
			shiftExpression
			shiftExpression
		)
	|
		#( 
			LE
			shiftExpression
			shiftExpression
		)
	|
		#( 
			GE
			shiftExpression
			shiftExpression
		)
	|
		#( 
			"in"
			shiftExpression
			shiftExpression
		)
	|
		shiftExpression
	|
		#( 
			"instanceof"
			shiftExpression
			typeSpec
		)
	|
		#( 
			"as"
			shiftExpression
			typeSpec
		)
	;

shiftExpression0a
	:
	additiveExpression
	|
		#( 
			SL
			shiftExpression0a
			additiveExpression
		)
	|
		#( 
			SR
			shiftExpression0b
			additiveExpression
		)
	|
		#( 
			BSR
			shiftExpression0c
			additiveExpression
		)
	|
		#( 
			RANGE_INCLUSIVE
			shiftExpression0d
			additiveExpression
		)
	|
		#( 
			RANGE_EXCLUSIVE
			shiftExpression0e
			additiveExpression
		)
	|
		#( 
			RANGE_EXCLUSIVE
			shiftExpression0f
			additiveExpression
		)
	;

shiftExpression0b
	:
	additiveExpression
	|
		#( 
			SL
			shiftExpression0a
			additiveExpression
		)
	|
		#( 
			SR
			shiftExpression0b
			additiveExpression
		)
	|
		#( 
			BSR
			shiftExpression0c
			additiveExpression
		)
	|
		#( 
			RANGE_INCLUSIVE
			shiftExpression0d
			additiveExpression
		)
	|
		#( 
			RANGE_EXCLUSIVE
			shiftExpression0e
			additiveExpression
		)
	|
		#( 
			RANGE_EXCLUSIVE
			shiftExpression0f
			additiveExpression
		)
	;

shiftExpression0c
	:
	additiveExpression
	|
		#( 
			SL
			shiftExpression0a
			additiveExpression
		)
	|
		#( 
			SR
			shiftExpression0b
			additiveExpression
		)
	|
		#( 
			BSR
			shiftExpression0c
			additiveExpression
		)
	|
		#( 
			RANGE_INCLUSIVE
			shiftExpression0d
			additiveExpression
		)
	|
		#( 
			RANGE_EXCLUSIVE
			shiftExpression0e
			additiveExpression
		)
	|
		#( 
			RANGE_EXCLUSIVE
			shiftExpression0f
			additiveExpression
		)
	;

shiftExpression0d
	:
	additiveExpression
	|
		#( 
			SL
			shiftExpression0a
			additiveExpression
		)
	|
		#( 
			SR
			shiftExpression0b
			additiveExpression
		)
	|
		#( 
			BSR
			shiftExpression0c
			additiveExpression
		)
	|
		#( 
			RANGE_INCLUSIVE
			shiftExpression0d
			additiveExpression
		)
	|
		#( 
			RANGE_EXCLUSIVE
			shiftExpression0e
			additiveExpression
		)
	|
		#( 
			RANGE_EXCLUSIVE
			shiftExpression0f
			additiveExpression
		)
	;

shiftExpression0e
	:
	additiveExpression
	|
		#( 
			SL
			shiftExpression0a
			additiveExpression
		)
	|
		#( 
			SR
			shiftExpression0b
			additiveExpression
		)
	|
		#( 
			BSR
			shiftExpression0c
			additiveExpression
		)
	|
		#( 
			RANGE_INCLUSIVE
			shiftExpression0d
			additiveExpression
		)
	|
		#( 
			RANGE_EXCLUSIVE
			shiftExpression0e
			additiveExpression
		)
	|
		#( 
			RANGE_EXCLUSIVE
			shiftExpression0f
			additiveExpression
		)
	;

shiftExpression0f
	:
	additiveExpression
	|
		#( 
			SL
			shiftExpression0a
			additiveExpression
		)
	|
		#( 
			SR
			shiftExpression0b
			additiveExpression
		)
	|
		#( 
			BSR
			shiftExpression0c
			additiveExpression
		)
	|
		#( 
			RANGE_INCLUSIVE
			shiftExpression0d
			additiveExpression
		)
	|
		#( 
			RANGE_EXCLUSIVE
			shiftExpression0e
			additiveExpression
		)
	|
		#( 
			RANGE_EXCLUSIVE
			shiftExpression0f
			additiveExpression
		)
	;

shiftExpression
	:
	#( 
		SL
		shiftExpression0a
		additiveExpression
	)
	|
		#( 
			SR
			shiftExpression0b
			additiveExpression
		)
	|
		#( 
			BSR
			shiftExpression0c
			additiveExpression
		)
	|
		#( 
			RANGE_INCLUSIVE
			shiftExpression0d
			additiveExpression
		)
	|
		#( 
			RANGE_EXCLUSIVE
			shiftExpression0e
			additiveExpression
		)
	|
		#( 
			RANGE_EXCLUSIVE
			shiftExpression0f
			additiveExpression
		)
	|
		additiveExpression
	;

additiveExpression0a
	:
	multiplicativeExpression
	|
		#( 
			PLUS
			additiveExpression0a
			multiplicativeExpression
		)
	|
		#( 
			MINUS
			additiveExpression0b
			multiplicativeExpression
		)
	;

additiveExpression0b
	:
	multiplicativeExpression
	|
		#( 
			PLUS
			additiveExpression0a
			multiplicativeExpression
		)
	|
		#( 
			MINUS
			additiveExpression0b
			multiplicativeExpression
		)
	;

additiveExpression
	:
	#( 
		PLUS
		additiveExpression0a
		multiplicativeExpression
	)
	|
		#( 
			MINUS
			additiveExpression0b
			multiplicativeExpression
		)
	|
		multiplicativeExpression
	;

multiplicativeExpression0a
	:
	#( 
		INC
		powerExpression
	)
	|
		#( 
			STAR
			multiplicativeExpression0a
			powerExpression
		)
	|
		#( 
			DIV
			multiplicativeExpression0b
			powerExpression
		)
	|
		#( 
			MOD
			multiplicativeExpression0c
			powerExpression
		)
	;

multiplicativeExpression0b
	:
	#( 
		INC
		powerExpression
	)
	|
		#( 
			STAR
			multiplicativeExpression0a
			powerExpression
		)
	|
		#( 
			DIV
			multiplicativeExpression0b
			powerExpression
		)
	|
		#( 
			MOD
			multiplicativeExpression0c
			powerExpression
		)
	;

multiplicativeExpression0c
	:
	#( 
		INC
		powerExpression
	)
	|
		#( 
			STAR
			multiplicativeExpression0a
			powerExpression
		)
	|
		#( 
			DIV
			multiplicativeExpression0b
			powerExpression
		)
	|
		#( 
			MOD
			multiplicativeExpression0c
			powerExpression
		)
	;

multiplicativeExpression
	:
	#( 
		STAR
		multiplicativeExpression0a
		powerExpression
	)
	|
		#( 
			DIV
			multiplicativeExpression0b
			powerExpression
		)
	|
		#( 
			MOD
			multiplicativeExpression0c
			powerExpression
		)
	|
		#( 
			STAR
			multiplicativeExpression1a
			powerExpression
		)
	|
		#( 
			DIV
			multiplicativeExpression1b
			powerExpression
		)
	|
		#( 
			MOD
			multiplicativeExpression1c
			powerExpression
		)
	|
		#( 
			STAR
			multiplicativeExpression4a
			powerExpression
		)
	|
		#( 
			DIV
			multiplicativeExpression4b
			powerExpression
		)
	|
		#( 
			MOD
			multiplicativeExpression4c
			powerExpression
		)
	|
		#( 
			DEC
			powerExpression
		)
	|
		powerExpression
	|
		#( 
			INC
			powerExpression
		)
	;

powerExpression0a
	:
	unaryExpressionNotPlusMinus
	|
		#( 
			STAR_STAR
			powerExpression0a
			unaryExpression
		)
	;

powerExpression
	:
	#( 
		STAR_STAR
		powerExpression0a
		unaryExpression
	)
	|
		unaryExpressionNotPlusMinus
	;

unaryExpression
	:
	#( 
		DEC
		unaryExpression
	)
	|
		#( 
			UNARY_MINUS
			unaryExpression
		)
	|
		#( 
			UNARY_PLUS
			unaryExpression
		)
	|
		unaryExpressionNotPlusMinus
	|
		#( 
			INC
			unaryExpression
		)
	;

unaryExpressionNotPlusMinus
	:
	#( 
		LNOT
		unaryExpression
	)
	|
		#( 
			LPAREN
			builtInTypeSpec
			unaryExpression
		)
	|
		#( 
			LPAREN
			classTypeSpec
			unaryExpressionNotPlusMinus
		)
	|
		#( 
			BNOT
			unaryExpression
		)
	;

postfixExpression
	:
	#( 
		POST_INC
		pathExpression
	)
	|
		#( 
			POST_DEC
			pathExpression
		)
	|
		pathExpression
	;

primaryExpression
	:
	IDENT
	|
		constant
	|
		newExpression
	|
		"this"
	|
		"super"
	|
		parenthesizedExpression
	|
		closureConstructorExpression
	|
		listOrMapConstructorExpression
	|
		stringConstructorExpression
	|
		scopeEscapeExpression
	|
		builtInType
	;

parenthesizedExpression
	:
	strictContextExpression
	;

scopeEscapeExpression
	:
	#( 
		SCOPE_ESCAPE
		(
			IDENT
			|
				scopeEscapeExpression
		)
	)
	;

strictContextExpression
	:
	(
		singleDeclaration
		|
			expression
		|
			branchStatement
		|
			annotation
	)
	;

closureConstructorExpression
	:
	closedBlock
	;

stringConstructorExpression
	:
	STRING_CTOR_START
	stringConstructorValuePart
	(
		STRING_CTOR_MIDDLE
		stringConstructorValuePart
	)*
	STRING_CTOR_END
	;

stringConstructorValuePart
	:
	#( 
		SPREAD_ARG
		(
			identifier
			|
				openOrClosedBlock
		)
	)
	|
		(
			identifier
			|
				openOrClosedBlock
		)
	;

listOrMapConstructorExpression
	:
	LBRACK
	|
		#( 
			LBRACK
			argList
		)
	;

newExpression
	:
	#( 
		"new"
		(
			typeArguments
		)?
		type
		(
			newArrayDeclarator
			|
		)
	)
	;

argList
	:
	(
		argument
		(
			argument
		)*
		|
	)
	;

argument
	:
	#( 
		LABELED_ARG
		argumentLabel
		strictContextExpression
	)
	|
		#( 
			SPREAD_ARG
			strictContextExpression
		)
	|
		strictContextExpression
	;

argumentLabel
	:
	IDENT
	|
		keywordPropertyNames
	|
		primaryExpression
	;

newArrayDeclarator0a
	:
	#( 
		ARRAY_DECLARATOR
		newArrayDeclarator0a
		(
			expression
		)?
	)
	|
	;

newArrayDeclarator
	:
	#( 
		ARRAY_DECLARATOR
		newArrayDeclarator0a
		(
			expression
		)?
	)
	;

constant
	:
	constantNumber
	|
		STRING_LITERAL
	|
		"true"
	|
		"false"
	|
		"null"
	;

constantNumber
	:
	NUM_INT
	|
		NUM_FLOAT
	|
		NUM_LONG
	|
		NUM_DOUBLE
	|
		NUM_BIG_INT
	|
		NUM_BIG_DECIMAL
	;
