Grammar javap; // --- Lexer identifier = ('a'..'z'|'A'..'Z'|'_'|'$') ('a'..'z'|'A'..'Z'|'_'|'$'|'0'..'9')*; blank = (' '|'\n'|'\t'|'\r')+; separator = ('.'|'/'); brackets = '[]'; wildcard = '?'; // --- Parser Ignored blank; multi_files = compiled_from? class_declaration; compiled_from = 'Compiled from "' identifier+ '.java"'; class_declaration = modifier* class_or_interface full_class_name extends_declaration? implements_declaration? throws_declaration? '{' property_declaration* '}'; class_or_interface = 'class'|'interface'; modifier = 'public'|'private'|'protected'|'static'|'final'|'native'|'synchronized'|'abstract'|'threadsafe'|'transient'|'volatile'; type = primitive_type brackets*; primitive_type = 'boolean'|'byte'|'char'|'short'|'int'|'float'|'long'|'double' | type_ref; type_ref = full_class_name | generic_identifier 'extends' full_class_name | question_mark; generic_param = '<' generic_parameter_list '>'; generic_parameter_list = {tail:} generic_parameter_list ',' parameter | {head:} parameter; generic_identifier = full_class_name | wildcard; full_class_name = {tail:} full_class_name separator class_name | {head:} class_name; class_name = identifier generic_param?; parameter = type '...'? | {wildcard:} wildcard 'super' full_class_name ; parameter_list = {tail:} parameter_list ',' parameter | {head:} parameter; attribute_id = identifier brackets*; method_id = identifier; property_declaration = {method:} modifier* generic_param? type method_id '(' parameter_list? ')' throws_declaration? ';' | {constructor:} modifier* full_class_name '(' parameter_list? ')' throws_declaration? ';' | {attribute:} modifier* type attribute_id throws_declaration? ';' | {static:} modifier* '{' '}' ';' | ';'; implements_declaration = 'implements' interface_list; extends_declaration = 'extends' interface_list; interface_list = {tail:} interface_list ',' full_class_name | {head:} full_class_name; throws_declaration = 'throws' exception_list?; exception_list = {tail:} exception_list ',' type | {head:} type;