6 identifier = ('a'..'z'|'A'..'Z'|'_'|'$') ('a'..'z'|'A'..'Z'|'_'|'-'|'$'|'0'..'9')*;
7 blank = (' '|'\n'|'\t'|'\r')+;
11 compiled_from = 'Compiled from "' (Any-'"')* '"';
19 file = compiled_from? class_declaration;
21 class_declaration = modifier* class_or_interface full_class_name
22 extends_declaration? implements_declaration? throws_declaration?
23 '{' property_declaration* '}';
25 class_or_interface = 'class'|'interface';
28 = 'public'|'private'|'protected'|'static'|'final'|'native'|'synchronized'|'abstract'|'threadsafe'|'transient'|'volatile'|'strictfp';
30 type = base_type brackets*;
33 = {primitive:} primitive_base_type
34 | {class:} full_class_name
35 | {extends:} generic_identifier 'extends' type_bound
36 | {super:} generic_identifier 'super' type_bound
37 | {wildcard:} wildcard
40 primitive_base_type = 'boolean'|'byte'|'char'|'short'|'int'|'float'|'long'|'double';
43 = {tail:} type_bound '&' full_class_name
44 | {head:} full_class_name;
51 = {tail:} full_class_name separator class_name
53 class_name = identifier generic_parameters?;
55 generic_parameters = '<' parameters '>';
57 parameter = type dots?;
59 = {tail:} parameters ',' parameter
63 = {method:} modifier* generic_parameters? type identifier '(' parameters? ')' throws_declaration? ';'
64 | {constructor:} modifier* generic_parameters? full_class_name '(' parameters? ')' throws_declaration? ';'
65 | {attribute:} modifier* type identifier brackets* throws_declaration? ';'
66 | {static:} modifier* '{' '}' ';'
69 implements_declaration = 'implements' interface_list;
70 extends_declaration = 'extends' interface_list;
72 = {tail:} interface_list ',' full_class_name
73 | {head:} full_class_name;
75 throws_declaration = 'throws' exception_list?;
77 = {tail:} exception_list ',' type