6 identifier = ('a'..'z'|'A'..'Z'|'_'|'$') ('a'..'z'|'A'..'Z'|'_'|'-'|'$'|'0'..'9')*;
7 blank = (' '|'\n'|'\t'|'\r')+;
11 compiled_from = 'Compiled from "' (Any-'"')* '"';
19 // Class and properties
22 file = compiled_from? class_declaration;
24 class_declaration = modifier* class_or_interface full_class_name
25 extends_declaration? implements_declaration? throws_declaration?
26 '{' property_declaration* '}';
29 = 'public'|'private'|'protected'|'static'|'final'|'native'
30 |'synchronized'|'abstract'|'threadsafe'|'transient'|'volatile'|'strictfp';
32 class_or_interface = 'class'|'interface';
34 implements_declaration = 'implements' types;
35 extends_declaration = 'extends' types;
36 throws_declaration = 'throws' types?;
39 = {method:} modifier* generic_parameters? type identifier '(' types? ')' throws_declaration? ';'
40 | {constructor:} modifier* generic_parameters? full_class_name '(' types? ')' throws_declaration? ';'
41 | {attribute:} modifier* type identifier brackets* throws_declaration? ';'
42 | {static:} modifier* '{' '}' ';'
48 type = base_type brackets* dots?;
51 = {tail:} types ',' type
55 = {primitive:} primitive_base_type
56 | {class:} full_class_name
57 | {extends:} generic_identifier 'extends' type_bound
58 | {super:} generic_identifier 'super' type_bound
59 | {wildcard:} wildcard
62 primitive_base_type = 'boolean'|'byte'|'char'|'short'|'int'|'float'|'long'|'double';
65 = {tail:} type_bound '&' full_class_name
66 | {head:} full_class_name;
69 = {class:} full_class_name
70 | {wildcard:} wildcard;
72 class_name = identifier generic_parameters?;
75 = {tail:} full_class_name separator class_name
78 generic_parameters = '<' types '>';