BNF rules of JAVA
compilation_unit =
[ package_statement ]
< import_statement >
< type_declaration > .
package_statement =
"package" package_name ";" .
import_statement =
"import" ( ( package_name "." "*" ";" )
/ ( class_name / interface_name ) ) ";" .
type_declaration =
[ doc_comment ] ( class_declaration / interface_declaration ) ";" .
doc_comment = "/**" "... text ..." "*/" .
class_declaration =
< modifier > "class" identifier
[ "extends" class_name ]
[ "implements" interface_name < "," interface_name > ]
"{" < field_declaration > "}" .
interface_declaration =
< modifier > "interface" identifier
[ "extends" interface_name < "," interface_name > ]
"{" < field_declaration > "}" .
field_declaration =
( [ doc_comment ] ( method_declaration
/ constructor_declaration
/ variable_declaration ) )
/ static_initializer
/ ";" .
method_declaration =
< modifier > type identifier
"(" [ parameter_list ] ")" < "[" "]" >
( statement_block / ";" ) .
constructor_declaration =
< modifier > identifier "(" [ parameter_list ] ")"
statement_block .
statement_block = "{" < statement > "}" .
variable_declaration =
< modifier > type variable_declarator
< "," variable_declarator > ";" .
variable_declarator =
identifier < "[" "]" > [ "=" variable_initializer ] .
variable_initializer =
expression
/ ( "{" [ variable_initializer
< "," variable_initializer > [ "," ] ] "}" ) .
static_initializer =
"static" statement_block .
parameter_list =
parameter < "," parameter > .
parameter =
type identifier < "[" "]" > .
statement =
variable_declaration
/ ( expression ";" )
/ ( statement_block )
/ ( if_statement )
/ ( do_statement )
/ ( while_statement )
/ ( for_statement )
/ ( try_statement )
/ ( switch_statement )
/ ( "synchronized" "(" expression ")" statement )
/ ( "return" [ expression ] ";" )
/ ( "throw" expression ";" )
/ ( identifier ":" statement )
/ ( "break" [ identifier ] ";" )
/ ( "continue" [ identifier ] ";" )
/ ( ";" ) .
if_statement =
"if" "(" expression ")" statement
[ "else" statement ] .
do_statement =
"do" statement "while" "(" expression ")" ";" .
while_statement =
"while" "(" expression ")" statement .
for_statement =
"for" "(" ( variable_declaration / ( expression ";" ) / ";" )
[ expression ] ";"
[ expression ] ";"
")" statement .
try_statement =
"try" statement
< "catch" "(" parameter ")" statement >
[ "finally" statement ] .
switch_statement =
"switch" "(" expression ")" "{"
< ( "case" expression ":" )
/ ( "default" ":" )
/ statement >
"}" .
expression =
numeric_expression
/ testing_expression
/ logical_expression
/ string_expression
/ bit_expression
/ casting_expression
/ creating_expression
/ literal_expression
/ "null"
/ "super"
/ "this"
/ identifier
/ ( "(" expression ")" )
/ ( expression
( ( "(" [ arglist ] ")" )
/ ( "[" expression "]" )
/ ( "." expression )
/ ( "," expression )
/ ( "instanceof" ( class_name / interface_name ) )
) ) .
numeric_expression =
( ( "-"
/ "++"
/ "--" )
expression )
/ ( expression
( "++"
/ "--" ) )
/ ( expression
( "+"
/ "+="
/ "-"
/ "-="
/ "*"
/ "*="
/ "/"
/ "/="
/ "%"
/ "%=" )
expression ) .
testing_expression =
( expression
( ">"
/ "<"
/ ">="
/ "<="
/ "=="
/ "!=" )
expression ) .
logical_expression =
( "!" expression )
/ ( expression
( "ampersand"
/ "ampersand="
/ "|"
/ "|="
/ "^"
/ "^="
/ ( "ampersand" "ampersand" )
/ "||="
/ "%"
/ "%=" )
expression )
/ ( expression "?" expression ":" expression )
/ "true"
/ "false" .
string_expression = ( expression
( "+"
/ "+=" )
expression ) .
bit_expression =
( "~" expression )
/ ( expression
( ">>="
/ "<<"
/ ">>"
/ ">>>" )
expression ) .
casting_expression =
"(" type ")" expression .
creating_expression =
"new" ( ( classe_name "(" [ arglist ] ")" )
/ ( type_specifier [ "[" expression "]" ] < "[" "]" > )
/ ( "(" expression ")" ) ) .
literal_expression =
integer_literal
/ float_literal
/ string
/ character .
arglist =
expression < "," expression > .
type =
type_specifier < "[" "]" > .
type_specifier =
"boolean"
/ "byte"
/ "char"
/ "short"
/ "int"
/ "float"
/ "long"
/ "double"
/ class_name
/ interface_name .
modifier =
"public"
/ "private"
/ "protected"
/ "static"
/ "final"
/ "native"
/ "synchronized"
/ "abstract"
/ "threadsafe"
/ "transient" .
package_name =
identifier
/ ( package_name "." identifier ) .
class_name =
identifier
/ ( package_name "." identifier ) .
interface_name =
identifier
/ ( package_name "." identifier ) .
integer_literal =
( ( "1..9" < "0..9" > )
/ < "0..7" >
/ ( "0" "x" "0..9a..f" < "0..9a..f" > ) )
[ "l" ] .
float_literal =
( decimal_digits "." [ decimal_digits ] [ exponent_part ] [ float_type_suffix ] )
/ ( "." decimal_digits [ exponent_part ] [ float_type_suffix ] )
/ ( decimal_digits [ exponent_part ] [ float_type_suffix ] ) .
decimal_digits =
"0..9" < "0..9" > .
exponent_part =
"e" [ "+" / "-" ] decimal_digits .
float_type_suffix =
"f" / "d" .
character =
"based on the unicode character set" .
string =
"''" < character > "''" .
identifier =
"a..z,$,_" < "a..z,$,_,0..9,unicode character over 00C0" > .