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 ContentsThe Java Language Specification
Generated with CERN WebMaker