blob: 6e36a4fd3181ade33a2d7ff60c0e36716851bc89 [file] [log] [blame]
// 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
;