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