The grammar has undefined terminal symbols DocComment, Identifier, Number, String, and Character. Quoted text signifies literal terminals.
Each rule is of the form nonterminal = meta-expression ; Other meta-notation is: | for alternation, ( ... ) for grouping, postfix ? for 0 or 1 occurrences, postfix + for 1 or more occurrence, and postfix * for 0 or more occurrences.
CompilationUnit =
PackageStatement? ImportStatement* TypeDeclaration*
;
PackageStatement =
`package' PackageName `;'
;
ImportStatement =
`import' PackageName `.' `*' `;'
| `import' ( ClassName | InterfaceName )`;'
;
TypeDeclaration =
ClassDeclaration
| InterfaceDeclaration
| `;'
;
ClassDeclaration =
Modifier* `class' Identifier
(`extends' ClassName)?
(`implements' InterfaceName (`,' InterfaceName)*)?
`{' FieldDeclaration* `}'
;
InterfaceDeclaration =
Modifier* `interface' Identifier
(`extends' InterfaceName (`,' InterfaceName)*)?
`{' FieldDeclaration* `}'
;
FieldDeclaration =
DocComment? MethodDeclaration
| DocComment? ConstructorDeclaration
| DocComment? VariableDeclaration
| StaticInitializer
| `;'
;
MethodDeclaration =
Modifier* Type Identifier `(' ParameterList? `)' ( `[' `]' )*
( `{' Statement* `}' | `;' )
;
ConstructorDeclaration =
Modifier* Identifier `(' ParameterList? `)'
`{' Statement* `}'
;
VariableDeclaration =
Modifier* Type VariableDeclarator (`,' VariableDeclarator)* `;'
;
VariableDeclarator =
Identifier (`[' `]')* (`=' VariableInitializer)?
;
VariableInitializer =
Expression
| `{' ( VariableInitializer ( `,' VariableInitializer )* `,'? )? `}'
;
StaticInitializer =
`static' `{' Statement* `}'
;
ParameterList =
Parameter (`,' Parameter)*
;
Parameter =
TypeSpecifier Identifier (`[' `]')*
;
Statement =
VariableDeclaration
| Expression `;'
| `{' Statement* `}'
| `if' `(' Expression `)' Statement (`else' Statement)?
| `while' `(' Expression `)' Statement
| `do' Statement `while' `(' Expression `)' `;'
| `try' Statement (`catch' `(' Parameter `)' Statement)*
(`finally' Statement)?
| `switch' `(' Expression `)' `{' Statement* `}'
| `synchronized' `(' Expression `)' Statement
| `return' Expression? `;'
| `throw' Expression `;'
| `case' Expression `:'
| `default' `:'
| Identifier `:' Statement
| `break' Identifier? `;'
| `continue' Identifier? `;'
| `;'
;
Expression =
Expression `+' Expression
| Expression `-' Expression
| Expression `*' Expression
| Expression `/' Expression
| Expression `%' Expression
| Expression `^' Expression
| Expression `&' Expression
| Expression `|' Expression
| Expression `&&' Expression
| Expression `||' Expression
| Expression `<<` Expression
| Expression `>>' Expression
| Expression `>>>' Expression
| Expression `=' Expression
| Expression `+=' Expression
| Expression `-=' Expression
| Expression `*=' Expression
| Expression `/=' Expression
| Expression `%=' Expression
| Expression `^=' Expression
| Expression `&=' Expression
| Expression `|=' Expression
| Expression `<<=' Expression
| Expression `>>=' Expression
| Expression `>>>=' Expression
| Expression `<` Expression
| Expression `>' Expression
| Expression `<=' Expression
| Expression `>=' Expression
| Expression `==' Expression
| Expression `!=' Expression
| Expression `.' Expression
| Expression `,' Expression
| Expression `instanceof' ( ClassName | InterfaceName )
| Expression `?' Expression `:' Expression
| Expression `[' Expression `]'
| `++' Expression
| `--' Expression
| Expression `++'
| Expression `--'
| `-' Expression
| `!' Expression
| `~' Expression
| `(' Expression `)'
| `(' Type `)' Expression
| Expression `(' ArgList? `)'
| `new' ClassName `(' ArgList?`)'
| `new' TypeSpecifier ( `[' Expression `]' )+ (`[' `]')*
| `new' `(' Expression `)'
| `true'
| `false'
| `null'
| `super'
| `this'
| Identifier
| Number
| String
| Character
;
ArgList =
Expression (`,' Expression )*
;
Type =
TypeSpecifier (`[' `]')*
;
TypeSpecifier =
`boolean'
| `byte'
| `char'
| `short'
| `int'
| `float'
| `long'
| `double'
| ClassName
| InterfaceName
;
Modifier =
`public'
| `private'
| `protected'
| `static'
| `final'
| `native'
| `synchronized'
| `abstract'
| `threadsafe'
| `transient'
;
PackageName =
Identifier
| PackageName `.' Identifier
;
ClassName =
Identifier
| PackageName `.' Identifier
;
InterfaceName =
Identifier
| PackageName `.' Identifier
;
Prev Up Contents
The Java Language Specification
Generated with CERN WebMaker