annotation( [@] {name}= -> name [(]( :end, value -> val [)]=, :content ); content: :value -> values [)]=; value: {name} [=] value -> add(value)( :end, [,] :value ); end:[)]= ) modifier({modifier}*= -> concat(mod)) class( annotation( :mod, :class ), mod:modifier( :class ), class:[class] type -> name( :end, :implements, :extends ); implements:[implements]( imp:type -> add(implement)( [,] :imp, :end ) ); extends:[extends]( type -> extend( :end, :implements ) ); end:[{]= ) import( [import]( :static, :normal ); static:[static]( :normal ); normal:[!;]* -> concat(import) [;]=; import, class ) package( [package] [!;]* -> concat(package) [;]=; import, class ) main( package )