docs: public final EObject ruleMember() throws RecognitionException {
          EObject current = null;
  
          Token lv_modifiers_4_0=null;
          Token otherlv_8=null;
          Token lv_modifiers_12_0=null;
          Token otherlv_14=null;
          Token otherlv_17=null;
          Token otherlv_19=null;
          Token otherlv_21=null;
          Token otherlv_24=null;
          Token otherlv_25=null;
          Token otherlv_27=null;
          Token otherlv_29=null;
          Token otherlv_30=null;
          Token otherlv_32=null;
          Token otherlv_34=null;
          Token otherlv_36=null;
          Token otherlv_38=null;
          Token otherlv_40=null;
          Token otherlv_42=null;
          Token otherlv_50=null;
          Token otherlv_52=null;
          Token otherlv_54=null;
          Token otherlv_56=null;
          Token otherlv_58=null;
          Token otherlv_60=null;
          Token otherlv_61=null;
          Token otherlv_65=null;
          Token otherlv_67=null;
          Token otherlv_69=null;
          Token otherlv_71=null;
          Token otherlv_73=null;
          Token otherlv_75=null;
          Token otherlv_78=null;
          Token otherlv_81=null;
          Token otherlv_83=null;
          Token otherlv_85=null;
          Token otherlv_87=null;
          Token otherlv_89=null;
          Token otherlv_91=null;
          Token otherlv_93=null;
          Token otherlv_95=null;
          Token otherlv_97=null;
          Token otherlv_100=null;
          Token otherlv_102=null;
          Token otherlv_104=null;
          Token otherlv_106=null;
          Token otherlv_107=null;
          Token otherlv_109=null;
          Token otherlv_111=null;
          Token otherlv_113=null;
          Token otherlv_116=null;
          Token otherlv_118=null;
          Token otherlv_120=null;
          Token otherlv_122=null;
          Token otherlv_123=null;
          Token otherlv_126=null;
          Token otherlv_128=null;
          Token otherlv_130=null;
          EObject lv_annotations_1_0 = null;
  
          AntlrDatatypeRuleToken lv_modifiers_3_0 = null;
  
          AntlrDatatypeRuleToken lv_modifiers_5_0 = null;
  
          AntlrDatatypeRuleToken lv_modifiers_6_0 = null;
  
          AntlrDatatypeRuleToken lv_name_7_0 = null;
  
          EObject lv_type_9_0 = null;
  
          AntlrDatatypeRuleToken lv_modifiers_10_0 = null;
  
          AntlrDatatypeRuleToken lv_modifiers_11_0 = null;
  
          AntlrDatatypeRuleToken lv_name_13_0 = null;
  
          EObject lv_type_15_0 = null;
  
          AntlrDatatypeRuleToken lv_name_16_0 = null;
  
          EObject lv_type_18_0 = null;
  
          EObject lv_initialValue_20_0 = null;
  
          AntlrDatatypeRuleToken lv_modifiers_23_0 = null;
  
          EObject lv_typeParameters_26_0 = null;
  
          EObject lv_typeParameters_28_0 = null;
  
          EObject lv_parameters_31_0 = null;
  
          EObject lv_parameters_33_0 = null;
  
          EObject lv_exceptions_37_0 = null;
  
          EObject lv_exceptions_39_0 = null;
  
          EObject lv_typeParameters_41_0 = null;
  
          EObject lv_typeParameters_43_0 = null;
  
          EObject lv_expression_44_0 = null;
  
          AntlrDatatypeRuleToken lv_modifiers_46_0 = null;
  
          AntlrDatatypeRuleToken lv_modifiers_47_0 = null;
  
          AntlrDatatypeRuleToken lv_modifiers_48_0 = null;
  
          AntlrDatatypeRuleToken lv_modifiers_49_0 = null;
  
          EObject lv_typeParameters_51_0 = null;
  
          EObject lv_typeParameters_53_0 = null;
  
          AntlrDatatypeRuleToken lv_name_55_0 = null;
  
          EObject lv_parameters_57_0 = null;
  
          EObject lv_parameters_59_0 = null;
  
          EObject lv_returnType_62_0 = null;
  
          EObject lv_returnType_63_0 = null;
  
          EObject lv_exceptions_66_0 = null;
  
          EObject lv_exceptions_68_0 = null;
  
          EObject lv_firedEvents_70_0 = null;
  
          EObject lv_firedEvents_72_0 = null;
  
          EObject lv_typeParameters_74_0 = null;
  
          EObject lv_typeParameters_76_0 = null;
  
          EObject lv_expression_77_0 = null;
  
          AntlrDatatypeRuleToken lv_modifiers_80_0 = null;
  
          AntlrDatatypeRuleToken lv_name_82_0 = null;
  
          EObject lv_typeParameters_84_0 = null;
  
          EObject lv_typeParameters_86_0 = null;
  
          EObject lv_extends_90_0 = null;
  
          EObject lv_implements_92_0 = null;
  
          EObject lv_implements_94_0 = null;
  
          EObject lv_members_96_0 = null;
  
          AntlrDatatypeRuleToken lv_modifiers_99_0 = null;
  
          AntlrDatatypeRuleToken lv_name_101_0 = null;
  
          EObject lv_typeParameters_103_0 = null;
  
          EObject lv_typeParameters_105_0 = null;
  
          EObject lv_extends_108_0 = null;
  
          EObject lv_extends_110_0 = null;
  
          EObject lv_members_112_0 = null;
  
          AntlrDatatypeRuleToken lv_modifiers_115_0 = null;
  
          AntlrDatatypeRuleToken lv_name_117_0 = null;
  
          EObject lv_members_119_0 = null;
  
          EObject lv_members_121_0 = null;
  
          AntlrDatatypeRuleToken lv_modifiers_125_0 = null;
  
          AntlrDatatypeRuleToken lv_name_127_0 = null;
  
          EObject lv_members_129_0 = null;
  
  
  
          	enterRule();
  
          try {
              // InternalSARL.g:4706:2: ( ( () ( (lv_annotations_1_0= ruleXAnnotation ) )* ( ( () ( (lv_modifiers_3_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_4_0= 'extension' ) ) ( ( (lv_modifiers_5_0= ruleFieldModifier ) ) | ( (lv_modifiers_6_0= ruleCommonModifier ) ) )* ( (lv_name_7_0= ruleValidID ) ) otherlv_8= ':' ( (lv_type_9_0= ruleJvmTypeReference ) ) ) | ( ( (lv_modifiers_10_0= ruleFieldModifier ) ) ( (lv_modifiers_11_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_12_0= 'extension' ) ) ( (lv_name_13_0= ruleValidID ) ) otherlv_14= ':' ( (lv_type_15_0= ruleJvmTypeReference ) ) ) | ( ( (lv_name_16_0= ruleValidID ) ) (otherlv_17= ':' ( (lv_type_18_0= ruleJvmTypeReference ) ) )? ) ) ) ) (otherlv_19= '=' ( (lv_initialValue_20_0= ruleXExpression ) ) )? (otherlv_21= ';' )? ) | ( () ( (lv_modifiers_23_0= ruleCommonModifier ) )* otherlv_24= 'new' (otherlv_25= '<' ( (lv_typeParameters_26_0= ruleJvmTypeParameter ) ) (otherlv_27= ',' ( (lv_typeParameters_28_0= ruleJvmTypeParameter ) ) )* otherlv_29= '>' )? (otherlv_30= '(' ( ( (lv_parameters_31_0= ruleParameter ) ) (otherlv_32= ',' ( (lv_parameters_33_0= ruleParameter ) ) )* )? otherlv_34= ')' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_36= 'throws' ( (lv_exceptions_37_0= ruleJvmTypeReference ) ) (otherlv_38= ',' ( (lv_exceptions_39_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_40= 'with' ( (lv_typeParameters_41_0= ruleJvmTypeParameter ) ) (otherlv_42= ',' ( (lv_typeParameters_43_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) ) ( (lv_expression_44_0= ruleXBlockExpression ) ) ) | ( () ( (lv_modifiers_46_0= ruleCommonModifier ) )* ( (lv_modifiers_47_0= ruleMethodModifier ) ) ( ( (lv_modifiers_48_0= ruleCommonModifier ) ) | ( (lv_modifiers_49_0= ruleMethodModifier ) ) )* (otherlv_50= '<' ( (lv_typeParameters_51_0= ruleJvmTypeParameter ) ) (otherlv_52= ',' ( (lv_typeParameters_53_0= ruleJvmTypeParameter ) ) )* otherlv_54= '>' )? ( (lv_name_55_0= ruleFunctionID ) ) (otherlv_56= '(' ( ( (lv_parameters_57_0= ruleParameter ) ) (otherlv_58= ',' ( (lv_parameters_59_0= ruleParameter ) ) )* )? otherlv_60= ')' )? (otherlv_61= ':' ( ( (lv_returnType_62_0= ruleTypeReferenceWithTypeArgs ) ) | ( (lv_returnType_63_0= ruleTypeReferenceNoTypeArgs ) ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_65= 'throws' ( (lv_exceptions_66_0= ruleJvmTypeReference ) ) (otherlv_67= ',' ( (lv_exceptions_68_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_69= 'fires' ( (lv_firedEvents_70_0= ruleJvmTypeReference ) ) (otherlv_71= ',' ( (lv_firedEvents_72_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_73= 'with' ( (lv_typeParameters_74_0= ruleJvmTypeParameter ) ) (otherlv_75= ',' ( (lv_typeParameters_76_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) ) ( ( (lv_expression_77_0= ruleXBlockExpression ) ) | otherlv_78= ';' )? ) | ( () ( (lv_modifiers_80_0= ruleCommonModifier ) )* otherlv_81= 'class' ( (lv_name_82_0= ruleValidID ) ) (otherlv_83= '<' ( (lv_typeParameters_84_0= ruleJvmTypeParameter ) ) (otherlv_85= ',' ( (lv_typeParameters_86_0= ruleJvmTypeParameter ) ) )* otherlv_87= '>' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_89= 'extends' ( (lv_extends_90_0= ruleJvmParameterizedTypeReference ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_91= 'implements' ( (lv_implements_92_0= ruleJvmParameterizedTypeReference ) ) (otherlv_93= ',' ( (lv_implements_94_0= ruleJvmParameterizedTypeReference ) ) )* ) ) ) ) )* ) ) ) otherlv_95= '{' ( (lv_members_96_0= ruleMember ) )* otherlv_97= '}' ) | ( () ( (lv_modifiers_99_0= ruleCommonModifier ) )* otherlv_100= 'interface' ( (lv_name_101_0= ruleValidID ) ) (otherlv_102= '<' ( (lv_typeParameters_103_0= ruleJvmTypeParameter ) ) (otherlv_104= ',' ( (lv_typeParameters_105_0= ruleJvmTypeParameter ) ) )* otherlv_106= '>' )? (otherlv_107= 'extends' ( (lv_extends_108_0= ruleJvmParameterizedTypeReference ) ) (otherlv_109= ',' ( (lv_extends_110_0= ruleJvmParameterizedTypeReference ) ) )* )? otherlv_111= '{' ( (lv_members_112_0= ruleMember ) )* otherlv_113= '}' ) | ( () ( (lv_modifiers_115_0= ruleCommonModifier ) )* otherlv_116= 'enum' ( (lv_name_117_0= ruleValidID ) ) otherlv_118= '{' ( ( (lv_members_119_0= ruleXtendEnumLiteral ) ) (otherlv_120= ',' ( (lv_members_121_0= ruleXtendEnumLiteral ) ) )* )? (otherlv_122= ';' )? otherlv_123= '}' ) | ( () ( (lv_modifiers_125_0= ruleCommonModifier ) )* otherlv_126= 'annotation' ( (lv_name_127_0= ruleValidID ) ) otherlv_128= '{' ( (lv_members_129_0= ruleAnnotationField ) )* otherlv_130= '}' ) ) ) )
              // InternalSARL.g:4707:2: ( () ( (lv_annotations_1_0= ruleXAnnotation ) )* ( ( () ( (lv_modifiers_3_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_4_0= 'extension' ) ) ( ( (lv_modifiers_5_0= ruleFieldModifier ) ) | ( (lv_modifiers_6_0= ruleCommonModifier ) ) )* ( (lv_name_7_0= ruleValidID ) ) otherlv_8= ':' ( (lv_type_9_0= ruleJvmTypeReference ) ) ) | ( ( (lv_modifiers_10_0= ruleFieldModifier ) ) ( (lv_modifiers_11_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_12_0= 'extension' ) ) ( (lv_name_13_0= ruleValidID ) ) otherlv_14= ':' ( (lv_type_15_0= ruleJvmTypeReference ) ) ) | ( ( (lv_name_16_0= ruleValidID ) ) (otherlv_17= ':' ( (lv_type_18_0= ruleJvmTypeReference ) ) )? ) ) ) ) (otherlv_19= '=' ( (lv_initialValue_20_0= ruleXExpression ) ) )? (otherlv_21= ';' )? ) | ( () ( (lv_modifiers_23_0= ruleCommonModifier ) )* otherlv_24= 'new' (otherlv_25= '<' ( (lv_typeParameters_26_0= ruleJvmTypeParameter ) ) (otherlv_27= ',' ( (lv_typeParameters_28_0= ruleJvmTypeParameter ) ) )* otherlv_29= '>' )? (otherlv_30= '(' ( ( (lv_parameters_31_0= ruleParameter ) ) (otherlv_32= ',' ( (lv_parameters_33_0= ruleParameter ) ) )* )? otherlv_34= ')' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_36= 'throws' ( (lv_exceptions_37_0= ruleJvmTypeReference ) ) (otherlv_38= ',' ( (lv_exceptions_39_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_40= 'with' ( (lv_typeParameters_41_0= ruleJvmTypeParameter ) ) (otherlv_42= ',' ( (lv_typeParameters_43_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) ) ( (lv_expression_44_0= ruleXBlockExpression ) ) ) | ( () ( (lv_modifiers_46_0= ruleCommonModifier ) )* ( (lv_modifiers_47_0= ruleMethodModifier ) ) ( ( (lv_modifiers_48_0= ruleCommonModifier ) ) | ( (lv_modifiers_49_0= ruleMethodModifier ) ) )* (otherlv_50= '<' ( (lv_typeParameters_51_0= ruleJvmTypeParameter ) ) (otherlv_52= ',' ( (lv_typeParameters_53_0= ruleJvmTypeParameter ) ) )* otherlv_54= '>' )? ( (lv_name_55_0= ruleFunctionID ) ) (otherlv_56= '(' ( ( (lv_parameters_57_0= ruleParameter ) ) (otherlv_58= ',' ( (lv_parameters_59_0= ruleParameter ) ) )* )? otherlv_60= ')' )? (otherlv_61= ':' ( ( (lv_returnType_62_0= ruleTypeReferenceWithTypeArgs ) ) | ( (lv_returnType_63_0= ruleTypeReferenceNoTypeArgs ) ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_65= 'throws' ( (lv_exceptions_66_0= ruleJvmTypeReference ) ) (otherlv_67= ',' ( (lv_exceptions_68_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_69= 'fires' ( (lv_firedEvents_70_0= ruleJvmTypeReference ) ) (otherlv_71= ',' ( (lv_firedEvents_72_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_73= 'with' ( (lv_typeParameters_74_0= ruleJvmTypeParameter ) ) (otherlv_75= ',' ( (lv_typeParameters_76_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) ) ( ( (lv_expression_77_0= ruleXBlockExpression ) ) | otherlv_78= ';' )? ) | ( () ( (lv_modifiers_80_0= ruleCommonModifier ) )* otherlv_81= 'class' ( (lv_name_82_0= ruleValidID ) ) (otherlv_83= '<' ( (lv_typeParameters_84_0= ruleJvmTypeParameter ) ) (otherlv_85= ',' ( (lv_typeParameters_86_0= ruleJvmTypeParameter ) ) )* otherlv_87= '>' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_89= 'extends' ( (lv_extends_90_0= ruleJvmParameterizedTypeReference ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_91= 'implements' ( (lv_implements_92_0= ruleJvmParameterizedTypeReference ) ) (otherlv_93= ',' ( (lv_implements_94_0= ruleJvmParameterizedTypeReference ) ) )* ) ) ) ) )* ) ) ) otherlv_95= '{' ( (lv_members_96_0= ruleMember ) )* otherlv_97= '}' ) | ( () ( (lv_modifiers_99_0= ruleCommonModifier ) )* otherlv_100= 'interface' ( (lv_name_101_0= ruleValidID ) ) (otherlv_102= '<' ( (lv_typeParameters_103_0= ruleJvmTypeParameter ) ) (otherlv_104= ',' ( (lv_typeParameters_105_0= ruleJvmTypeParameter ) ) )* otherlv_106= '>' )? (otherlv_107= 'extends' ( (lv_extends_108_0= ruleJvmParameterizedTypeReference ) ) (otherlv_109= ',' ( (lv_extends_110_0= ruleJvmParameterizedTypeReference ) ) )* )? otherlv_111= '{' ( (lv_members_112_0= ruleMember ) )* otherlv_113= '}' ) | ( () ( (lv_modifiers_115_0= ruleCommonModifier ) )* otherlv_116= 'enum' ( (lv_name_117_0= ruleValidID ) ) otherlv_118= '{' ( ( (lv_members_119_0= ruleXtendEnumLiteral ) ) (otherlv_120= ',' ( (lv_members_121_0= ruleXtendEnumLiteral ) ) )* )? (otherlv_122= ';' )? otherlv_123= '}' ) | ( () ( (lv_modifiers_125_0= ruleCommonModifier ) )* otherlv_126= 'annotation' ( (lv_name_127_0= ruleValidID ) ) otherlv_128= '{' ( (lv_members_129_0= ruleAnnotationField ) )* otherlv_130= '}' ) ) )
              {
              // InternalSARL.g:4707:2: ( () ( (lv_annotations_1_0= ruleXAnnotation ) )* ( ( () ( (lv_modifiers_3_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_4_0= 'extension' ) ) ( ( (lv_modifiers_5_0= ruleFieldModifier ) ) | ( (lv_modifiers_6_0= ruleCommonModifier ) ) )* ( (lv_name_7_0= ruleValidID ) ) otherlv_8= ':' ( (lv_type_9_0= ruleJvmTypeReference ) ) ) | ( ( (lv_modifiers_10_0= ruleFieldModifier ) ) ( (lv_modifiers_11_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_12_0= 'extension' ) ) ( (lv_name_13_0= ruleValidID ) ) otherlv_14= ':' ( (lv_type_15_0= ruleJvmTypeReference ) ) ) | ( ( (lv_name_16_0= ruleValidID ) ) (otherlv_17= ':' ( (lv_type_18_0= ruleJvmTypeReference ) ) )? ) ) ) ) (otherlv_19= '=' ( (lv_initialValue_20_0= ruleXExpression ) ) )? (otherlv_21= ';' )? ) | ( () ( (lv_modifiers_23_0= ruleCommonModifier ) )* otherlv_24= 'new' (otherlv_25= '<' ( (lv_typeParameters_26_0= ruleJvmTypeParameter ) ) (otherlv_27= ',' ( (lv_typeParameters_28_0= ruleJvmTypeParameter ) ) )* otherlv_29= '>' )? (otherlv_30= '(' ( ( (lv_parameters_31_0= ruleParameter ) ) (otherlv_32= ',' ( (lv_parameters_33_0= ruleParameter ) ) )* )? otherlv_34= ')' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_36= 'throws' ( (lv_exceptions_37_0= ruleJvmTypeReference ) ) (otherlv_38= ',' ( (lv_exceptions_39_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_40= 'with' ( (lv_typeParameters_41_0= ruleJvmTypeParameter ) ) (otherlv_42= ',' ( (lv_typeParameters_43_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) ) ( (lv_expression_44_0= ruleXBlockExpression ) ) ) | ( () ( (lv_modifiers_46_0= ruleCommonModifier ) )* ( (lv_modifiers_47_0= ruleMethodModifier ) ) ( ( (lv_modifiers_48_0= ruleCommonModifier ) ) | ( (lv_modifiers_49_0= ruleMethodModifier ) ) )* (otherlv_50= '<' ( (lv_typeParameters_51_0= ruleJvmTypeParameter ) ) (otherlv_52= ',' ( (lv_typeParameters_53_0= ruleJvmTypeParameter ) ) )* otherlv_54= '>' )? ( (lv_name_55_0= ruleFunctionID ) ) (otherlv_56= '(' ( ( (lv_parameters_57_0= ruleParameter ) ) (otherlv_58= ',' ( (lv_parameters_59_0= ruleParameter ) ) )* )? otherlv_60= ')' )? (otherlv_61= ':' ( ( (lv_returnType_62_0= ruleTypeReferenceWithTypeArgs ) ) | ( (lv_returnType_63_0= ruleTypeReferenceNoTypeArgs ) ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_65= 'throws' ( (lv_exceptions_66_0= ruleJvmTypeReference ) ) (otherlv_67= ',' ( (lv_exceptions_68_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_69= 'fires' ( (lv_firedEvents_70_0= ruleJvmTypeReference ) ) (otherlv_71= ',' ( (lv_firedEvents_72_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_73= 'with' ( (lv_typeParameters_74_0= ruleJvmTypeParameter ) ) (otherlv_75= ',' ( (lv_typeParameters_76_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) ) ( ( (lv_expression_77_0= ruleXBlockExpression ) ) | otherlv_78= ';' )? ) | ( () ( (lv_modifiers_80_0= ruleCommonModifier ) )* otherlv_81= 'class' ( (lv_name_82_0= ruleValidID ) ) (otherlv_83= '<' ( (lv_typeParameters_84_0= ruleJvmTypeParameter ) ) (otherlv_85= ',' ( (lv_typeParameters_86_0= ruleJvmTypeParameter ) ) )* otherlv_87= '>' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_89= 'extends' ( (lv_extends_90_0= ruleJvmParameterizedTypeReference ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_91= 'implements' ( (lv_implements_92_0= ruleJvmParameterizedTypeReference ) ) (otherlv_93= ',' ( (lv_implements_94_0= ruleJvmParameterizedTypeReference ) ) )* ) ) ) ) )* ) ) ) otherlv_95= '{' ( (lv_members_96_0= ruleMember ) )* otherlv_97= '}' ) | ( () ( (lv_modifiers_99_0= ruleCommonModifier ) )* otherlv_100= 'interface' ( (lv_name_101_0= ruleValidID ) ) (otherlv_102= '<' ( (lv_typeParameters_103_0= ruleJvmTypeParameter ) ) (otherlv_104= ',' ( (lv_typeParameters_105_0= ruleJvmTypeParameter ) ) )* otherlv_106= '>' )? (otherlv_107= 'extends' ( (lv_extends_108_0= ruleJvmParameterizedTypeReference ) ) (otherlv_109= ',' ( (lv_extends_110_0= ruleJvmParameterizedTypeReference ) ) )* )? otherlv_111= '{' ( (lv_members_112_0= ruleMember ) )* otherlv_113= '}' ) | ( () ( (lv_modifiers_115_0= ruleCommonModifier ) )* otherlv_116= 'enum' ( (lv_name_117_0= ruleValidID ) ) otherlv_118= '{' ( ( (lv_members_119_0= ruleXtendEnumLiteral ) ) (otherlv_120= ',' ( (lv_members_121_0= ruleXtendEnumLiteral ) ) )* )? (otherlv_122= ';' )? otherlv_123= '}' ) | ( () ( (lv_modifiers_125_0= ruleCommonModifier ) )* otherlv_126= 'annotation' ( (lv_name_127_0= ruleValidID ) ) otherlv_128= '{' ( (lv_members_129_0= ruleAnnotationField ) )* otherlv_130= '}' ) ) )
              // InternalSARL.g:4708:3: () ( (lv_annotations_1_0= ruleXAnnotation ) )* ( ( () ( (lv_modifiers_3_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_4_0= 'extension' ) ) ( ( (lv_modifiers_5_0= ruleFieldModifier ) ) | ( (lv_modifiers_6_0= ruleCommonModifier ) ) )* ( (lv_name_7_0= ruleValidID ) ) otherlv_8= ':' ( (lv_type_9_0= ruleJvmTypeReference ) ) ) | ( ( (lv_modifiers_10_0= ruleFieldModifier ) ) ( (lv_modifiers_11_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_12_0= 'extension' ) ) ( (lv_name_13_0= ruleValidID ) ) otherlv_14= ':' ( (lv_type_15_0= ruleJvmTypeReference ) ) ) | ( ( (lv_name_16_0= ruleValidID ) ) (otherlv_17= ':' ( (lv_type_18_0= ruleJvmTypeReference ) ) )? ) ) ) ) (otherlv_19= '=' ( (lv_initialValue_20_0= ruleXExpression ) ) )? (otherlv_21= ';' )? ) | ( () ( (lv_modifiers_23_0= ruleCommonModifier ) )* otherlv_24= 'new' (otherlv_25= '<' ( (lv_typeParameters_26_0= ruleJvmTypeParameter ) ) (otherlv_27= ',' ( (lv_typeParameters_28_0= ruleJvmTypeParameter ) ) )* otherlv_29= '>' )? (otherlv_30= '(' ( ( (lv_parameters_31_0= ruleParameter ) ) (otherlv_32= ',' ( (lv_parameters_33_0= ruleParameter ) ) )* )? otherlv_34= ')' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_36= 'throws' ( (lv_exceptions_37_0= ruleJvmTypeReference ) ) (otherlv_38= ',' ( (lv_exceptions_39_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_40= 'with' ( (lv_typeParameters_41_0= ruleJvmTypeParameter ) ) (otherlv_42= ',' ( (lv_typeParameters_43_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) ) ( (lv_expression_44_0= ruleXBlockExpression ) ) ) | ( () ( (lv_modifiers_46_0= ruleCommonModifier ) )* ( (lv_modifiers_47_0= ruleMethodModifier ) ) ( ( (lv_modifiers_48_0= ruleCommonModifier ) ) | ( (lv_modifiers_49_0= ruleMethodModifier ) ) )* (otherlv_50= '<' ( (lv_typeParameters_51_0= ruleJvmTypeParameter ) ) (otherlv_52= ',' ( (lv_typeParameters_53_0= ruleJvmTypeParameter ) ) )* otherlv_54= '>' )? ( (lv_name_55_0= ruleFunctionID ) ) (otherlv_56= '(' ( ( (lv_parameters_57_0= ruleParameter ) ) (otherlv_58= ',' ( (lv_parameters_59_0= ruleParameter ) ) )* )? otherlv_60= ')' )? (otherlv_61= ':' ( ( (lv_returnType_62_0= ruleTypeReferenceWithTypeArgs ) ) | ( (lv_returnType_63_0= ruleTypeReferenceNoTypeArgs ) ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_65= 'throws' ( (lv_exceptions_66_0= ruleJvmTypeReference ) ) (otherlv_67= ',' ( (lv_exceptions_68_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_69= 'fires' ( (lv_firedEvents_70_0= ruleJvmTypeReference ) ) (otherlv_71= ',' ( (lv_firedEvents_72_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_73= 'with' ( (lv_typeParameters_74_0= ruleJvmTypeParameter ) ) (otherlv_75= ',' ( (lv_typeParameters_76_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) ) ( ( (lv_expression_77_0= ruleXBlockExpression ) ) | otherlv_78= ';' )? ) | ( () ( (lv_modifiers_80_0= ruleCommonModifier ) )* otherlv_81= 'class' ( (lv_name_82_0= ruleValidID ) ) (otherlv_83= '<' ( (lv_typeParameters_84_0= ruleJvmTypeParameter ) ) (otherlv_85= ',' ( (lv_typeParameters_86_0= ruleJvmTypeParameter ) ) )* otherlv_87= '>' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_89= 'extends' ( (lv_extends_90_0= ruleJvmParameterizedTypeReference ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_91= 'implements' ( (lv_implements_92_0= ruleJvmParameterizedTypeReference ) ) (otherlv_93= ',' ( (lv_implements_94_0= ruleJvmParameterizedTypeReference ) ) )* ) ) ) ) )* ) ) ) otherlv_95= '{' ( (lv_members_96_0= ruleMember ) )* otherlv_97= '}' ) | ( () ( (lv_modifiers_99_0= ruleCommonModifier ) )* otherlv_100= 'interface' ( (lv_name_101_0= ruleValidID ) ) (otherlv_102= '<' ( (lv_typeParameters_103_0= ruleJvmTypeParameter ) ) (otherlv_104= ',' ( (lv_typeParameters_105_0= ruleJvmTypeParameter ) ) )* otherlv_106= '>' )? (otherlv_107= 'extends' ( (lv_extends_108_0= ruleJvmParameterizedTypeReference ) ) (otherlv_109= ',' ( (lv_extends_110_0= ruleJvmParameterizedTypeReference ) ) )* )? otherlv_111= '{' ( (lv_members_112_0= ruleMember ) )* otherlv_113= '}' ) | ( () ( (lv_modifiers_115_0= ruleCommonModifier ) )* otherlv_116= 'enum' ( (lv_name_117_0= ruleValidID ) ) otherlv_118= '{' ( ( (lv_members_119_0= ruleXtendEnumLiteral ) ) (otherlv_120= ',' ( (lv_members_121_0= ruleXtendEnumLiteral ) ) )* )? (otherlv_122= ';' )? otherlv_123= '}' ) | ( () ( (lv_modifiers_125_0= ruleCommonModifier ) )* otherlv_126= 'annotation' ( (lv_name_127_0= ruleValidID ) ) otherlv_128= '{' ( (lv_members_129_0= ruleAnnotationField ) )* otherlv_130= '}' ) )
              {
              // InternalSARL.g:4708:3: ()
              // InternalSARL.g:4709:4: 
              {
              if ( state.backtracking==0 ) {
  
                				current = forceCreateModelElement(
                					grammarAccess.getMemberAccess().getXtendMemberAction_0(),
                					current);
                			
              }
  
              }
  
              // InternalSARL.g:4715:3: ( (lv_annotations_1_0= ruleXAnnotation ) )*
              loop135:
              do {
                  int alt135=2;
                  int LA135_0 = input.LA(1);
  
                  if ( (LA135_0==105) ) {
                      alt135=1;
                  }
  
  
                  switch (alt135) {
              	case 1 :
              	    // InternalSARL.g:4716:4: (lv_annotations_1_0= ruleXAnnotation )
              	    {
              	    // InternalSARL.g:4716:4: (lv_annotations_1_0= ruleXAnnotation )
              	    // InternalSARL.g:4717:5: lv_annotations_1_0= ruleXAnnotation
              	    {
              	    if ( state.backtracking==0 ) {
  
              	      					newCompositeNode(grammarAccess.getMemberAccess().getAnnotationsXAnnotationParserRuleCall_1_0());
              	      				
              	    }
              	    pushFollow(FOLLOW_66);
              	    lv_annotations_1_0=ruleXAnnotation();
  
              	    state._fsp--;
              	    if (state.failed) return current;
              	    if ( state.backtracking==0 ) {
  
              	      					if (current==null) {
              	      						current = createModelElementForParent(grammarAccess.getMemberRule());
              	      					}
              	      					add(
              	      						current,
              	      						"annotations",
              	      						lv_annotations_1_0,
              	      						"org.eclipse.xtext.xbase.annotations.XbaseWithAnnotations.XAnnotation");
              	      					afterParserOrEnumRuleCall();
              	      				
              	    }
  
              	    }
  
  
              	    }
              	    break;
  
              	default :
              	    break loop135;
                  }
              } while (true);
  
              // InternalSARL.g:4734:3: ( ( () ( (lv_modifiers_3_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_4_0= 'extension' ) ) ( ( (lv_modifiers_5_0= ruleFieldModifier ) ) | ( (lv_modifiers_6_0= ruleCommonModifier ) ) )* ( (lv_name_7_0= ruleValidID ) ) otherlv_8= ':' ( (lv_type_9_0= ruleJvmTypeReference ) ) ) | ( ( (lv_modifiers_10_0= ruleFieldModifier ) ) ( (lv_modifiers_11_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_12_0= 'extension' ) ) ( (lv_name_13_0= ruleValidID ) ) otherlv_14= ':' ( (lv_type_15_0= ruleJvmTypeReference ) ) ) | ( ( (lv_name_16_0= ruleValidID ) ) (otherlv_17= ':' ( (lv_type_18_0= ruleJvmTypeReference ) ) )? ) ) ) ) (otherlv_19= '=' ( (lv_initialValue_20_0= ruleXExpression ) ) )? (otherlv_21= ';' )? ) | ( () ( (lv_modifiers_23_0= ruleCommonModifier ) )* otherlv_24= 'new' (otherlv_25= '<' ( (lv_typeParameters_26_0= ruleJvmTypeParameter ) ) (otherlv_27= ',' ( (lv_typeParameters_28_0= ruleJvmTypeParameter ) ) )* otherlv_29= '>' )? (otherlv_30= '(' ( ( (lv_parameters_31_0= ruleParameter ) ) (otherlv_32= ',' ( (lv_parameters_33_0= ruleParameter ) ) )* )? otherlv_34= ')' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_36= 'throws' ( (lv_exceptions_37_0= ruleJvmTypeReference ) ) (otherlv_38= ',' ( (lv_exceptions_39_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_40= 'with' ( (lv_typeParameters_41_0= ruleJvmTypeParameter ) ) (otherlv_42= ',' ( (lv_typeParameters_43_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) ) ( (lv_expression_44_0= ruleXBlockExpression ) ) ) | ( () ( (lv_modifiers_46_0= ruleCommonModifier ) )* ( (lv_modifiers_47_0= ruleMethodModifier ) ) ( ( (lv_modifiers_48_0= ruleCommonModifier ) ) | ( (lv_modifiers_49_0= ruleMethodModifier ) ) )* (otherlv_50= '<' ( (lv_typeParameters_51_0= ruleJvmTypeParameter ) ) (otherlv_52= ',' ( (lv_typeParameters_53_0= ruleJvmTypeParameter ) ) )* otherlv_54= '>' )? ( (lv_name_55_0= ruleFunctionID ) ) (otherlv_56= '(' ( ( (lv_parameters_57_0= ruleParameter ) ) (otherlv_58= ',' ( (lv_parameters_59_0= ruleParameter ) ) )* )? otherlv_60= ')' )? (otherlv_61= ':' ( ( (lv_returnType_62_0= ruleTypeReferenceWithTypeArgs ) ) | ( (lv_returnType_63_0= ruleTypeReferenceNoTypeArgs ) ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_65= 'throws' ( (lv_exceptions_66_0= ruleJvmTypeReference ) ) (otherlv_67= ',' ( (lv_exceptions_68_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_69= 'fires' ( (lv_firedEvents_70_0= ruleJvmTypeReference ) ) (otherlv_71= ',' ( (lv_firedEvents_72_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_73= 'with' ( (lv_typeParameters_74_0= ruleJvmTypeParameter ) ) (otherlv_75= ',' ( (lv_typeParameters_76_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) ) ( ( (lv_expression_77_0= ruleXBlockExpression ) ) | otherlv_78= ';' )? ) | ( () ( (lv_modifiers_80_0= ruleCommonModifier ) )* otherlv_81= 'class' ( (lv_name_82_0= ruleValidID ) ) (otherlv_83= '<' ( (lv_typeParameters_84_0= ruleJvmTypeParameter ) ) (otherlv_85= ',' ( (lv_typeParameters_86_0= ruleJvmTypeParameter ) ) )* otherlv_87= '>' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_89= 'extends' ( (lv_extends_90_0= ruleJvmParameterizedTypeReference ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_91= 'implements' ( (lv_implements_92_0= ruleJvmParameterizedTypeReference ) ) (otherlv_93= ',' ( (lv_implements_94_0= ruleJvmParameterizedTypeReference ) ) )* ) ) ) ) )* ) ) ) otherlv_95= '{' ( (lv_members_96_0= ruleMember ) )* otherlv_97= '}' ) | ( () ( (lv_modifiers_99_0= ruleCommonModifier ) )* otherlv_100= 'interface' ( (lv_name_101_0= ruleValidID ) ) (otherlv_102= '<' ( (lv_typeParameters_103_0= ruleJvmTypeParameter ) ) (otherlv_104= ',' ( (lv_typeParameters_105_0= ruleJvmTypeParameter ) ) )* otherlv_106= '>' )? (otherlv_107= 'extends' ( (lv_extends_108_0= ruleJvmParameterizedTypeReference ) ) (otherlv_109= ',' ( (lv_extends_110_0= ruleJvmParameterizedTypeReference ) ) )* )? otherlv_111= '{' ( (lv_members_112_0= ruleMember ) )* otherlv_113= '}' ) | ( () ( (lv_modifiers_115_0= ruleCommonModifier ) )* otherlv_116= 'enum' ( (lv_name_117_0= ruleValidID ) ) otherlv_118= '{' ( ( (lv_members_119_0= ruleXtendEnumLiteral ) ) (otherlv_120= ',' ( (lv_members_121_0= ruleXtendEnumLiteral ) ) )* )? (otherlv_122= ';' )? otherlv_123= '}' ) | ( () ( (lv_modifiers_125_0= ruleCommonModifier ) )* otherlv_126= 'annotation' ( (lv_name_127_0= ruleValidID ) ) otherlv_128= '{' ( (lv_members_129_0= ruleAnnotationField ) )* otherlv_130= '}' ) )
              int alt185=7;
              alt185 = dfa185.predict(input);
              switch (alt185) {
                  case 1 :
                      // InternalSARL.g:4735:4: ( () ( (lv_modifiers_3_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_4_0= 'extension' ) ) ( ( (lv_modifiers_5_0= ruleFieldModifier ) ) | ( (lv_modifiers_6_0= ruleCommonModifier ) ) )* ( (lv_name_7_0= ruleValidID ) ) otherlv_8= ':' ( (lv_type_9_0= ruleJvmTypeReference ) ) ) | ( ( (lv_modifiers_10_0= ruleFieldModifier ) ) ( (lv_modifiers_11_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_12_0= 'extension' ) ) ( (lv_name_13_0= ruleValidID ) ) otherlv_14= ':' ( (lv_type_15_0= ruleJvmTypeReference ) ) ) | ( ( (lv_name_16_0= ruleValidID ) ) (otherlv_17= ':' ( (lv_type_18_0= ruleJvmTypeReference ) ) )? ) ) ) ) (otherlv_19= '=' ( (lv_initialValue_20_0= ruleXExpression ) ) )? (otherlv_21= ';' )? )
                      {
                      // InternalSARL.g:4735:4: ( () ( (lv_modifiers_3_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_4_0= 'extension' ) ) ( ( (lv_modifiers_5_0= ruleFieldModifier ) ) | ( (lv_modifiers_6_0= ruleCommonModifier ) ) )* ( (lv_name_7_0= ruleValidID ) ) otherlv_8= ':' ( (lv_type_9_0= ruleJvmTypeReference ) ) ) | ( ( (lv_modifiers_10_0= ruleFieldModifier ) ) ( (lv_modifiers_11_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_12_0= 'extension' ) ) ( (lv_name_13_0= ruleValidID ) ) otherlv_14= ':' ( (lv_type_15_0= ruleJvmTypeReference ) ) ) | ( ( (lv_name_16_0= ruleValidID ) ) (otherlv_17= ':' ( (lv_type_18_0= ruleJvmTypeReference ) ) )? ) ) ) ) (otherlv_19= '=' ( (lv_initialValue_20_0= ruleXExpression ) ) )? (otherlv_21= ';' )? )
                      // InternalSARL.g:4736:5: () ( (lv_modifiers_3_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_4_0= 'extension' ) ) ( ( (lv_modifiers_5_0= ruleFieldModifier ) ) | ( (lv_modifiers_6_0= ruleCommonModifier ) ) )* ( (lv_name_7_0= ruleValidID ) ) otherlv_8= ':' ( (lv_type_9_0= ruleJvmTypeReference ) ) ) | ( ( (lv_modifiers_10_0= ruleFieldModifier ) ) ( (lv_modifiers_11_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_12_0= 'extension' ) ) ( (lv_name_13_0= ruleValidID ) ) otherlv_14= ':' ( (lv_type_15_0= ruleJvmTypeReference ) ) ) | ( ( (lv_name_16_0= ruleValidID ) ) (otherlv_17= ':' ( (lv_type_18_0= ruleJvmTypeReference ) ) )? ) ) ) ) (otherlv_19= '=' ( (lv_initialValue_20_0= ruleXExpression ) ) )? (otherlv_21= ';' )?
                      {
                      // InternalSARL.g:4736:5: ()
                      // InternalSARL.g:4737:6: 
                      {
                      if ( state.backtracking==0 ) {
  
                        						current = forceCreateModelElementAndSet(
                        							grammarAccess.getMemberAccess().getSarlFieldAnnotationInfoAction_2_0_0(),
                        							current);
                        					
                      }
  
                      }
  
                      // InternalSARL.g:4743:5: ( (lv_modifiers_3_0= ruleCommonModifier ) )*
                      loop136:
                      do {
                          int alt136=2;
                          int LA136_0 = input.LA(1);
  
                          if ( (LA136_0==25||(LA136_0>=78 && LA136_0<=89)) ) {
                              alt136=1;
                          }
  
  
                          switch (alt136) {
                      	case 1 :
                      	    // InternalSARL.g:4744:6: (lv_modifiers_3_0= ruleCommonModifier )
                      	    {
                      	    // InternalSARL.g:4744:6: (lv_modifiers_3_0= ruleCommonModifier )
                      	    // InternalSARL.g:4745:7: lv_modifiers_3_0= ruleCommonModifier
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      							newCompositeNode(grammarAccess.getMemberAccess().getModifiersCommonModifierParserRuleCall_2_0_1_0());
                      	      						
                      	    }
                      	    pushFollow(FOLLOW_38);
                      	    lv_modifiers_3_0=ruleCommonModifier();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      							if (current==null) {
                      	      								current = createModelElementForParent(grammarAccess.getMemberRule());
                      	      							}
                      	      							add(
                      	      								current,
                      	      								"modifiers",
                      	      								lv_modifiers_3_0,
                      	      								"org.eclipse.xtend.core.Xtend.CommonModifier");
                      	      							afterParserOrEnumRuleCall();
                      	      						
                      	    }
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop136;
                          }
                      } while (true);
  
                      // InternalSARL.g:4762:5: ( ( ( (lv_modifiers_4_0= 'extension' ) ) ( ( (lv_modifiers_5_0= ruleFieldModifier ) ) | ( (lv_modifiers_6_0= ruleCommonModifier ) ) )* ( (lv_name_7_0= ruleValidID ) ) otherlv_8= ':' ( (lv_type_9_0= ruleJvmTypeReference ) ) ) | ( ( (lv_modifiers_10_0= ruleFieldModifier ) ) ( (lv_modifiers_11_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_12_0= 'extension' ) ) ( (lv_name_13_0= ruleValidID ) ) otherlv_14= ':' ( (lv_type_15_0= ruleJvmTypeReference ) ) ) | ( ( (lv_name_16_0= ruleValidID ) ) (otherlv_17= ':' ( (lv_type_18_0= ruleJvmTypeReference ) ) )? ) ) ) )
                      int alt141=2;
                      int LA141_0 = input.LA(1);
  
                      if ( (LA141_0==45) ) {
                          alt141=1;
                      }
                      else if ( ((LA141_0>=65 && LA141_0<=66)) ) {
                          alt141=2;
                      }
                      else {
                          if (state.backtracking>0) {state.failed=true; return current;}
                          NoViableAltException nvae =
                              new NoViableAltException("", 141, 0, input);
  
                          throw nvae;
                      }
                      switch (alt141) {
                          case 1 :
                              // InternalSARL.g:4763:6: ( ( (lv_modifiers_4_0= 'extension' ) ) ( ( (lv_modifiers_5_0= ruleFieldModifier ) ) | ( (lv_modifiers_6_0= ruleCommonModifier ) ) )* ( (lv_name_7_0= ruleValidID ) ) otherlv_8= ':' ( (lv_type_9_0= ruleJvmTypeReference ) ) )
                              {
                              // InternalSARL.g:4763:6: ( ( (lv_modifiers_4_0= 'extension' ) ) ( ( (lv_modifiers_5_0= ruleFieldModifier ) ) | ( (lv_modifiers_6_0= ruleCommonModifier ) ) )* ( (lv_name_7_0= ruleValidID ) ) otherlv_8= ':' ( (lv_type_9_0= ruleJvmTypeReference ) ) )
                              // InternalSARL.g:4764:7: ( (lv_modifiers_4_0= 'extension' ) ) ( ( (lv_modifiers_5_0= ruleFieldModifier ) ) | ( (lv_modifiers_6_0= ruleCommonModifier ) ) )* ( (lv_name_7_0= ruleValidID ) ) otherlv_8= ':' ( (lv_type_9_0= ruleJvmTypeReference ) )
                              {
                              // InternalSARL.g:4764:7: ( (lv_modifiers_4_0= 'extension' ) )
                              // InternalSARL.g:4765:8: (lv_modifiers_4_0= 'extension' )
                              {
                              // InternalSARL.g:4765:8: (lv_modifiers_4_0= 'extension' )
                              // InternalSARL.g:4766:9: lv_modifiers_4_0= 'extension'
                              {
                              lv_modifiers_4_0=(Token)match(input,45,FOLLOW_39); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                									newLeafNode(lv_modifiers_4_0, grammarAccess.getMemberAccess().getModifiersExtensionKeyword_2_0_2_0_0_0());
                                								
                              }
                              if ( state.backtracking==0 ) {
  
                                									if (current==null) {
                                										current = createModelElement(grammarAccess.getMemberRule());
                                									}
                                									addWithLastConsumed(current, "modifiers", lv_modifiers_4_0, "extension");
                                								
                              }
  
                              }
  
  
                              }
  
                              // InternalSARL.g:4778:7: ( ( (lv_modifiers_5_0= ruleFieldModifier ) ) | ( (lv_modifiers_6_0= ruleCommonModifier ) ) )*
                              loop137:
                              do {
                                  int alt137=3;
                                  int LA137_0 = input.LA(1);
  
                                  if ( ((LA137_0>=65 && LA137_0<=66)) ) {
                                      alt137=1;
                                  }
                                  else if ( (LA137_0==25||(LA137_0>=78 && LA137_0<=89)) ) {
                                      alt137=2;
                                  }
  
  
                                  switch (alt137) {
                              	case 1 :
                              	    // InternalSARL.g:4779:8: ( (lv_modifiers_5_0= ruleFieldModifier ) )
                              	    {
                              	    // InternalSARL.g:4779:8: ( (lv_modifiers_5_0= ruleFieldModifier ) )
                              	    // InternalSARL.g:4780:9: (lv_modifiers_5_0= ruleFieldModifier )
                              	    {
                              	    // InternalSARL.g:4780:9: (lv_modifiers_5_0= ruleFieldModifier )
                              	    // InternalSARL.g:4781:10: lv_modifiers_5_0= ruleFieldModifier
                              	    {
                              	    if ( state.backtracking==0 ) {
  
                              	      										newCompositeNode(grammarAccess.getMemberAccess().getModifiersFieldModifierParserRuleCall_2_0_2_0_1_0_0());
                              	      									
                              	    }
                              	    pushFollow(FOLLOW_39);
                              	    lv_modifiers_5_0=ruleFieldModifier();
  
                              	    state._fsp--;
                              	    if (state.failed) return current;
                              	    if ( state.backtracking==0 ) {
  
                              	      										if (current==null) {
                              	      											current = createModelElementForParent(grammarAccess.getMemberRule());
                              	      										}
                              	      										add(
                              	      											current,
                              	      											"modifiers",
                              	      											lv_modifiers_5_0,
                              	      											"org.eclipse.xtend.core.Xtend.FieldModifier");
                              	      										afterParserOrEnumRuleCall();
                              	      									
                              	    }
  
                              	    }
  
  
                              	    }
  
  
                              	    }
                              	    break;
                              	case 2 :
                              	    // InternalSARL.g:4799:8: ( (lv_modifiers_6_0= ruleCommonModifier ) )
                              	    {
                              	    // InternalSARL.g:4799:8: ( (lv_modifiers_6_0= ruleCommonModifier ) )
                              	    // InternalSARL.g:4800:9: (lv_modifiers_6_0= ruleCommonModifier )
                              	    {
                              	    // InternalSARL.g:4800:9: (lv_modifiers_6_0= ruleCommonModifier )
                              	    // InternalSARL.g:4801:10: lv_modifiers_6_0= ruleCommonModifier
                              	    {
                              	    if ( state.backtracking==0 ) {
  
                              	      										newCompositeNode(grammarAccess.getMemberAccess().getModifiersCommonModifierParserRuleCall_2_0_2_0_1_1_0());
                              	      									
                              	    }
                              	    pushFollow(FOLLOW_39);
                              	    lv_modifiers_6_0=ruleCommonModifier();
  
                              	    state._fsp--;
                              	    if (state.failed) return current;
                              	    if ( state.backtracking==0 ) {
  
                              	      										if (current==null) {
                              	      											current = createModelElementForParent(grammarAccess.getMemberRule());
                              	      										}
                              	      										add(
                              	      											current,
                              	      											"modifiers",
                              	      											lv_modifiers_6_0,
                              	      											"org.eclipse.xtend.core.Xtend.CommonModifier");
                              	      										afterParserOrEnumRuleCall();
                              	      									
                              	    }
  
                              	    }
  
  
                              	    }
  
  
                              	    }
                              	    break;
  
                              	default :
                              	    break loop137;
                                  }
                              } while (true);
  
                              // InternalSARL.g:4819:7: ( (lv_name_7_0= ruleValidID ) )
                              // InternalSARL.g:4820:8: (lv_name_7_0= ruleValidID )
                              {
                              // InternalSARL.g:4820:8: (lv_name_7_0= ruleValidID )
                              // InternalSARL.g:4821:9: lv_name_7_0= ruleValidID
                              {
                              if ( state.backtracking==0 ) {
  
                                									newCompositeNode(grammarAccess.getMemberAccess().getNameValidIDParserRuleCall_2_0_2_0_2_0());
                                								
                              }
                              pushFollow(FOLLOW_40);
                              lv_name_7_0=ruleValidID();
  
                              state._fsp--;
                              if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                									if (current==null) {
                                										current = createModelElementForParent(grammarAccess.getMemberRule());
                                									}
                                									set(
                                										current,
                                										"name",
                                										lv_name_7_0,
                                										"org.eclipse.xtend.core.Xtend.ValidID");
                                									afterParserOrEnumRuleCall();
                                								
                              }
  
                              }
  
  
                              }
  
                              otherlv_8=(Token)match(input,46,FOLLOW_41); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                							newLeafNode(otherlv_8, grammarAccess.getMemberAccess().getColonKeyword_2_0_2_0_3());
                                						
                              }
                              // InternalSARL.g:4842:7: ( (lv_type_9_0= ruleJvmTypeReference ) )
                              // InternalSARL.g:4843:8: (lv_type_9_0= ruleJvmTypeReference )
                              {
                              // InternalSARL.g:4843:8: (lv_type_9_0= ruleJvmTypeReference )
                              // InternalSARL.g:4844:9: lv_type_9_0= ruleJvmTypeReference
                              {
                              if ( state.backtracking==0 ) {
  
                                									newCompositeNode(grammarAccess.getMemberAccess().getTypeJvmTypeReferenceParserRuleCall_2_0_2_0_4_0());
                                								
                              }
                              pushFollow(FOLLOW_42);
                              lv_type_9_0=ruleJvmTypeReference();
  
                              state._fsp--;
                              if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                									if (current==null) {
                                										current = createModelElementForParent(grammarAccess.getMemberRule());
                                									}
                                									set(
                                										current,
                                										"type",
                                										lv_type_9_0,
                                										"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
                                									afterParserOrEnumRuleCall();
                                								
                              }
  
                              }
  
  
                              }
  
  
                              }
  
  
                              }
                              break;
                          case 2 :
                              // InternalSARL.g:4863:6: ( ( (lv_modifiers_10_0= ruleFieldModifier ) ) ( (lv_modifiers_11_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_12_0= 'extension' ) ) ( (lv_name_13_0= ruleValidID ) ) otherlv_14= ':' ( (lv_type_15_0= ruleJvmTypeReference ) ) ) | ( ( (lv_name_16_0= ruleValidID ) ) (otherlv_17= ':' ( (lv_type_18_0= ruleJvmTypeReference ) ) )? ) ) )
                              {
                              // InternalSARL.g:4863:6: ( ( (lv_modifiers_10_0= ruleFieldModifier ) ) ( (lv_modifiers_11_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_12_0= 'extension' ) ) ( (lv_name_13_0= ruleValidID ) ) otherlv_14= ':' ( (lv_type_15_0= ruleJvmTypeReference ) ) ) | ( ( (lv_name_16_0= ruleValidID ) ) (otherlv_17= ':' ( (lv_type_18_0= ruleJvmTypeReference ) ) )? ) ) )
                              // InternalSARL.g:4864:7: ( (lv_modifiers_10_0= ruleFieldModifier ) ) ( (lv_modifiers_11_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_12_0= 'extension' ) ) ( (lv_name_13_0= ruleValidID ) ) otherlv_14= ':' ( (lv_type_15_0= ruleJvmTypeReference ) ) ) | ( ( (lv_name_16_0= ruleValidID ) ) (otherlv_17= ':' ( (lv_type_18_0= ruleJvmTypeReference ) ) )? ) )
                              {
                              // InternalSARL.g:4864:7: ( (lv_modifiers_10_0= ruleFieldModifier ) )
                              // InternalSARL.g:4865:8: (lv_modifiers_10_0= ruleFieldModifier )
                              {
                              // InternalSARL.g:4865:8: (lv_modifiers_10_0= ruleFieldModifier )
                              // InternalSARL.g:4866:9: lv_modifiers_10_0= ruleFieldModifier
                              {
                              if ( state.backtracking==0 ) {
  
                                									newCompositeNode(grammarAccess.getMemberAccess().getModifiersFieldModifierParserRuleCall_2_0_2_1_0_0());
                                								
                              }
                              pushFollow(FOLLOW_43);
                              lv_modifiers_10_0=ruleFieldModifier();
  
                              state._fsp--;
                              if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                									if (current==null) {
                                										current = createModelElementForParent(grammarAccess.getMemberRule());
                                									}
                                									add(
                                										current,
                                										"modifiers",
                                										lv_modifiers_10_0,
                                										"org.eclipse.xtend.core.Xtend.FieldModifier");
                                									afterParserOrEnumRuleCall();
                                								
                              }
  
                              }
  
  
                              }
  
                              // InternalSARL.g:4883:7: ( (lv_modifiers_11_0= ruleCommonModifier ) )*
                              loop138:
                              do {
                                  int alt138=2;
                                  int LA138_0 = input.LA(1);
  
                                  if ( (LA138_0==25||(LA138_0>=78 && LA138_0<=89)) ) {
                                      alt138=1;
                                  }
  
  
                                  switch (alt138) {
                              	case 1 :
                              	    // InternalSARL.g:4884:8: (lv_modifiers_11_0= ruleCommonModifier )
                              	    {
                              	    // InternalSARL.g:4884:8: (lv_modifiers_11_0= ruleCommonModifier )
                              	    // InternalSARL.g:4885:9: lv_modifiers_11_0= ruleCommonModifier
                              	    {
                              	    if ( state.backtracking==0 ) {
  
                              	      									newCompositeNode(grammarAccess.getMemberAccess().getModifiersCommonModifierParserRuleCall_2_0_2_1_1_0());
                              	      								
                              	    }
                              	    pushFollow(FOLLOW_43);
                              	    lv_modifiers_11_0=ruleCommonModifier();
  
                              	    state._fsp--;
                              	    if (state.failed) return current;
                              	    if ( state.backtracking==0 ) {
  
                              	      									if (current==null) {
                              	      										current = createModelElementForParent(grammarAccess.getMemberRule());
                              	      									}
                              	      									add(
                              	      										current,
                              	      										"modifiers",
                              	      										lv_modifiers_11_0,
                              	      										"org.eclipse.xtend.core.Xtend.CommonModifier");
                              	      									afterParserOrEnumRuleCall();
                              	      								
                              	    }
  
                              	    }
  
  
                              	    }
                              	    break;
  
                              	default :
                              	    break loop138;
                                  }
                              } while (true);
  
                              // InternalSARL.g:4902:7: ( ( ( (lv_modifiers_12_0= 'extension' ) ) ( (lv_name_13_0= ruleValidID ) ) otherlv_14= ':' ( (lv_type_15_0= ruleJvmTypeReference ) ) ) | ( ( (lv_name_16_0= ruleValidID ) ) (otherlv_17= ':' ( (lv_type_18_0= ruleJvmTypeReference ) ) )? ) )
                              int alt140=2;
                              int LA140_0 = input.LA(1);
  
                              if ( (LA140_0==45) ) {
                                  alt140=1;
                              }
                              else if ( (LA140_0==RULE_ID||LA140_0==44||(LA140_0>=92 && LA140_0<=95)) ) {
                                  alt140=2;
                              }
                              else {
                                  if (state.backtracking>0) {state.failed=true; return current;}
                                  NoViableAltException nvae =
                                      new NoViableAltException("", 140, 0, input);
  
                                  throw nvae;
                              }
                              switch (alt140) {
                                  case 1 :
                                      // InternalSARL.g:4903:8: ( ( (lv_modifiers_12_0= 'extension' ) ) ( (lv_name_13_0= ruleValidID ) ) otherlv_14= ':' ( (lv_type_15_0= ruleJvmTypeReference ) ) )
                                      {
                                      // InternalSARL.g:4903:8: ( ( (lv_modifiers_12_0= 'extension' ) ) ( (lv_name_13_0= ruleValidID ) ) otherlv_14= ':' ( (lv_type_15_0= ruleJvmTypeReference ) ) )
                                      // InternalSARL.g:4904:9: ( (lv_modifiers_12_0= 'extension' ) ) ( (lv_name_13_0= ruleValidID ) ) otherlv_14= ':' ( (lv_type_15_0= ruleJvmTypeReference ) )
                                      {
                                      // InternalSARL.g:4904:9: ( (lv_modifiers_12_0= 'extension' ) )
                                      // InternalSARL.g:4905:10: (lv_modifiers_12_0= 'extension' )
                                      {
                                      // InternalSARL.g:4905:10: (lv_modifiers_12_0= 'extension' )
                                      // InternalSARL.g:4906:11: lv_modifiers_12_0= 'extension'
                                      {
                                      lv_modifiers_12_0=(Token)match(input,45,FOLLOW_3); if (state.failed) return current;
                                      if ( state.backtracking==0 ) {
  
                                        											newLeafNode(lv_modifiers_12_0, grammarAccess.getMemberAccess().getModifiersExtensionKeyword_2_0_2_1_2_0_0_0());
                                        										
                                      }
                                      if ( state.backtracking==0 ) {
  
                                        											if (current==null) {
                                        												current = createModelElement(grammarAccess.getMemberRule());
                                        											}
                                        											addWithLastConsumed(current, "modifiers", lv_modifiers_12_0, "extension");
                                        										
                                      }
  
                                      }
  
  
                                      }
  
                                      // InternalSARL.g:4918:9: ( (lv_name_13_0= ruleValidID ) )
                                      // InternalSARL.g:4919:10: (lv_name_13_0= ruleValidID )
                                      {
                                      // InternalSARL.g:4919:10: (lv_name_13_0= ruleValidID )
                                      // InternalSARL.g:4920:11: lv_name_13_0= ruleValidID
                                      {
                                      if ( state.backtracking==0 ) {
  
                                        											newCompositeNode(grammarAccess.getMemberAccess().getNameValidIDParserRuleCall_2_0_2_1_2_0_1_0());
                                        										
                                      }
                                      pushFollow(FOLLOW_40);
                                      lv_name_13_0=ruleValidID();
  
                                      state._fsp--;
                                      if (state.failed) return current;
                                      if ( state.backtracking==0 ) {
  
                                        											if (current==null) {
                                        												current = createModelElementForParent(grammarAccess.getMemberRule());
                                        											}
                                        											set(
                                        												current,
                                        												"name",
                                        												lv_name_13_0,
                                        												"org.eclipse.xtend.core.Xtend.ValidID");
                                        											afterParserOrEnumRuleCall();
                                        										
                                      }
  
                                      }
  
  
                                      }
  
                                      otherlv_14=(Token)match(input,46,FOLLOW_41); if (state.failed) return current;
                                      if ( state.backtracking==0 ) {
  
                                        									newLeafNode(otherlv_14, grammarAccess.getMemberAccess().getColonKeyword_2_0_2_1_2_0_2());
                                        								
                                      }
                                      // InternalSARL.g:4941:9: ( (lv_type_15_0= ruleJvmTypeReference ) )
                                      // InternalSARL.g:4942:10: (lv_type_15_0= ruleJvmTypeReference )
                                      {
                                      // InternalSARL.g:4942:10: (lv_type_15_0= ruleJvmTypeReference )
                                      // InternalSARL.g:4943:11: lv_type_15_0= ruleJvmTypeReference
                                      {
                                      if ( state.backtracking==0 ) {
  
                                        											newCompositeNode(grammarAccess.getMemberAccess().getTypeJvmTypeReferenceParserRuleCall_2_0_2_1_2_0_3_0());
                                        										
                                      }
                                      pushFollow(FOLLOW_42);
                                      lv_type_15_0=ruleJvmTypeReference();
  
                                      state._fsp--;
                                      if (state.failed) return current;
                                      if ( state.backtracking==0 ) {
  
                                        											if (current==null) {
                                        												current = createModelElementForParent(grammarAccess.getMemberRule());
                                        											}
                                        											set(
                                        												current,
                                        												"type",
                                        												lv_type_15_0,
                                        												"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
                                        											afterParserOrEnumRuleCall();
                                        										
                                      }
  
                                      }
  
  
                                      }
  
  
                                      }
  
  
                                      }
                                      break;
                                  case 2 :
                                      // InternalSARL.g:4962:8: ( ( (lv_name_16_0= ruleValidID ) ) (otherlv_17= ':' ( (lv_type_18_0= ruleJvmTypeReference ) ) )? )
                                      {
                                      // InternalSARL.g:4962:8: ( ( (lv_name_16_0= ruleValidID ) ) (otherlv_17= ':' ( (lv_type_18_0= ruleJvmTypeReference ) ) )? )
                                      // InternalSARL.g:4963:9: ( (lv_name_16_0= ruleValidID ) ) (otherlv_17= ':' ( (lv_type_18_0= ruleJvmTypeReference ) ) )?
                                      {
                                      // InternalSARL.g:4963:9: ( (lv_name_16_0= ruleValidID ) )
                                      // InternalSARL.g:4964:10: (lv_name_16_0= ruleValidID )
                                      {
                                      // InternalSARL.g:4964:10: (lv_name_16_0= ruleValidID )
                                      // InternalSARL.g:4965:11: lv_name_16_0= ruleValidID
                                      {
                                      if ( state.backtracking==0 ) {
  
                                        											newCompositeNode(grammarAccess.getMemberAccess().getNameValidIDParserRuleCall_2_0_2_1_2_1_0_0());
                                        										
                                      }
                                      pushFollow(FOLLOW_44);
                                      lv_name_16_0=ruleValidID();
  
                                      state._fsp--;
                                      if (state.failed) return current;
                                      if ( state.backtracking==0 ) {
  
                                        											if (current==null) {
                                        												current = createModelElementForParent(grammarAccess.getMemberRule());
                                        											}
                                        											set(
                                        												current,
                                        												"name",
                                        												lv_name_16_0,
                                        												"org.eclipse.xtend.core.Xtend.ValidID");
                                        											afterParserOrEnumRuleCall();
                                        										
                                      }
  
                                      }
  
  
                                      }
  
                                      // InternalSARL.g:4982:9: (otherlv_17= ':' ( (lv_type_18_0= ruleJvmTypeReference ) ) )?
                                      int alt139=2;
                                      int LA139_0 = input.LA(1);
  
                                      if ( (LA139_0==46) ) {
                                          alt139=1;
                                      }
                                      switch (alt139) {
                                          case 1 :
                                              // InternalSARL.g:4983:10: otherlv_17= ':' ( (lv_type_18_0= ruleJvmTypeReference ) )
                                              {
                                              otherlv_17=(Token)match(input,46,FOLLOW_41); if (state.failed) return current;
                                              if ( state.backtracking==0 ) {
  
                                                										newLeafNode(otherlv_17, grammarAccess.getMemberAccess().getColonKeyword_2_0_2_1_2_1_1_0());
                                                									
                                              }
                                              // InternalSARL.g:4987:10: ( (lv_type_18_0= ruleJvmTypeReference ) )
                                              // InternalSARL.g:4988:11: (lv_type_18_0= ruleJvmTypeReference )
                                              {
                                              // InternalSARL.g:4988:11: (lv_type_18_0= ruleJvmTypeReference )
                                              // InternalSARL.g:4989:12: lv_type_18_0= ruleJvmTypeReference
                                              {
                                              if ( state.backtracking==0 ) {
  
                                                												newCompositeNode(grammarAccess.getMemberAccess().getTypeJvmTypeReferenceParserRuleCall_2_0_2_1_2_1_1_1_0());
                                                											
                                              }
                                              pushFollow(FOLLOW_42);
                                              lv_type_18_0=ruleJvmTypeReference();
  
                                              state._fsp--;
                                              if (state.failed) return current;
                                              if ( state.backtracking==0 ) {
  
                                                												if (current==null) {
                                                													current = createModelElementForParent(grammarAccess.getMemberRule());
                                                												}
                                                												set(
                                                													current,
                                                													"type",
                                                													lv_type_18_0,
                                                													"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
                                                												afterParserOrEnumRuleCall();
                                                											
                                              }
  
                                              }
  
  
                                              }
  
  
                                              }
                                              break;
  
                                      }
  
  
                                      }
  
  
                                      }
                                      break;
  
                              }
  
  
                              }
  
  
                              }
                              break;
  
                      }
  
                      // InternalSARL.g:5011:5: (otherlv_19= '=' ( (lv_initialValue_20_0= ruleXExpression ) ) )?
                      int alt142=2;
                      int LA142_0 = input.LA(1);
  
                      if ( (LA142_0==47) ) {
                          alt142=1;
                      }
                      switch (alt142) {
                          case 1 :
                              // InternalSARL.g:5012:6: otherlv_19= '=' ( (lv_initialValue_20_0= ruleXExpression ) )
                              {
                              otherlv_19=(Token)match(input,47,FOLLOW_45); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_19, grammarAccess.getMemberAccess().getEqualsSignKeyword_2_0_3_0());
                                					
                              }
                              // InternalSARL.g:5016:6: ( (lv_initialValue_20_0= ruleXExpression ) )
                              // InternalSARL.g:5017:7: (lv_initialValue_20_0= ruleXExpression )
                              {
                              // InternalSARL.g:5017:7: (lv_initialValue_20_0= ruleXExpression )
                              // InternalSARL.g:5018:8: lv_initialValue_20_0= ruleXExpression
                              {
                              if ( state.backtracking==0 ) {
  
                                								newCompositeNode(grammarAccess.getMemberAccess().getInitialValueXExpressionParserRuleCall_2_0_3_1_0());
                                							
                              }
                              pushFollow(FOLLOW_46);
                              lv_initialValue_20_0=ruleXExpression();
  
                              state._fsp--;
                              if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                								if (current==null) {
                                									current = createModelElementForParent(grammarAccess.getMemberRule());
                                								}
                                								set(
                                									current,
                                									"initialValue",
                                									lv_initialValue_20_0,
                                									"org.eclipse.xtext.xbase.Xbase.XExpression");
                                								afterParserOrEnumRuleCall();
                                							
                              }
  
                              }
  
  
                              }
  
  
                              }
                              break;
  
                      }
  
                      // InternalSARL.g:5036:5: (otherlv_21= ';' )?
                      int alt143=2;
                      int LA143_0 = input.LA(1);
  
                      if ( (LA143_0==26) ) {
                          alt143=1;
                      }
                      switch (alt143) {
                          case 1 :
                              // InternalSARL.g:5037:6: otherlv_21= ';'
                              {
                              otherlv_21=(Token)match(input,26,FOLLOW_2); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_21, grammarAccess.getMemberAccess().getSemicolonKeyword_2_0_4());
                                					
                              }
  
                              }
                              break;
  
                      }
  
  
                      }
  
  
                      }
                      break;
                  case 2 :
                      // InternalSARL.g:5044:4: ( () ( (lv_modifiers_23_0= ruleCommonModifier ) )* otherlv_24= 'new' (otherlv_25= '<' ( (lv_typeParameters_26_0= ruleJvmTypeParameter ) ) (otherlv_27= ',' ( (lv_typeParameters_28_0= ruleJvmTypeParameter ) ) )* otherlv_29= '>' )? (otherlv_30= '(' ( ( (lv_parameters_31_0= ruleParameter ) ) (otherlv_32= ',' ( (lv_parameters_33_0= ruleParameter ) ) )* )? otherlv_34= ')' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_36= 'throws' ( (lv_exceptions_37_0= ruleJvmTypeReference ) ) (otherlv_38= ',' ( (lv_exceptions_39_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_40= 'with' ( (lv_typeParameters_41_0= ruleJvmTypeParameter ) ) (otherlv_42= ',' ( (lv_typeParameters_43_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) ) ( (lv_expression_44_0= ruleXBlockExpression ) ) )
                      {
                      // InternalSARL.g:5044:4: ( () ( (lv_modifiers_23_0= ruleCommonModifier ) )* otherlv_24= 'new' (otherlv_25= '<' ( (lv_typeParameters_26_0= ruleJvmTypeParameter ) ) (otherlv_27= ',' ( (lv_typeParameters_28_0= ruleJvmTypeParameter ) ) )* otherlv_29= '>' )? (otherlv_30= '(' ( ( (lv_parameters_31_0= ruleParameter ) ) (otherlv_32= ',' ( (lv_parameters_33_0= ruleParameter ) ) )* )? otherlv_34= ')' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_36= 'throws' ( (lv_exceptions_37_0= ruleJvmTypeReference ) ) (otherlv_38= ',' ( (lv_exceptions_39_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_40= 'with' ( (lv_typeParameters_41_0= ruleJvmTypeParameter ) ) (otherlv_42= ',' ( (lv_typeParameters_43_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) ) ( (lv_expression_44_0= ruleXBlockExpression ) ) )
                      // InternalSARL.g:5045:5: () ( (lv_modifiers_23_0= ruleCommonModifier ) )* otherlv_24= 'new' (otherlv_25= '<' ( (lv_typeParameters_26_0= ruleJvmTypeParameter ) ) (otherlv_27= ',' ( (lv_typeParameters_28_0= ruleJvmTypeParameter ) ) )* otherlv_29= '>' )? (otherlv_30= '(' ( ( (lv_parameters_31_0= ruleParameter ) ) (otherlv_32= ',' ( (lv_parameters_33_0= ruleParameter ) ) )* )? otherlv_34= ')' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_36= 'throws' ( (lv_exceptions_37_0= ruleJvmTypeReference ) ) (otherlv_38= ',' ( (lv_exceptions_39_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_40= 'with' ( (lv_typeParameters_41_0= ruleJvmTypeParameter ) ) (otherlv_42= ',' ( (lv_typeParameters_43_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) ) ( (lv_expression_44_0= ruleXBlockExpression ) )
                      {
                      // InternalSARL.g:5045:5: ()
                      // InternalSARL.g:5046:6: 
                      {
                      if ( state.backtracking==0 ) {
  
                        						current = forceCreateModelElementAndSet(
                        							grammarAccess.getMemberAccess().getSarlConstructorAnnotationInfoAction_2_1_0(),
                        							current);
                        					
                      }
  
                      }
  
                      // InternalSARL.g:5052:5: ( (lv_modifiers_23_0= ruleCommonModifier ) )*
                      loop144:
                      do {
                          int alt144=2;
                          int LA144_0 = input.LA(1);
  
                          if ( (LA144_0==25||(LA144_0>=78 && LA144_0<=89)) ) {
                              alt144=1;
                          }
  
  
                          switch (alt144) {
                      	case 1 :
                      	    // InternalSARL.g:5053:6: (lv_modifiers_23_0= ruleCommonModifier )
                      	    {
                      	    // InternalSARL.g:5053:6: (lv_modifiers_23_0= ruleCommonModifier )
                      	    // InternalSARL.g:5054:7: lv_modifiers_23_0= ruleCommonModifier
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      							newCompositeNode(grammarAccess.getMemberAccess().getModifiersCommonModifierParserRuleCall_2_1_1_0());
                      	      						
                      	    }
                      	    pushFollow(FOLLOW_47);
                      	    lv_modifiers_23_0=ruleCommonModifier();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      							if (current==null) {
                      	      								current = createModelElementForParent(grammarAccess.getMemberRule());
                      	      							}
                      	      							add(
                      	      								current,
                      	      								"modifiers",
                      	      								lv_modifiers_23_0,
                      	      								"org.eclipse.xtend.core.Xtend.CommonModifier");
                      	      							afterParserOrEnumRuleCall();
                      	      						
                      	    }
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop144;
                          }
                      } while (true);
  
                      otherlv_24=(Token)match(input,48,FOLLOW_48); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					newLeafNode(otherlv_24, grammarAccess.getMemberAccess().getNewKeyword_2_1_2());
                        				
                      }
                      // InternalSARL.g:5075:5: (otherlv_25= '<' ( (lv_typeParameters_26_0= ruleJvmTypeParameter ) ) (otherlv_27= ',' ( (lv_typeParameters_28_0= ruleJvmTypeParameter ) ) )* otherlv_29= '>' )?
                      int alt146=2;
                      int LA146_0 = input.LA(1);
  
                      if ( (LA146_0==40) ) {
                          alt146=1;
                      }
                      switch (alt146) {
                          case 1 :
                              // InternalSARL.g:5076:6: otherlv_25= '<' ( (lv_typeParameters_26_0= ruleJvmTypeParameter ) ) (otherlv_27= ',' ( (lv_typeParameters_28_0= ruleJvmTypeParameter ) ) )* otherlv_29= '>'
                              {
                              otherlv_25=(Token)match(input,40,FOLLOW_3); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_25, grammarAccess.getMemberAccess().getLessThanSignKeyword_2_1_3_0());
                                					
                              }
                              // InternalSARL.g:5080:6: ( (lv_typeParameters_26_0= ruleJvmTypeParameter ) )
                              // InternalSARL.g:5081:7: (lv_typeParameters_26_0= ruleJvmTypeParameter )
                              {
                              // InternalSARL.g:5081:7: (lv_typeParameters_26_0= ruleJvmTypeParameter )
                              // InternalSARL.g:5082:8: lv_typeParameters_26_0= ruleJvmTypeParameter
                              {
                              if ( state.backtracking==0 ) {
  
                                								newCompositeNode(grammarAccess.getMemberAccess().getTypeParametersJvmTypeParameterParserRuleCall_2_1_3_1_0());
                                							
                              }
                              pushFollow(FOLLOW_28);
                              lv_typeParameters_26_0=ruleJvmTypeParameter();
  
                              state._fsp--;
                              if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                								if (current==null) {
                                									current = createModelElementForParent(grammarAccess.getMemberRule());
                                								}
                                								add(
                                									current,
                                									"typeParameters",
                                									lv_typeParameters_26_0,
                                									"org.eclipse.xtext.xbase.Xtype.JvmTypeParameter");
                                								afterParserOrEnumRuleCall();
                                							
                              }
  
                              }
  
  
                              }
  
                              // InternalSARL.g:5099:6: (otherlv_27= ',' ( (lv_typeParameters_28_0= ruleJvmTypeParameter ) ) )*
                              loop145:
                              do {
                                  int alt145=2;
                                  int LA145_0 = input.LA(1);
  
                                  if ( (LA145_0==32) ) {
                                      alt145=1;
                                  }
  
  
                                  switch (alt145) {
                              	case 1 :
                              	    // InternalSARL.g:5100:7: otherlv_27= ',' ( (lv_typeParameters_28_0= ruleJvmTypeParameter ) )
                              	    {
                              	    otherlv_27=(Token)match(input,32,FOLLOW_3); if (state.failed) return current;
                              	    if ( state.backtracking==0 ) {
  
                              	      							newLeafNode(otherlv_27, grammarAccess.getMemberAccess().getCommaKeyword_2_1_3_2_0());
                              	      						
                              	    }
                              	    // InternalSARL.g:5104:7: ( (lv_typeParameters_28_0= ruleJvmTypeParameter ) )
                              	    // InternalSARL.g:5105:8: (lv_typeParameters_28_0= ruleJvmTypeParameter )
                              	    {
                              	    // InternalSARL.g:5105:8: (lv_typeParameters_28_0= ruleJvmTypeParameter )
                              	    // InternalSARL.g:5106:9: lv_typeParameters_28_0= ruleJvmTypeParameter
                              	    {
                              	    if ( state.backtracking==0 ) {
  
                              	      									newCompositeNode(grammarAccess.getMemberAccess().getTypeParametersJvmTypeParameterParserRuleCall_2_1_3_2_1_0());
                              	      								
                              	    }
                              	    pushFollow(FOLLOW_28);
                              	    lv_typeParameters_28_0=ruleJvmTypeParameter();
  
                              	    state._fsp--;
                              	    if (state.failed) return current;
                              	    if ( state.backtracking==0 ) {
  
                              	      									if (current==null) {
                              	      										current = createModelElementForParent(grammarAccess.getMemberRule());
                              	      									}
                              	      									add(
                              	      										current,
                              	      										"typeParameters",
                              	      										lv_typeParameters_28_0,
                              	      										"org.eclipse.xtext.xbase.Xtype.JvmTypeParameter");
                              	      									afterParserOrEnumRuleCall();
                              	      								
                              	    }
  
                              	    }
  
  
                              	    }
  
  
                              	    }
                              	    break;
  
                              	default :
                              	    break loop145;
                                  }
                              } while (true);
  
                              otherlv_29=(Token)match(input,41,FOLLOW_49); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_29, grammarAccess.getMemberAccess().getGreaterThanSignKeyword_2_1_3_3());
                                					
                              }
  
                              }
                              break;
  
                      }
  
                      // InternalSARL.g:5129:5: (otherlv_30= '(' ( ( (lv_parameters_31_0= ruleParameter ) ) (otherlv_32= ',' ( (lv_parameters_33_0= ruleParameter ) ) )* )? otherlv_34= ')' )?
                      int alt149=2;
                      int LA149_0 = input.LA(1);
  
                      if ( (LA149_0==49) ) {
                          alt149=1;
                      }
                      switch (alt149) {
                          case 1 :
                              // InternalSARL.g:5130:6: otherlv_30= '(' ( ( (lv_parameters_31_0= ruleParameter ) ) (otherlv_32= ',' ( (lv_parameters_33_0= ruleParameter ) ) )* )? otherlv_34= ')'
                              {
                              otherlv_30=(Token)match(input,49,FOLLOW_50); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_30, grammarAccess.getMemberAccess().getLeftParenthesisKeyword_2_1_4_0());
                                					
                              }
                              // InternalSARL.g:5134:6: ( ( (lv_parameters_31_0= ruleParameter ) ) (otherlv_32= ',' ( (lv_parameters_33_0= ruleParameter ) ) )* )?
                              int alt148=2;
                              int LA148_0 = input.LA(1);
  
                              if ( (LA148_0==RULE_ID||(LA148_0>=44 && LA148_0<=45)||(LA148_0>=92 && LA148_0<=95)||LA148_0==105) ) {
                                  alt148=1;
                              }
                              switch (alt148) {
                                  case 1 :
                                      // InternalSARL.g:5135:7: ( (lv_parameters_31_0= ruleParameter ) ) (otherlv_32= ',' ( (lv_parameters_33_0= ruleParameter ) ) )*
                                      {
                                      // InternalSARL.g:5135:7: ( (lv_parameters_31_0= ruleParameter ) )
                                      // InternalSARL.g:5136:8: (lv_parameters_31_0= ruleParameter )
                                      {
                                      // InternalSARL.g:5136:8: (lv_parameters_31_0= ruleParameter )
                                      // InternalSARL.g:5137:9: lv_parameters_31_0= ruleParameter
                                      {
                                      if ( state.backtracking==0 ) {
  
                                        									newCompositeNode(grammarAccess.getMemberAccess().getParametersParameterParserRuleCall_2_1_4_1_0_0());
                                        								
                                      }
                                      pushFollow(FOLLOW_51);
                                      lv_parameters_31_0=ruleParameter();
  
                                      state._fsp--;
                                      if (state.failed) return current;
                                      if ( state.backtracking==0 ) {
  
                                        									if (current==null) {
                                        										current = createModelElementForParent(grammarAccess.getMemberRule());
                                        									}
                                        									add(
                                        										current,
                                        										"parameters",
                                        										lv_parameters_31_0,
                                        										"io.sarl.lang.SARL.Parameter");
                                        									afterParserOrEnumRuleCall();
                                        								
                                      }
  
                                      }
  
  
                                      }
  
                                      // InternalSARL.g:5154:7: (otherlv_32= ',' ( (lv_parameters_33_0= ruleParameter ) ) )*
                                      loop147:
                                      do {
                                          int alt147=2;
                                          int LA147_0 = input.LA(1);
  
                                          if ( (LA147_0==32) ) {
                                              alt147=1;
                                          }
  
  
                                          switch (alt147) {
                                      	case 1 :
                                      	    // InternalSARL.g:5155:8: otherlv_32= ',' ( (lv_parameters_33_0= ruleParameter ) )
                                      	    {
                                      	    otherlv_32=(Token)match(input,32,FOLLOW_52); if (state.failed) return current;
                                      	    if ( state.backtracking==0 ) {
  
                                      	      								newLeafNode(otherlv_32, grammarAccess.getMemberAccess().getCommaKeyword_2_1_4_1_1_0());
                                      	      							
                                      	    }
                                      	    // InternalSARL.g:5159:8: ( (lv_parameters_33_0= ruleParameter ) )
                                      	    // InternalSARL.g:5160:9: (lv_parameters_33_0= ruleParameter )
                                      	    {
                                      	    // InternalSARL.g:5160:9: (lv_parameters_33_0= ruleParameter )
                                      	    // InternalSARL.g:5161:10: lv_parameters_33_0= ruleParameter
                                      	    {
                                      	    if ( state.backtracking==0 ) {
  
                                      	      										newCompositeNode(grammarAccess.getMemberAccess().getParametersParameterParserRuleCall_2_1_4_1_1_1_0());
                                      	      									
                                      	    }
                                      	    pushFollow(FOLLOW_51);
                                      	    lv_parameters_33_0=ruleParameter();
  
                                      	    state._fsp--;
                                      	    if (state.failed) return current;
                                      	    if ( state.backtracking==0 ) {
  
                                      	      										if (current==null) {
                                      	      											current = createModelElementForParent(grammarAccess.getMemberRule());
                                      	      										}
                                      	      										add(
                                      	      											current,
                                      	      											"parameters",
                                      	      											lv_parameters_33_0,
                                      	      											"io.sarl.lang.SARL.Parameter");
                                      	      										afterParserOrEnumRuleCall();
                                      	      									
                                      	    }
  
                                      	    }
  
  
                                      	    }
  
  
                                      	    }
                                      	    break;
  
                                      	default :
                                      	    break loop147;
                                          }
                                      } while (true);
  
  
                                      }
                                      break;
  
                              }
  
                              otherlv_34=(Token)match(input,50,FOLLOW_53); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_34, grammarAccess.getMemberAccess().getRightParenthesisKeyword_2_1_4_2());
                                					
                              }
  
                              }
                              break;
  
                      }
  
                      // InternalSARL.g:5185:5: ( ( ( ( ({...}? => ( ({...}? => (otherlv_36= 'throws' ( (lv_exceptions_37_0= ruleJvmTypeReference ) ) (otherlv_38= ',' ( (lv_exceptions_39_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_40= 'with' ( (lv_typeParameters_41_0= ruleJvmTypeParameter ) ) (otherlv_42= ',' ( (lv_typeParameters_43_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) )
                      // InternalSARL.g:5186:6: ( ( ( ({...}? => ( ({...}? => (otherlv_36= 'throws' ( (lv_exceptions_37_0= ruleJvmTypeReference ) ) (otherlv_38= ',' ( (lv_exceptions_39_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_40= 'with' ( (lv_typeParameters_41_0= ruleJvmTypeParameter ) ) (otherlv_42= ',' ( (lv_typeParameters_43_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) )
                      {
                      // InternalSARL.g:5186:6: ( ( ( ({...}? => ( ({...}? => (otherlv_36= 'throws' ( (lv_exceptions_37_0= ruleJvmTypeReference ) ) (otherlv_38= ',' ( (lv_exceptions_39_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_40= 'with' ( (lv_typeParameters_41_0= ruleJvmTypeParameter ) ) (otherlv_42= ',' ( (lv_typeParameters_43_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) )
                      // InternalSARL.g:5187:7: ( ( ({...}? => ( ({...}? => (otherlv_36= 'throws' ( (lv_exceptions_37_0= ruleJvmTypeReference ) ) (otherlv_38= ',' ( (lv_exceptions_39_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_40= 'with' ( (lv_typeParameters_41_0= ruleJvmTypeParameter ) ) (otherlv_42= ',' ( (lv_typeParameters_43_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* )
                      {
                      getUnorderedGroupHelper().enter(grammarAccess.getMemberAccess().getUnorderedGroup_2_1_5());
                      // InternalSARL.g:5190:7: ( ( ({...}? => ( ({...}? => (otherlv_36= 'throws' ( (lv_exceptions_37_0= ruleJvmTypeReference ) ) (otherlv_38= ',' ( (lv_exceptions_39_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_40= 'with' ( (lv_typeParameters_41_0= ruleJvmTypeParameter ) ) (otherlv_42= ',' ( (lv_typeParameters_43_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* )
                      // InternalSARL.g:5191:8: ( ({...}? => ( ({...}? => (otherlv_36= 'throws' ( (lv_exceptions_37_0= ruleJvmTypeReference ) ) (otherlv_38= ',' ( (lv_exceptions_39_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_40= 'with' ( (lv_typeParameters_41_0= ruleJvmTypeParameter ) ) (otherlv_42= ',' ( (lv_typeParameters_43_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )*
                      {
                      // InternalSARL.g:5191:8: ( ({...}? => ( ({...}? => (otherlv_36= 'throws' ( (lv_exceptions_37_0= ruleJvmTypeReference ) ) (otherlv_38= ',' ( (lv_exceptions_39_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_40= 'with' ( (lv_typeParameters_41_0= ruleJvmTypeParameter ) ) (otherlv_42= ',' ( (lv_typeParameters_43_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )*
                      loop152:
                      do {
                          int alt152=3;
                          int LA152_0 = input.LA(1);
  
                          if ( LA152_0 == 51 && getUnorderedGroupHelper().canSelect(grammarAccess.getMemberAccess().getUnorderedGroup_2_1_5(), 0) ) {
                              alt152=1;
                          }
                          else if ( LA152_0 == 52 && getUnorderedGroupHelper().canSelect(grammarAccess.getMemberAccess().getUnorderedGroup_2_1_5(), 1) ) {
                              alt152=2;
                          }
  
  
                          switch (alt152) {
                      	case 1 :
                      	    // InternalSARL.g:5192:6: ({...}? => ( ({...}? => (otherlv_36= 'throws' ( (lv_exceptions_37_0= ruleJvmTypeReference ) ) (otherlv_38= ',' ( (lv_exceptions_39_0= ruleJvmTypeReference ) ) )* ) ) ) )
                      	    {
                      	    // InternalSARL.g:5192:6: ({...}? => ( ({...}? => (otherlv_36= 'throws' ( (lv_exceptions_37_0= ruleJvmTypeReference ) ) (otherlv_38= ',' ( (lv_exceptions_39_0= ruleJvmTypeReference ) ) )* ) ) ) )
                      	    // InternalSARL.g:5193:7: {...}? => ( ({...}? => (otherlv_36= 'throws' ( (lv_exceptions_37_0= ruleJvmTypeReference ) ) (otherlv_38= ',' ( (lv_exceptions_39_0= ruleJvmTypeReference ) ) )* ) ) )
                      	    {
                      	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getMemberAccess().getUnorderedGroup_2_1_5(), 0) ) {
                      	        if (state.backtracking>0) {state.failed=true; return current;}
                      	        throw new FailedPredicateException(input, "ruleMember", "getUnorderedGroupHelper().canSelect(grammarAccess.getMemberAccess().getUnorderedGroup_2_1_5(), 0)");
                      	    }
                      	    // InternalSARL.g:5193:109: ( ({...}? => (otherlv_36= 'throws' ( (lv_exceptions_37_0= ruleJvmTypeReference ) ) (otherlv_38= ',' ( (lv_exceptions_39_0= ruleJvmTypeReference ) ) )* ) ) )
                      	    // InternalSARL.g:5194:8: ({...}? => (otherlv_36= 'throws' ( (lv_exceptions_37_0= ruleJvmTypeReference ) ) (otherlv_38= ',' ( (lv_exceptions_39_0= ruleJvmTypeReference ) ) )* ) )
                      	    {
                      	    getUnorderedGroupHelper().select(grammarAccess.getMemberAccess().getUnorderedGroup_2_1_5(), 0);
                      	    // InternalSARL.g:5197:11: ({...}? => (otherlv_36= 'throws' ( (lv_exceptions_37_0= ruleJvmTypeReference ) ) (otherlv_38= ',' ( (lv_exceptions_39_0= ruleJvmTypeReference ) ) )* ) )
                      	    // InternalSARL.g:5197:12: {...}? => (otherlv_36= 'throws' ( (lv_exceptions_37_0= ruleJvmTypeReference ) ) (otherlv_38= ',' ( (lv_exceptions_39_0= ruleJvmTypeReference ) ) )* )
                      	    {
                      	    if ( !((true)) ) {
                      	        if (state.backtracking>0) {state.failed=true; return current;}
                      	        throw new FailedPredicateException(input, "ruleMember", "true");
                      	    }
                      	    // InternalSARL.g:5197:21: (otherlv_36= 'throws' ( (lv_exceptions_37_0= ruleJvmTypeReference ) ) (otherlv_38= ',' ( (lv_exceptions_39_0= ruleJvmTypeReference ) ) )* )
                      	    // InternalSARL.g:5197:22: otherlv_36= 'throws' ( (lv_exceptions_37_0= ruleJvmTypeReference ) ) (otherlv_38= ',' ( (lv_exceptions_39_0= ruleJvmTypeReference ) ) )*
                      	    {
                      	    otherlv_36=(Token)match(input,51,FOLLOW_41); if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      											newLeafNode(otherlv_36, grammarAccess.getMemberAccess().getThrowsKeyword_2_1_5_0_0());
                      	      										
                      	    }
                      	    // InternalSARL.g:5201:11: ( (lv_exceptions_37_0= ruleJvmTypeReference ) )
                      	    // InternalSARL.g:5202:12: (lv_exceptions_37_0= ruleJvmTypeReference )
                      	    {
                      	    // InternalSARL.g:5202:12: (lv_exceptions_37_0= ruleJvmTypeReference )
                      	    // InternalSARL.g:5203:13: lv_exceptions_37_0= ruleJvmTypeReference
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      													newCompositeNode(grammarAccess.getMemberAccess().getExceptionsJvmTypeReferenceParserRuleCall_2_1_5_0_1_0());
                      	      												
                      	    }
                      	    pushFollow(FOLLOW_54);
                      	    lv_exceptions_37_0=ruleJvmTypeReference();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      													if (current==null) {
                      	      														current = createModelElementForParent(grammarAccess.getMemberRule());
                      	      													}
                      	      													add(
                      	      														current,
                      	      														"exceptions",
                      	      														lv_exceptions_37_0,
                      	      														"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
                      	      													afterParserOrEnumRuleCall();
                      	      												
                      	    }
  
                      	    }
  
  
                      	    }
  
                      	    // InternalSARL.g:5220:11: (otherlv_38= ',' ( (lv_exceptions_39_0= ruleJvmTypeReference ) ) )*
                      	    loop150:
                      	    do {
                      	        int alt150=2;
                      	        int LA150_0 = input.LA(1);
  
                      	        if ( (LA150_0==32) ) {
                      	            alt150=1;
                      	        }
  
  
                      	        switch (alt150) {
                      	    	case 1 :
                      	    	    // InternalSARL.g:5221:12: otherlv_38= ',' ( (lv_exceptions_39_0= ruleJvmTypeReference ) )
                      	    	    {
                      	    	    otherlv_38=(Token)match(input,32,FOLLOW_41); if (state.failed) return current;
                      	    	    if ( state.backtracking==0 ) {
  
                      	    	      												newLeafNode(otherlv_38, grammarAccess.getMemberAccess().getCommaKeyword_2_1_5_0_2_0());
                      	    	      											
                      	    	    }
                      	    	    // InternalSARL.g:5225:12: ( (lv_exceptions_39_0= ruleJvmTypeReference ) )
                      	    	    // InternalSARL.g:5226:13: (lv_exceptions_39_0= ruleJvmTypeReference )
                      	    	    {
                      	    	    // InternalSARL.g:5226:13: (lv_exceptions_39_0= ruleJvmTypeReference )
                      	    	    // InternalSARL.g:5227:14: lv_exceptions_39_0= ruleJvmTypeReference
                      	    	    {
                      	    	    if ( state.backtracking==0 ) {
  
                      	    	      														newCompositeNode(grammarAccess.getMemberAccess().getExceptionsJvmTypeReferenceParserRuleCall_2_1_5_0_2_1_0());
                      	    	      													
                      	    	    }
                      	    	    pushFollow(FOLLOW_54);
                      	    	    lv_exceptions_39_0=ruleJvmTypeReference();
  
                      	    	    state._fsp--;
                      	    	    if (state.failed) return current;
                      	    	    if ( state.backtracking==0 ) {
  
                      	    	      														if (current==null) {
                      	    	      															current = createModelElementForParent(grammarAccess.getMemberRule());
                      	    	      														}
                      	    	      														add(
                      	    	      															current,
                      	    	      															"exceptions",
                      	    	      															lv_exceptions_39_0,
                      	    	      															"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
                      	    	      														afterParserOrEnumRuleCall();
                      	    	      													
                      	    	    }
  
                      	    	    }
  
  
                      	    	    }
  
  
                      	    	    }
                      	    	    break;
  
                      	    	default :
                      	    	    break loop150;
                      	        }
                      	    } while (true);
  
  
                      	    }
  
  
                      	    }
  
                      	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getMemberAccess().getUnorderedGroup_2_1_5());
  
                      	    }
  
  
                      	    }
  
  
                      	    }
                      	    break;
                      	case 2 :
                      	    // InternalSARL.g:5251:6: ({...}? => ( ({...}? => (otherlv_40= 'with' ( (lv_typeParameters_41_0= ruleJvmTypeParameter ) ) (otherlv_42= ',' ( (lv_typeParameters_43_0= ruleJvmTypeParameter ) ) )* ) ) ) )
                      	    {
                      	    // InternalSARL.g:5251:6: ({...}? => ( ({...}? => (otherlv_40= 'with' ( (lv_typeParameters_41_0= ruleJvmTypeParameter ) ) (otherlv_42= ',' ( (lv_typeParameters_43_0= ruleJvmTypeParameter ) ) )* ) ) ) )
                      	    // InternalSARL.g:5252:7: {...}? => ( ({...}? => (otherlv_40= 'with' ( (lv_typeParameters_41_0= ruleJvmTypeParameter ) ) (otherlv_42= ',' ( (lv_typeParameters_43_0= ruleJvmTypeParameter ) ) )* ) ) )
                      	    {
                      	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getMemberAccess().getUnorderedGroup_2_1_5(), 1) ) {
                      	        if (state.backtracking>0) {state.failed=true; return current;}
                      	        throw new FailedPredicateException(input, "ruleMember", "getUnorderedGroupHelper().canSelect(grammarAccess.getMemberAccess().getUnorderedGroup_2_1_5(), 1)");
                      	    }
                      	    // InternalSARL.g:5252:109: ( ({...}? => (otherlv_40= 'with' ( (lv_typeParameters_41_0= ruleJvmTypeParameter ) ) (otherlv_42= ',' ( (lv_typeParameters_43_0= ruleJvmTypeParameter ) ) )* ) ) )
                      	    // InternalSARL.g:5253:8: ({...}? => (otherlv_40= 'with' ( (lv_typeParameters_41_0= ruleJvmTypeParameter ) ) (otherlv_42= ',' ( (lv_typeParameters_43_0= ruleJvmTypeParameter ) ) )* ) )
                      	    {
                      	    getUnorderedGroupHelper().select(grammarAccess.getMemberAccess().getUnorderedGroup_2_1_5(), 1);
                      	    // InternalSARL.g:5256:11: ({...}? => (otherlv_40= 'with' ( (lv_typeParameters_41_0= ruleJvmTypeParameter ) ) (otherlv_42= ',' ( (lv_typeParameters_43_0= ruleJvmTypeParameter ) ) )* ) )
                      	    // InternalSARL.g:5256:12: {...}? => (otherlv_40= 'with' ( (lv_typeParameters_41_0= ruleJvmTypeParameter ) ) (otherlv_42= ',' ( (lv_typeParameters_43_0= ruleJvmTypeParameter ) ) )* )
                      	    {
                      	    if ( !((true)) ) {
                      	        if (state.backtracking>0) {state.failed=true; return current;}
                      	        throw new FailedPredicateException(input, "ruleMember", "true");
                      	    }
                      	    // InternalSARL.g:5256:21: (otherlv_40= 'with' ( (lv_typeParameters_41_0= ruleJvmTypeParameter ) ) (otherlv_42= ',' ( (lv_typeParameters_43_0= ruleJvmTypeParameter ) ) )* )
                      	    // InternalSARL.g:5256:22: otherlv_40= 'with' ( (lv_typeParameters_41_0= ruleJvmTypeParameter ) ) (otherlv_42= ',' ( (lv_typeParameters_43_0= ruleJvmTypeParameter ) ) )*
                      	    {
                      	    otherlv_40=(Token)match(input,52,FOLLOW_3); if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      											newLeafNode(otherlv_40, grammarAccess.getMemberAccess().getWithKeyword_2_1_5_1_0());
                      	      										
                      	    }
                      	    // InternalSARL.g:5260:11: ( (lv_typeParameters_41_0= ruleJvmTypeParameter ) )
                      	    // InternalSARL.g:5261:12: (lv_typeParameters_41_0= ruleJvmTypeParameter )
                      	    {
                      	    // InternalSARL.g:5261:12: (lv_typeParameters_41_0= ruleJvmTypeParameter )
                      	    // InternalSARL.g:5262:13: lv_typeParameters_41_0= ruleJvmTypeParameter
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      													newCompositeNode(grammarAccess.getMemberAccess().getTypeParametersJvmTypeParameterParserRuleCall_2_1_5_1_1_0());
                      	      												
                      	    }
                      	    pushFollow(FOLLOW_54);
                      	    lv_typeParameters_41_0=ruleJvmTypeParameter();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      													if (current==null) {
                      	      														current = createModelElementForParent(grammarAccess.getMemberRule());
                      	      													}
                      	      													add(
                      	      														current,
                      	      														"typeParameters",
                      	      														lv_typeParameters_41_0,
                      	      														"org.eclipse.xtext.xbase.Xtype.JvmTypeParameter");
                      	      													afterParserOrEnumRuleCall();
                      	      												
                      	    }
  
                      	    }
  
  
                      	    }
  
                      	    // InternalSARL.g:5279:11: (otherlv_42= ',' ( (lv_typeParameters_43_0= ruleJvmTypeParameter ) ) )*
                      	    loop151:
                      	    do {
                      	        int alt151=2;
                      	        int LA151_0 = input.LA(1);
  
                      	        if ( (LA151_0==32) ) {
                      	            alt151=1;
                      	        }
  
  
                      	        switch (alt151) {
                      	    	case 1 :
                      	    	    // InternalSARL.g:5280:12: otherlv_42= ',' ( (lv_typeParameters_43_0= ruleJvmTypeParameter ) )
                      	    	    {
                      	    	    otherlv_42=(Token)match(input,32,FOLLOW_3); if (state.failed) return current;
                      	    	    if ( state.backtracking==0 ) {
  
                      	    	      												newLeafNode(otherlv_42, grammarAccess.getMemberAccess().getCommaKeyword_2_1_5_1_2_0());
                      	    	      											
                      	    	    }
                      	    	    // InternalSARL.g:5284:12: ( (lv_typeParameters_43_0= ruleJvmTypeParameter ) )
                      	    	    // InternalSARL.g:5285:13: (lv_typeParameters_43_0= ruleJvmTypeParameter )
                      	    	    {
                      	    	    // InternalSARL.g:5285:13: (lv_typeParameters_43_0= ruleJvmTypeParameter )
                      	    	    // InternalSARL.g:5286:14: lv_typeParameters_43_0= ruleJvmTypeParameter
                      	    	    {
                      	    	    if ( state.backtracking==0 ) {
  
                      	    	      														newCompositeNode(grammarAccess.getMemberAccess().getTypeParametersJvmTypeParameterParserRuleCall_2_1_5_1_2_1_0());
                      	    	      													
                      	    	    }
                      	    	    pushFollow(FOLLOW_54);
                      	    	    lv_typeParameters_43_0=ruleJvmTypeParameter();
  
                      	    	    state._fsp--;
                      	    	    if (state.failed) return current;
                      	    	    if ( state.backtracking==0 ) {
  
                      	    	      														if (current==null) {
                      	    	      															current = createModelElementForParent(grammarAccess.getMemberRule());
                      	    	      														}
                      	    	      														add(
                      	    	      															current,
                      	    	      															"typeParameters",
                      	    	      															lv_typeParameters_43_0,
                      	    	      															"org.eclipse.xtext.xbase.Xtype.JvmTypeParameter");
                      	    	      														afterParserOrEnumRuleCall();
                      	    	      													
                      	    	    }
  
                      	    	    }
  
  
                      	    	    }
  
  
                      	    	    }
                      	    	    break;
  
                      	    	default :
                      	    	    break loop151;
                      	        }
                      	    } while (true);
  
  
                      	    }
  
  
                      	    }
  
                      	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getMemberAccess().getUnorderedGroup_2_1_5());
  
                      	    }
  
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop152;
                          }
                      } while (true);
  
  
                      }
  
  
                      }
  
                      getUnorderedGroupHelper().leave(grammarAccess.getMemberAccess().getUnorderedGroup_2_1_5());
  
                      }
  
                      // InternalSARL.g:5317:5: ( (lv_expression_44_0= ruleXBlockExpression ) )
                      // InternalSARL.g:5318:6: (lv_expression_44_0= ruleXBlockExpression )
                      {
                      // InternalSARL.g:5318:6: (lv_expression_44_0= ruleXBlockExpression )
                      // InternalSARL.g:5319:7: lv_expression_44_0= ruleXBlockExpression
                      {
                      if ( state.backtracking==0 ) {
  
                        							newCompositeNode(grammarAccess.getMemberAccess().getExpressionXBlockExpressionParserRuleCall_2_1_6_0());
                        						
                      }
                      pushFollow(FOLLOW_2);
                      lv_expression_44_0=ruleXBlockExpression();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        							if (current==null) {
                        								current = createModelElementForParent(grammarAccess.getMemberRule());
                        							}
                        							set(
                        								current,
                        								"expression",
                        								lv_expression_44_0,
                        								"org.eclipse.xtext.xbase.Xbase.XBlockExpression");
                        							afterParserOrEnumRuleCall();
                        						
                      }
  
                      }
  
  
                      }
  
  
                      }
  
  
                      }
                      break;
                  case 3 :
                      // InternalSARL.g:5338:4: ( () ( (lv_modifiers_46_0= ruleCommonModifier ) )* ( (lv_modifiers_47_0= ruleMethodModifier ) ) ( ( (lv_modifiers_48_0= ruleCommonModifier ) ) | ( (lv_modifiers_49_0= ruleMethodModifier ) ) )* (otherlv_50= '<' ( (lv_typeParameters_51_0= ruleJvmTypeParameter ) ) (otherlv_52= ',' ( (lv_typeParameters_53_0= ruleJvmTypeParameter ) ) )* otherlv_54= '>' )? ( (lv_name_55_0= ruleFunctionID ) ) (otherlv_56= '(' ( ( (lv_parameters_57_0= ruleParameter ) ) (otherlv_58= ',' ( (lv_parameters_59_0= ruleParameter ) ) )* )? otherlv_60= ')' )? (otherlv_61= ':' ( ( (lv_returnType_62_0= ruleTypeReferenceWithTypeArgs ) ) | ( (lv_returnType_63_0= ruleTypeReferenceNoTypeArgs ) ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_65= 'throws' ( (lv_exceptions_66_0= ruleJvmTypeReference ) ) (otherlv_67= ',' ( (lv_exceptions_68_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_69= 'fires' ( (lv_firedEvents_70_0= ruleJvmTypeReference ) ) (otherlv_71= ',' ( (lv_firedEvents_72_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_73= 'with' ( (lv_typeParameters_74_0= ruleJvmTypeParameter ) ) (otherlv_75= ',' ( (lv_typeParameters_76_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) ) ( ( (lv_expression_77_0= ruleXBlockExpression ) ) | otherlv_78= ';' )? )
                      {
                      // InternalSARL.g:5338:4: ( () ( (lv_modifiers_46_0= ruleCommonModifier ) )* ( (lv_modifiers_47_0= ruleMethodModifier ) ) ( ( (lv_modifiers_48_0= ruleCommonModifier ) ) | ( (lv_modifiers_49_0= ruleMethodModifier ) ) )* (otherlv_50= '<' ( (lv_typeParameters_51_0= ruleJvmTypeParameter ) ) (otherlv_52= ',' ( (lv_typeParameters_53_0= ruleJvmTypeParameter ) ) )* otherlv_54= '>' )? ( (lv_name_55_0= ruleFunctionID ) ) (otherlv_56= '(' ( ( (lv_parameters_57_0= ruleParameter ) ) (otherlv_58= ',' ( (lv_parameters_59_0= ruleParameter ) ) )* )? otherlv_60= ')' )? (otherlv_61= ':' ( ( (lv_returnType_62_0= ruleTypeReferenceWithTypeArgs ) ) | ( (lv_returnType_63_0= ruleTypeReferenceNoTypeArgs ) ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_65= 'throws' ( (lv_exceptions_66_0= ruleJvmTypeReference ) ) (otherlv_67= ',' ( (lv_exceptions_68_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_69= 'fires' ( (lv_firedEvents_70_0= ruleJvmTypeReference ) ) (otherlv_71= ',' ( (lv_firedEvents_72_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_73= 'with' ( (lv_typeParameters_74_0= ruleJvmTypeParameter ) ) (otherlv_75= ',' ( (lv_typeParameters_76_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) ) ( ( (lv_expression_77_0= ruleXBlockExpression ) ) | otherlv_78= ';' )? )
                      // InternalSARL.g:5339:5: () ( (lv_modifiers_46_0= ruleCommonModifier ) )* ( (lv_modifiers_47_0= ruleMethodModifier ) ) ( ( (lv_modifiers_48_0= ruleCommonModifier ) ) | ( (lv_modifiers_49_0= ruleMethodModifier ) ) )* (otherlv_50= '<' ( (lv_typeParameters_51_0= ruleJvmTypeParameter ) ) (otherlv_52= ',' ( (lv_typeParameters_53_0= ruleJvmTypeParameter ) ) )* otherlv_54= '>' )? ( (lv_name_55_0= ruleFunctionID ) ) (otherlv_56= '(' ( ( (lv_parameters_57_0= ruleParameter ) ) (otherlv_58= ',' ( (lv_parameters_59_0= ruleParameter ) ) )* )? otherlv_60= ')' )? (otherlv_61= ':' ( ( (lv_returnType_62_0= ruleTypeReferenceWithTypeArgs ) ) | ( (lv_returnType_63_0= ruleTypeReferenceNoTypeArgs ) ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_65= 'throws' ( (lv_exceptions_66_0= ruleJvmTypeReference ) ) (otherlv_67= ',' ( (lv_exceptions_68_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_69= 'fires' ( (lv_firedEvents_70_0= ruleJvmTypeReference ) ) (otherlv_71= ',' ( (lv_firedEvents_72_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_73= 'with' ( (lv_typeParameters_74_0= ruleJvmTypeParameter ) ) (otherlv_75= ',' ( (lv_typeParameters_76_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) ) ( ( (lv_expression_77_0= ruleXBlockExpression ) ) | otherlv_78= ';' )?
                      {
                      // InternalSARL.g:5339:5: ()
                      // InternalSARL.g:5340:6: 
                      {
                      if ( state.backtracking==0 ) {
  
                        						current = forceCreateModelElementAndSet(
                        							grammarAccess.getMemberAccess().getSarlActionAnnotationInfoAction_2_2_0(),
                        							current);
                        					
                      }
  
                      }
  
                      // InternalSARL.g:5346:5: ( (lv_modifiers_46_0= ruleCommonModifier ) )*
                      loop153:
                      do {
                          int alt153=2;
                          int LA153_0 = input.LA(1);
  
                          if ( (LA153_0==25||(LA153_0>=78 && LA153_0<=89)) ) {
                              alt153=1;
                          }
  
  
                          switch (alt153) {
                      	case 1 :
                      	    // InternalSARL.g:5347:6: (lv_modifiers_46_0= ruleCommonModifier )
                      	    {
                      	    // InternalSARL.g:5347:6: (lv_modifiers_46_0= ruleCommonModifier )
                      	    // InternalSARL.g:5348:7: lv_modifiers_46_0= ruleCommonModifier
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      							newCompositeNode(grammarAccess.getMemberAccess().getModifiersCommonModifierParserRuleCall_2_2_1_0());
                      	      						
                      	    }
                      	    pushFollow(FOLLOW_55);
                      	    lv_modifiers_46_0=ruleCommonModifier();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      							if (current==null) {
                      	      								current = createModelElementForParent(grammarAccess.getMemberRule());
                      	      							}
                      	      							add(
                      	      								current,
                      	      								"modifiers",
                      	      								lv_modifiers_46_0,
                      	      								"org.eclipse.xtend.core.Xtend.CommonModifier");
                      	      							afterParserOrEnumRuleCall();
                      	      						
                      	    }
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop153;
                          }
                      } while (true);
  
                      // InternalSARL.g:5365:5: ( (lv_modifiers_47_0= ruleMethodModifier ) )
                      // InternalSARL.g:5366:6: (lv_modifiers_47_0= ruleMethodModifier )
                      {
                      // InternalSARL.g:5366:6: (lv_modifiers_47_0= ruleMethodModifier )
                      // InternalSARL.g:5367:7: lv_modifiers_47_0= ruleMethodModifier
                      {
                      if ( state.backtracking==0 ) {
  
                        							newCompositeNode(grammarAccess.getMemberAccess().getModifiersMethodModifierParserRuleCall_2_2_2_0());
                        						
                      }
                      pushFollow(FOLLOW_65);
                      lv_modifiers_47_0=ruleMethodModifier();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        							if (current==null) {
                        								current = createModelElementForParent(grammarAccess.getMemberRule());
                        							}
                        							add(
                        								current,
                        								"modifiers",
                        								lv_modifiers_47_0,
                        								"org.eclipse.xtend.core.Xtend.MethodModifier");
                        							afterParserOrEnumRuleCall();
                        						
                      }
  
                      }
  
  
                      }
  
                      // InternalSARL.g:5384:5: ( ( (lv_modifiers_48_0= ruleCommonModifier ) ) | ( (lv_modifiers_49_0= ruleMethodModifier ) ) )*
                      loop154:
                      do {
                          int alt154=3;
                          int LA154_0 = input.LA(1);
  
                          if ( (LA154_0==25||(LA154_0>=78 && LA154_0<=89)) ) {
                              alt154=1;
                          }
                          else if ( ((LA154_0>=90 && LA154_0<=91)) ) {
                              alt154=2;
                          }
  
  
                          switch (alt154) {
                      	case 1 :
                      	    // InternalSARL.g:5385:6: ( (lv_modifiers_48_0= ruleCommonModifier ) )
                      	    {
                      	    // InternalSARL.g:5385:6: ( (lv_modifiers_48_0= ruleCommonModifier ) )
                      	    // InternalSARL.g:5386:7: (lv_modifiers_48_0= ruleCommonModifier )
                      	    {
                      	    // InternalSARL.g:5386:7: (lv_modifiers_48_0= ruleCommonModifier )
                      	    // InternalSARL.g:5387:8: lv_modifiers_48_0= ruleCommonModifier
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      								newCompositeNode(grammarAccess.getMemberAccess().getModifiersCommonModifierParserRuleCall_2_2_3_0_0());
                      	      							
                      	    }
                      	    pushFollow(FOLLOW_65);
                      	    lv_modifiers_48_0=ruleCommonModifier();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      								if (current==null) {
                      	      									current = createModelElementForParent(grammarAccess.getMemberRule());
                      	      								}
                      	      								add(
                      	      									current,
                      	      									"modifiers",
                      	      									lv_modifiers_48_0,
                      	      									"org.eclipse.xtend.core.Xtend.CommonModifier");
                      	      								afterParserOrEnumRuleCall();
                      	      							
                      	    }
  
                      	    }
  
  
                      	    }
  
  
                      	    }
                      	    break;
                      	case 2 :
                      	    // InternalSARL.g:5405:6: ( (lv_modifiers_49_0= ruleMethodModifier ) )
                      	    {
                      	    // InternalSARL.g:5405:6: ( (lv_modifiers_49_0= ruleMethodModifier ) )
                      	    // InternalSARL.g:5406:7: (lv_modifiers_49_0= ruleMethodModifier )
                      	    {
                      	    // InternalSARL.g:5406:7: (lv_modifiers_49_0= ruleMethodModifier )
                      	    // InternalSARL.g:5407:8: lv_modifiers_49_0= ruleMethodModifier
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      								newCompositeNode(grammarAccess.getMemberAccess().getModifiersMethodModifierParserRuleCall_2_2_3_1_0());
                      	      							
                      	    }
                      	    pushFollow(FOLLOW_65);
                      	    lv_modifiers_49_0=ruleMethodModifier();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      								if (current==null) {
                      	      									current = createModelElementForParent(grammarAccess.getMemberRule());
                      	      								}
                      	      								add(
                      	      									current,
                      	      									"modifiers",
                      	      									lv_modifiers_49_0,
                      	      									"org.eclipse.xtend.core.Xtend.MethodModifier");
                      	      								afterParserOrEnumRuleCall();
                      	      							
                      	    }
  
                      	    }
  
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop154;
                          }
                      } while (true);
  
                      // InternalSARL.g:5425:5: (otherlv_50= '<' ( (lv_typeParameters_51_0= ruleJvmTypeParameter ) ) (otherlv_52= ',' ( (lv_typeParameters_53_0= ruleJvmTypeParameter ) ) )* otherlv_54= '>' )?
                      int alt156=2;
                      int LA156_0 = input.LA(1);
  
                      if ( (LA156_0==40) ) {
                          int LA156_1 = input.LA(2);
  
                          if ( (LA156_1==RULE_ID||(LA156_1>=92 && LA156_1<=95)) ) {
                              alt156=1;
                          }
                          else if ( (LA156_1==44) ) {
                              int LA156_4 = input.LA(3);
  
                              if ( (LA156_4==28||LA156_4==32||LA156_4==41) ) {
                                  alt156=1;
                              }
                          }
                      }
                      switch (alt156) {
                          case 1 :
                              // InternalSARL.g:5426:6: otherlv_50= '<' ( (lv_typeParameters_51_0= ruleJvmTypeParameter ) ) (otherlv_52= ',' ( (lv_typeParameters_53_0= ruleJvmTypeParameter ) ) )* otherlv_54= '>'
                              {
                              otherlv_50=(Token)match(input,40,FOLLOW_3); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_50, grammarAccess.getMemberAccess().getLessThanSignKeyword_2_2_4_0());
                                					
                              }
                              // InternalSARL.g:5430:6: ( (lv_typeParameters_51_0= ruleJvmTypeParameter ) )
                              // InternalSARL.g:5431:7: (lv_typeParameters_51_0= ruleJvmTypeParameter )
                              {
                              // InternalSARL.g:5431:7: (lv_typeParameters_51_0= ruleJvmTypeParameter )
                              // InternalSARL.g:5432:8: lv_typeParameters_51_0= ruleJvmTypeParameter
                              {
                              if ( state.backtracking==0 ) {
  
                                								newCompositeNode(grammarAccess.getMemberAccess().getTypeParametersJvmTypeParameterParserRuleCall_2_2_4_1_0());
                                							
                              }
                              pushFollow(FOLLOW_28);
                              lv_typeParameters_51_0=ruleJvmTypeParameter();
  
                              state._fsp--;
                              if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                								if (current==null) {
                                									current = createModelElementForParent(grammarAccess.getMemberRule());
                                								}
                                								add(
                                									current,
                                									"typeParameters",
                                									lv_typeParameters_51_0,
                                									"org.eclipse.xtext.xbase.Xtype.JvmTypeParameter");
                                								afterParserOrEnumRuleCall();
                                							
                              }
  
                              }
  
  
                              }
  
                              // InternalSARL.g:5449:6: (otherlv_52= ',' ( (lv_typeParameters_53_0= ruleJvmTypeParameter ) ) )*
                              loop155:
                              do {
                                  int alt155=2;
                                  int LA155_0 = input.LA(1);
  
                                  if ( (LA155_0==32) ) {
                                      alt155=1;
                                  }
  
  
                                  switch (alt155) {
                              	case 1 :
                              	    // InternalSARL.g:5450:7: otherlv_52= ',' ( (lv_typeParameters_53_0= ruleJvmTypeParameter ) )
                              	    {
                              	    otherlv_52=(Token)match(input,32,FOLLOW_3); if (state.failed) return current;
                              	    if ( state.backtracking==0 ) {
  
                              	      							newLeafNode(otherlv_52, grammarAccess.getMemberAccess().getCommaKeyword_2_2_4_2_0());
                              	      						
                              	    }
                              	    // InternalSARL.g:5454:7: ( (lv_typeParameters_53_0= ruleJvmTypeParameter ) )
                              	    // InternalSARL.g:5455:8: (lv_typeParameters_53_0= ruleJvmTypeParameter )
                              	    {
                              	    // InternalSARL.g:5455:8: (lv_typeParameters_53_0= ruleJvmTypeParameter )
                              	    // InternalSARL.g:5456:9: lv_typeParameters_53_0= ruleJvmTypeParameter
                              	    {
                              	    if ( state.backtracking==0 ) {
  
                              	      									newCompositeNode(grammarAccess.getMemberAccess().getTypeParametersJvmTypeParameterParserRuleCall_2_2_4_2_1_0());
                              	      								
                              	    }
                              	    pushFollow(FOLLOW_28);
                              	    lv_typeParameters_53_0=ruleJvmTypeParameter();
  
                              	    state._fsp--;
                              	    if (state.failed) return current;
                              	    if ( state.backtracking==0 ) {
  
                              	      									if (current==null) {
                              	      										current = createModelElementForParent(grammarAccess.getMemberRule());
                              	      									}
                              	      									add(
                              	      										current,
                              	      										"typeParameters",
                              	      										lv_typeParameters_53_0,
                              	      										"org.eclipse.xtext.xbase.Xtype.JvmTypeParameter");
                              	      									afterParserOrEnumRuleCall();
                              	      								
                              	    }
  
                              	    }
  
  
                              	    }
  
  
                              	    }
                              	    break;
  
                              	default :
                              	    break loop155;
                                  }
                              } while (true);
  
                              otherlv_54=(Token)match(input,41,FOLLOW_56); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_54, grammarAccess.getMemberAccess().getGreaterThanSignKeyword_2_2_4_3());
                                					
                              }
  
                              }
                              break;
  
                      }
  
                      // InternalSARL.g:5479:5: ( (lv_name_55_0= ruleFunctionID ) )
                      // InternalSARL.g:5480:6: (lv_name_55_0= ruleFunctionID )
                      {
                      // InternalSARL.g:5480:6: (lv_name_55_0= ruleFunctionID )
                      // InternalSARL.g:5481:7: lv_name_55_0= ruleFunctionID
                      {
                      if ( state.backtracking==0 ) {
  
                        							newCompositeNode(grammarAccess.getMemberAccess().getNameFunctionIDParserRuleCall_2_2_5_0());
                        						
                      }
                      pushFollow(FOLLOW_57);
                      lv_name_55_0=ruleFunctionID();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        							if (current==null) {
                        								current = createModelElementForParent(grammarAccess.getMemberRule());
                        							}
                        							set(
                        								current,
                        								"name",
                        								lv_name_55_0,
                        								"org.eclipse.xtend.core.Xtend.FunctionID");
                        							afterParserOrEnumRuleCall();
                        						
                      }
  
                      }
  
  
                      }
  
                      // InternalSARL.g:5498:5: (otherlv_56= '(' ( ( (lv_parameters_57_0= ruleParameter ) ) (otherlv_58= ',' ( (lv_parameters_59_0= ruleParameter ) ) )* )? otherlv_60= ')' )?
                      int alt159=2;
                      int LA159_0 = input.LA(1);
  
                      if ( (LA159_0==49) ) {
                          alt159=1;
                      }
                      switch (alt159) {
                          case 1 :
                              // InternalSARL.g:5499:6: otherlv_56= '(' ( ( (lv_parameters_57_0= ruleParameter ) ) (otherlv_58= ',' ( (lv_parameters_59_0= ruleParameter ) ) )* )? otherlv_60= ')'
                              {
                              otherlv_56=(Token)match(input,49,FOLLOW_50); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_56, grammarAccess.getMemberAccess().getLeftParenthesisKeyword_2_2_6_0());
                                					
                              }
                              // InternalSARL.g:5503:6: ( ( (lv_parameters_57_0= ruleParameter ) ) (otherlv_58= ',' ( (lv_parameters_59_0= ruleParameter ) ) )* )?
                              int alt158=2;
                              int LA158_0 = input.LA(1);
  
                              if ( (LA158_0==RULE_ID||(LA158_0>=44 && LA158_0<=45)||(LA158_0>=92 && LA158_0<=95)||LA158_0==105) ) {
                                  alt158=1;
                              }
                              switch (alt158) {
                                  case 1 :
                                      // InternalSARL.g:5504:7: ( (lv_parameters_57_0= ruleParameter ) ) (otherlv_58= ',' ( (lv_parameters_59_0= ruleParameter ) ) )*
                                      {
                                      // InternalSARL.g:5504:7: ( (lv_parameters_57_0= ruleParameter ) )
                                      // InternalSARL.g:5505:8: (lv_parameters_57_0= ruleParameter )
                                      {
                                      // InternalSARL.g:5505:8: (lv_parameters_57_0= ruleParameter )
                                      // InternalSARL.g:5506:9: lv_parameters_57_0= ruleParameter
                                      {
                                      if ( state.backtracking==0 ) {
  
                                        									newCompositeNode(grammarAccess.getMemberAccess().getParametersParameterParserRuleCall_2_2_6_1_0_0());
                                        								
                                      }
                                      pushFollow(FOLLOW_51);
                                      lv_parameters_57_0=ruleParameter();
  
                                      state._fsp--;
                                      if (state.failed) return current;
                                      if ( state.backtracking==0 ) {
  
                                        									if (current==null) {
                                        										current = createModelElementForParent(grammarAccess.getMemberRule());
                                        									}
                                        									add(
                                        										current,
                                        										"parameters",
                                        										lv_parameters_57_0,
                                        										"io.sarl.lang.SARL.Parameter");
                                        									afterParserOrEnumRuleCall();
                                        								
                                      }
  
                                      }
  
  
                                      }
  
                                      // InternalSARL.g:5523:7: (otherlv_58= ',' ( (lv_parameters_59_0= ruleParameter ) ) )*
                                      loop157:
                                      do {
                                          int alt157=2;
                                          int LA157_0 = input.LA(1);
  
                                          if ( (LA157_0==32) ) {
                                              alt157=1;
                                          }
  
  
                                          switch (alt157) {
                                      	case 1 :
                                      	    // InternalSARL.g:5524:8: otherlv_58= ',' ( (lv_parameters_59_0= ruleParameter ) )
                                      	    {
                                      	    otherlv_58=(Token)match(input,32,FOLLOW_52); if (state.failed) return current;
                                      	    if ( state.backtracking==0 ) {
  
                                      	      								newLeafNode(otherlv_58, grammarAccess.getMemberAccess().getCommaKeyword_2_2_6_1_1_0());
                                      	      							
                                      	    }
                                      	    // InternalSARL.g:5528:8: ( (lv_parameters_59_0= ruleParameter ) )
                                      	    // InternalSARL.g:5529:9: (lv_parameters_59_0= ruleParameter )
                                      	    {
                                      	    // InternalSARL.g:5529:9: (lv_parameters_59_0= ruleParameter )
                                      	    // InternalSARL.g:5530:10: lv_parameters_59_0= ruleParameter
                                      	    {
                                      	    if ( state.backtracking==0 ) {
  
                                      	      										newCompositeNode(grammarAccess.getMemberAccess().getParametersParameterParserRuleCall_2_2_6_1_1_1_0());
                                      	      									
                                      	    }
                                      	    pushFollow(FOLLOW_51);
                                      	    lv_parameters_59_0=ruleParameter();
  
                                      	    state._fsp--;
                                      	    if (state.failed) return current;
                                      	    if ( state.backtracking==0 ) {
  
                                      	      										if (current==null) {
                                      	      											current = createModelElementForParent(grammarAccess.getMemberRule());
                                      	      										}
                                      	      										add(
                                      	      											current,
                                      	      											"parameters",
                                      	      											lv_parameters_59_0,
                                      	      											"io.sarl.lang.SARL.Parameter");
                                      	      										afterParserOrEnumRuleCall();
                                      	      									
                                      	    }
  
                                      	    }
  
  
                                      	    }
  
  
                                      	    }
                                      	    break;
  
                                      	default :
                                      	    break loop157;
                                          }
                                      } while (true);
  
  
                                      }
                                      break;
  
                              }
  
                              otherlv_60=(Token)match(input,50,FOLLOW_58); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_60, grammarAccess.getMemberAccess().getRightParenthesisKeyword_2_2_6_2());
                                					
                              }
  
                              }
                              break;
  
                      }
  
                      // InternalSARL.g:5554:5: (otherlv_61= ':' ( ( (lv_returnType_62_0= ruleTypeReferenceWithTypeArgs ) ) | ( (lv_returnType_63_0= ruleTypeReferenceNoTypeArgs ) ) ) )?
                      int alt161=2;
                      int LA161_0 = input.LA(1);
  
                      if ( (LA161_0==46) ) {
                          alt161=1;
                      }
                      switch (alt161) {
                          case 1 :
                              // InternalSARL.g:5555:6: otherlv_61= ':' ( ( (lv_returnType_62_0= ruleTypeReferenceWithTypeArgs ) ) | ( (lv_returnType_63_0= ruleTypeReferenceNoTypeArgs ) ) )
                              {
                              otherlv_61=(Token)match(input,46,FOLLOW_41); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_61, grammarAccess.getMemberAccess().getColonKeyword_2_2_7_0());
                                					
                              }
                              // InternalSARL.g:5559:6: ( ( (lv_returnType_62_0= ruleTypeReferenceWithTypeArgs ) ) | ( (lv_returnType_63_0= ruleTypeReferenceNoTypeArgs ) ) )
                              int alt160=2;
                              alt160 = dfa160.predict(input);
                              switch (alt160) {
                                  case 1 :
                                      // InternalSARL.g:5560:7: ( (lv_returnType_62_0= ruleTypeReferenceWithTypeArgs ) )
                                      {
                                      // InternalSARL.g:5560:7: ( (lv_returnType_62_0= ruleTypeReferenceWithTypeArgs ) )
                                      // InternalSARL.g:5561:8: (lv_returnType_62_0= ruleTypeReferenceWithTypeArgs )
                                      {
                                      // InternalSARL.g:5561:8: (lv_returnType_62_0= ruleTypeReferenceWithTypeArgs )
                                      // InternalSARL.g:5562:9: lv_returnType_62_0= ruleTypeReferenceWithTypeArgs
                                      {
                                      if ( state.backtracking==0 ) {
  
                                        									newCompositeNode(grammarAccess.getMemberAccess().getReturnTypeTypeReferenceWithTypeArgsParserRuleCall_2_2_7_1_0_0());
                                        								
                                      }
                                      pushFollow(FOLLOW_59);
                                      lv_returnType_62_0=ruleTypeReferenceWithTypeArgs();
  
                                      state._fsp--;
                                      if (state.failed) return current;
                                      if ( state.backtracking==0 ) {
  
                                        									if (current==null) {
                                        										current = createModelElementForParent(grammarAccess.getMemberRule());
                                        									}
                                        									set(
                                        										current,
                                        										"returnType",
                                        										lv_returnType_62_0,
                                        										"org.eclipse.xtend.core.Xtend.TypeReferenceWithTypeArgs");
                                        									afterParserOrEnumRuleCall();
                                        								
                                      }
  
                                      }
  
  
                                      }
  
  
                                      }
                                      break;
                                  case 2 :
                                      // InternalSARL.g:5580:7: ( (lv_returnType_63_0= ruleTypeReferenceNoTypeArgs ) )
                                      {
                                      // InternalSARL.g:5580:7: ( (lv_returnType_63_0= ruleTypeReferenceNoTypeArgs ) )
                                      // InternalSARL.g:5581:8: (lv_returnType_63_0= ruleTypeReferenceNoTypeArgs )
                                      {
                                      // InternalSARL.g:5581:8: (lv_returnType_63_0= ruleTypeReferenceNoTypeArgs )
                                      // InternalSARL.g:5582:9: lv_returnType_63_0= ruleTypeReferenceNoTypeArgs
                                      {
                                      if ( state.backtracking==0 ) {
  
                                        									newCompositeNode(grammarAccess.getMemberAccess().getReturnTypeTypeReferenceNoTypeArgsParserRuleCall_2_2_7_1_1_0());
                                        								
                                      }
                                      pushFollow(FOLLOW_59);
                                      lv_returnType_63_0=ruleTypeReferenceNoTypeArgs();
  
                                      state._fsp--;
                                      if (state.failed) return current;
                                      if ( state.backtracking==0 ) {
  
                                        									if (current==null) {
                                        										current = createModelElementForParent(grammarAccess.getMemberRule());
                                        									}
                                        									set(
                                        										current,
                                        										"returnType",
                                        										lv_returnType_63_0,
                                        										"org.eclipse.xtend.core.Xtend.TypeReferenceNoTypeArgs");
                                        									afterParserOrEnumRuleCall();
                                        								
                                      }
  
                                      }
  
  
                                      }
  
  
                                      }
                                      break;
  
                              }
  
  
                              }
                              break;
  
                      }
  
                      // InternalSARL.g:5601:5: ( ( ( ( ({...}? => ( ({...}? => (otherlv_65= 'throws' ( (lv_exceptions_66_0= ruleJvmTypeReference ) ) (otherlv_67= ',' ( (lv_exceptions_68_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_69= 'fires' ( (lv_firedEvents_70_0= ruleJvmTypeReference ) ) (otherlv_71= ',' ( (lv_firedEvents_72_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_73= 'with' ( (lv_typeParameters_74_0= ruleJvmTypeParameter ) ) (otherlv_75= ',' ( (lv_typeParameters_76_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) )
                      // InternalSARL.g:5602:6: ( ( ( ({...}? => ( ({...}? => (otherlv_65= 'throws' ( (lv_exceptions_66_0= ruleJvmTypeReference ) ) (otherlv_67= ',' ( (lv_exceptions_68_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_69= 'fires' ( (lv_firedEvents_70_0= ruleJvmTypeReference ) ) (otherlv_71= ',' ( (lv_firedEvents_72_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_73= 'with' ( (lv_typeParameters_74_0= ruleJvmTypeParameter ) ) (otherlv_75= ',' ( (lv_typeParameters_76_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) )
                      {
                      // InternalSARL.g:5602:6: ( ( ( ({...}? => ( ({...}? => (otherlv_65= 'throws' ( (lv_exceptions_66_0= ruleJvmTypeReference ) ) (otherlv_67= ',' ( (lv_exceptions_68_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_69= 'fires' ( (lv_firedEvents_70_0= ruleJvmTypeReference ) ) (otherlv_71= ',' ( (lv_firedEvents_72_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_73= 'with' ( (lv_typeParameters_74_0= ruleJvmTypeParameter ) ) (otherlv_75= ',' ( (lv_typeParameters_76_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) )
                      // InternalSARL.g:5603:7: ( ( ({...}? => ( ({...}? => (otherlv_65= 'throws' ( (lv_exceptions_66_0= ruleJvmTypeReference ) ) (otherlv_67= ',' ( (lv_exceptions_68_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_69= 'fires' ( (lv_firedEvents_70_0= ruleJvmTypeReference ) ) (otherlv_71= ',' ( (lv_firedEvents_72_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_73= 'with' ( (lv_typeParameters_74_0= ruleJvmTypeParameter ) ) (otherlv_75= ',' ( (lv_typeParameters_76_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* )
                      {
                      getUnorderedGroupHelper().enter(grammarAccess.getMemberAccess().getUnorderedGroup_2_2_8());
                      // InternalSARL.g:5606:7: ( ( ({...}? => ( ({...}? => (otherlv_65= 'throws' ( (lv_exceptions_66_0= ruleJvmTypeReference ) ) (otherlv_67= ',' ( (lv_exceptions_68_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_69= 'fires' ( (lv_firedEvents_70_0= ruleJvmTypeReference ) ) (otherlv_71= ',' ( (lv_firedEvents_72_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_73= 'with' ( (lv_typeParameters_74_0= ruleJvmTypeParameter ) ) (otherlv_75= ',' ( (lv_typeParameters_76_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* )
                      // InternalSARL.g:5607:8: ( ({...}? => ( ({...}? => (otherlv_65= 'throws' ( (lv_exceptions_66_0= ruleJvmTypeReference ) ) (otherlv_67= ',' ( (lv_exceptions_68_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_69= 'fires' ( (lv_firedEvents_70_0= ruleJvmTypeReference ) ) (otherlv_71= ',' ( (lv_firedEvents_72_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_73= 'with' ( (lv_typeParameters_74_0= ruleJvmTypeParameter ) ) (otherlv_75= ',' ( (lv_typeParameters_76_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )*
                      {
                      // InternalSARL.g:5607:8: ( ({...}? => ( ({...}? => (otherlv_65= 'throws' ( (lv_exceptions_66_0= ruleJvmTypeReference ) ) (otherlv_67= ',' ( (lv_exceptions_68_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_69= 'fires' ( (lv_firedEvents_70_0= ruleJvmTypeReference ) ) (otherlv_71= ',' ( (lv_firedEvents_72_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_73= 'with' ( (lv_typeParameters_74_0= ruleJvmTypeParameter ) ) (otherlv_75= ',' ( (lv_typeParameters_76_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )*
                      loop165:
                      do {
                          int alt165=4;
                          int LA165_0 = input.LA(1);
  
                          if ( LA165_0 == 51 && getUnorderedGroupHelper().canSelect(grammarAccess.getMemberAccess().getUnorderedGroup_2_2_8(), 0) ) {
                              alt165=1;
                          }
                          else if ( LA165_0 == 53 && getUnorderedGroupHelper().canSelect(grammarAccess.getMemberAccess().getUnorderedGroup_2_2_8(), 1) ) {
                              alt165=2;
                          }
                          else if ( LA165_0 == 52 && getUnorderedGroupHelper().canSelect(grammarAccess.getMemberAccess().getUnorderedGroup_2_2_8(), 2) ) {
                              alt165=3;
                          }
  
  
                          switch (alt165) {
                      	case 1 :
                      	    // InternalSARL.g:5608:6: ({...}? => ( ({...}? => (otherlv_65= 'throws' ( (lv_exceptions_66_0= ruleJvmTypeReference ) ) (otherlv_67= ',' ( (lv_exceptions_68_0= ruleJvmTypeReference ) ) )* ) ) ) )
                      	    {
                      	    // InternalSARL.g:5608:6: ({...}? => ( ({...}? => (otherlv_65= 'throws' ( (lv_exceptions_66_0= ruleJvmTypeReference ) ) (otherlv_67= ',' ( (lv_exceptions_68_0= ruleJvmTypeReference ) ) )* ) ) ) )
                      	    // InternalSARL.g:5609:7: {...}? => ( ({...}? => (otherlv_65= 'throws' ( (lv_exceptions_66_0= ruleJvmTypeReference ) ) (otherlv_67= ',' ( (lv_exceptions_68_0= ruleJvmTypeReference ) ) )* ) ) )
                      	    {
                      	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getMemberAccess().getUnorderedGroup_2_2_8(), 0) ) {
                      	        if (state.backtracking>0) {state.failed=true; return current;}
                      	        throw new FailedPredicateException(input, "ruleMember", "getUnorderedGroupHelper().canSelect(grammarAccess.getMemberAccess().getUnorderedGroup_2_2_8(), 0)");
                      	    }
                      	    // InternalSARL.g:5609:109: ( ({...}? => (otherlv_65= 'throws' ( (lv_exceptions_66_0= ruleJvmTypeReference ) ) (otherlv_67= ',' ( (lv_exceptions_68_0= ruleJvmTypeReference ) ) )* ) ) )
                      	    // InternalSARL.g:5610:8: ({...}? => (otherlv_65= 'throws' ( (lv_exceptions_66_0= ruleJvmTypeReference ) ) (otherlv_67= ',' ( (lv_exceptions_68_0= ruleJvmTypeReference ) ) )* ) )
                      	    {
                      	    getUnorderedGroupHelper().select(grammarAccess.getMemberAccess().getUnorderedGroup_2_2_8(), 0);
                      	    // InternalSARL.g:5613:11: ({...}? => (otherlv_65= 'throws' ( (lv_exceptions_66_0= ruleJvmTypeReference ) ) (otherlv_67= ',' ( (lv_exceptions_68_0= ruleJvmTypeReference ) ) )* ) )
                      	    // InternalSARL.g:5613:12: {...}? => (otherlv_65= 'throws' ( (lv_exceptions_66_0= ruleJvmTypeReference ) ) (otherlv_67= ',' ( (lv_exceptions_68_0= ruleJvmTypeReference ) ) )* )
                      	    {
                      	    if ( !((true)) ) {
                      	        if (state.backtracking>0) {state.failed=true; return current;}
                      	        throw new FailedPredicateException(input, "ruleMember", "true");
                      	    }
                      	    // InternalSARL.g:5613:21: (otherlv_65= 'throws' ( (lv_exceptions_66_0= ruleJvmTypeReference ) ) (otherlv_67= ',' ( (lv_exceptions_68_0= ruleJvmTypeReference ) ) )* )
                      	    // InternalSARL.g:5613:22: otherlv_65= 'throws' ( (lv_exceptions_66_0= ruleJvmTypeReference ) ) (otherlv_67= ',' ( (lv_exceptions_68_0= ruleJvmTypeReference ) ) )*
                      	    {
                      	    otherlv_65=(Token)match(input,51,FOLLOW_41); if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      											newLeafNode(otherlv_65, grammarAccess.getMemberAccess().getThrowsKeyword_2_2_8_0_0());
                      	      										
                      	    }
                      	    // InternalSARL.g:5617:11: ( (lv_exceptions_66_0= ruleJvmTypeReference ) )
                      	    // InternalSARL.g:5618:12: (lv_exceptions_66_0= ruleJvmTypeReference )
                      	    {
                      	    // InternalSARL.g:5618:12: (lv_exceptions_66_0= ruleJvmTypeReference )
                      	    // InternalSARL.g:5619:13: lv_exceptions_66_0= ruleJvmTypeReference
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      													newCompositeNode(grammarAccess.getMemberAccess().getExceptionsJvmTypeReferenceParserRuleCall_2_2_8_0_1_0());
                      	      												
                      	    }
                      	    pushFollow(FOLLOW_60);
                      	    lv_exceptions_66_0=ruleJvmTypeReference();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      													if (current==null) {
                      	      														current = createModelElementForParent(grammarAccess.getMemberRule());
                      	      													}
                      	      													add(
                      	      														current,
                      	      														"exceptions",
                      	      														lv_exceptions_66_0,
                      	      														"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
                      	      													afterParserOrEnumRuleCall();
                      	      												
                      	    }
  
                      	    }
  
  
                      	    }
  
                      	    // InternalSARL.g:5636:11: (otherlv_67= ',' ( (lv_exceptions_68_0= ruleJvmTypeReference ) ) )*
                      	    loop162:
                      	    do {
                      	        int alt162=2;
                      	        int LA162_0 = input.LA(1);
  
                      	        if ( (LA162_0==32) ) {
                      	            alt162=1;
                      	        }
  
  
                      	        switch (alt162) {
                      	    	case 1 :
                      	    	    // InternalSARL.g:5637:12: otherlv_67= ',' ( (lv_exceptions_68_0= ruleJvmTypeReference ) )
                      	    	    {
                      	    	    otherlv_67=(Token)match(input,32,FOLLOW_41); if (state.failed) return current;
                      	    	    if ( state.backtracking==0 ) {
  
                      	    	      												newLeafNode(otherlv_67, grammarAccess.getMemberAccess().getCommaKeyword_2_2_8_0_2_0());
                      	    	      											
                      	    	    }
                      	    	    // InternalSARL.g:5641:12: ( (lv_exceptions_68_0= ruleJvmTypeReference ) )
                      	    	    // InternalSARL.g:5642:13: (lv_exceptions_68_0= ruleJvmTypeReference )
                      	    	    {
                      	    	    // InternalSARL.g:5642:13: (lv_exceptions_68_0= ruleJvmTypeReference )
                      	    	    // InternalSARL.g:5643:14: lv_exceptions_68_0= ruleJvmTypeReference
                      	    	    {
                      	    	    if ( state.backtracking==0 ) {
  
                      	    	      														newCompositeNode(grammarAccess.getMemberAccess().getExceptionsJvmTypeReferenceParserRuleCall_2_2_8_0_2_1_0());
                      	    	      													
                      	    	    }
                      	    	    pushFollow(FOLLOW_60);
                      	    	    lv_exceptions_68_0=ruleJvmTypeReference();
  
                      	    	    state._fsp--;
                      	    	    if (state.failed) return current;
                      	    	    if ( state.backtracking==0 ) {
  
                      	    	      														if (current==null) {
                      	    	      															current = createModelElementForParent(grammarAccess.getMemberRule());
                      	    	      														}
                      	    	      														add(
                      	    	      															current,
                      	    	      															"exceptions",
                      	    	      															lv_exceptions_68_0,
                      	    	      															"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
                      	    	      														afterParserOrEnumRuleCall();
                      	    	      													
                      	    	    }
  
                      	    	    }
  
  
                      	    	    }
  
  
                      	    	    }
                      	    	    break;
  
                      	    	default :
                      	    	    break loop162;
                      	        }
                      	    } while (true);
  
  
                      	    }
  
  
                      	    }
  
                      	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getMemberAccess().getUnorderedGroup_2_2_8());
  
                      	    }
  
  
                      	    }
  
  
                      	    }
                      	    break;
                      	case 2 :
                      	    // InternalSARL.g:5667:6: ({...}? => ( ({...}? => (otherlv_69= 'fires' ( (lv_firedEvents_70_0= ruleJvmTypeReference ) ) (otherlv_71= ',' ( (lv_firedEvents_72_0= ruleJvmTypeReference ) ) )* ) ) ) )
                      	    {
                      	    // InternalSARL.g:5667:6: ({...}? => ( ({...}? => (otherlv_69= 'fires' ( (lv_firedEvents_70_0= ruleJvmTypeReference ) ) (otherlv_71= ',' ( (lv_firedEvents_72_0= ruleJvmTypeReference ) ) )* ) ) ) )
                      	    // InternalSARL.g:5668:7: {...}? => ( ({...}? => (otherlv_69= 'fires' ( (lv_firedEvents_70_0= ruleJvmTypeReference ) ) (otherlv_71= ',' ( (lv_firedEvents_72_0= ruleJvmTypeReference ) ) )* ) ) )
                      	    {
                      	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getMemberAccess().getUnorderedGroup_2_2_8(), 1) ) {
                      	        if (state.backtracking>0) {state.failed=true; return current;}
                      	        throw new FailedPredicateException(input, "ruleMember", "getUnorderedGroupHelper().canSelect(grammarAccess.getMemberAccess().getUnorderedGroup_2_2_8(), 1)");
                      	    }
                      	    // InternalSARL.g:5668:109: ( ({...}? => (otherlv_69= 'fires' ( (lv_firedEvents_70_0= ruleJvmTypeReference ) ) (otherlv_71= ',' ( (lv_firedEvents_72_0= ruleJvmTypeReference ) ) )* ) ) )
                      	    // InternalSARL.g:5669:8: ({...}? => (otherlv_69= 'fires' ( (lv_firedEvents_70_0= ruleJvmTypeReference ) ) (otherlv_71= ',' ( (lv_firedEvents_72_0= ruleJvmTypeReference ) ) )* ) )
                      	    {
                      	    getUnorderedGroupHelper().select(grammarAccess.getMemberAccess().getUnorderedGroup_2_2_8(), 1);
                      	    // InternalSARL.g:5672:11: ({...}? => (otherlv_69= 'fires' ( (lv_firedEvents_70_0= ruleJvmTypeReference ) ) (otherlv_71= ',' ( (lv_firedEvents_72_0= ruleJvmTypeReference ) ) )* ) )
                      	    // InternalSARL.g:5672:12: {...}? => (otherlv_69= 'fires' ( (lv_firedEvents_70_0= ruleJvmTypeReference ) ) (otherlv_71= ',' ( (lv_firedEvents_72_0= ruleJvmTypeReference ) ) )* )
                      	    {
                      	    if ( !((true)) ) {
                      	        if (state.backtracking>0) {state.failed=true; return current;}
                      	        throw new FailedPredicateException(input, "ruleMember", "true");
                      	    }
                      	    // InternalSARL.g:5672:21: (otherlv_69= 'fires' ( (lv_firedEvents_70_0= ruleJvmTypeReference ) ) (otherlv_71= ',' ( (lv_firedEvents_72_0= ruleJvmTypeReference ) ) )* )
                      	    // InternalSARL.g:5672:22: otherlv_69= 'fires' ( (lv_firedEvents_70_0= ruleJvmTypeReference ) ) (otherlv_71= ',' ( (lv_firedEvents_72_0= ruleJvmTypeReference ) ) )*
                      	    {
                      	    otherlv_69=(Token)match(input,53,FOLLOW_41); if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      											newLeafNode(otherlv_69, grammarAccess.getMemberAccess().getFiresKeyword_2_2_8_1_0());
                      	      										
                      	    }
                      	    // InternalSARL.g:5676:11: ( (lv_firedEvents_70_0= ruleJvmTypeReference ) )
                      	    // InternalSARL.g:5677:12: (lv_firedEvents_70_0= ruleJvmTypeReference )
                      	    {
                      	    // InternalSARL.g:5677:12: (lv_firedEvents_70_0= ruleJvmTypeReference )
                      	    // InternalSARL.g:5678:13: lv_firedEvents_70_0= ruleJvmTypeReference
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      													newCompositeNode(grammarAccess.getMemberAccess().getFiredEventsJvmTypeReferenceParserRuleCall_2_2_8_1_1_0());
                      	      												
                      	    }
                      	    pushFollow(FOLLOW_60);
                      	    lv_firedEvents_70_0=ruleJvmTypeReference();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      													if (current==null) {
                      	      														current = createModelElementForParent(grammarAccess.getMemberRule());
                      	      													}
                      	      													add(
                      	      														current,
                      	      														"firedEvents",
                      	      														lv_firedEvents_70_0,
                      	      														"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
                      	      													afterParserOrEnumRuleCall();
                      	      												
                      	    }
  
                      	    }
  
  
                      	    }
  
                      	    // InternalSARL.g:5695:11: (otherlv_71= ',' ( (lv_firedEvents_72_0= ruleJvmTypeReference ) ) )*
                      	    loop163:
                      	    do {
                      	        int alt163=2;
                      	        int LA163_0 = input.LA(1);
  
                      	        if ( (LA163_0==32) ) {
                      	            alt163=1;
                      	        }
  
  
                      	        switch (alt163) {
                      	    	case 1 :
                      	    	    // InternalSARL.g:5696:12: otherlv_71= ',' ( (lv_firedEvents_72_0= ruleJvmTypeReference ) )
                      	    	    {
                      	    	    otherlv_71=(Token)match(input,32,FOLLOW_41); if (state.failed) return current;
                      	    	    if ( state.backtracking==0 ) {
  
                      	    	      												newLeafNode(otherlv_71, grammarAccess.getMemberAccess().getCommaKeyword_2_2_8_1_2_0());
                      	    	      											
                      	    	    }
                      	    	    // InternalSARL.g:5700:12: ( (lv_firedEvents_72_0= ruleJvmTypeReference ) )
                      	    	    // InternalSARL.g:5701:13: (lv_firedEvents_72_0= ruleJvmTypeReference )
                      	    	    {
                      	    	    // InternalSARL.g:5701:13: (lv_firedEvents_72_0= ruleJvmTypeReference )
                      	    	    // InternalSARL.g:5702:14: lv_firedEvents_72_0= ruleJvmTypeReference
                      	    	    {
                      	    	    if ( state.backtracking==0 ) {
  
                      	    	      														newCompositeNode(grammarAccess.getMemberAccess().getFiredEventsJvmTypeReferenceParserRuleCall_2_2_8_1_2_1_0());
                      	    	      													
                      	    	    }
                      	    	    pushFollow(FOLLOW_60);
                      	    	    lv_firedEvents_72_0=ruleJvmTypeReference();
  
                      	    	    state._fsp--;
                      	    	    if (state.failed) return current;
                      	    	    if ( state.backtracking==0 ) {
  
                      	    	      														if (current==null) {
                      	    	      															current = createModelElementForParent(grammarAccess.getMemberRule());
                      	    	      														}
                      	    	      														add(
                      	    	      															current,
                      	    	      															"firedEvents",
                      	    	      															lv_firedEvents_72_0,
                      	    	      															"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
                      	    	      														afterParserOrEnumRuleCall();
                      	    	      													
                      	    	    }
  
                      	    	    }
  
  
                      	    	    }
  
  
                      	    	    }
                      	    	    break;
  
                      	    	default :
                      	    	    break loop163;
                      	        }
                      	    } while (true);
  
  
                      	    }
  
  
                      	    }
  
                      	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getMemberAccess().getUnorderedGroup_2_2_8());
  
                      	    }
  
  
                      	    }
  
  
                      	    }
                      	    break;
                      	case 3 :
                      	    // InternalSARL.g:5726:6: ({...}? => ( ({...}? => (otherlv_73= 'with' ( (lv_typeParameters_74_0= ruleJvmTypeParameter ) ) (otherlv_75= ',' ( (lv_typeParameters_76_0= ruleJvmTypeParameter ) ) )* ) ) ) )
                      	    {
                      	    // InternalSARL.g:5726:6: ({...}? => ( ({...}? => (otherlv_73= 'with' ( (lv_typeParameters_74_0= ruleJvmTypeParameter ) ) (otherlv_75= ',' ( (lv_typeParameters_76_0= ruleJvmTypeParameter ) ) )* ) ) ) )
                      	    // InternalSARL.g:5727:7: {...}? => ( ({...}? => (otherlv_73= 'with' ( (lv_typeParameters_74_0= ruleJvmTypeParameter ) ) (otherlv_75= ',' ( (lv_typeParameters_76_0= ruleJvmTypeParameter ) ) )* ) ) )
                      	    {
                      	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getMemberAccess().getUnorderedGroup_2_2_8(), 2) ) {
                      	        if (state.backtracking>0) {state.failed=true; return current;}
                      	        throw new FailedPredicateException(input, "ruleMember", "getUnorderedGroupHelper().canSelect(grammarAccess.getMemberAccess().getUnorderedGroup_2_2_8(), 2)");
                      	    }
                      	    // InternalSARL.g:5727:109: ( ({...}? => (otherlv_73= 'with' ( (lv_typeParameters_74_0= ruleJvmTypeParameter ) ) (otherlv_75= ',' ( (lv_typeParameters_76_0= ruleJvmTypeParameter ) ) )* ) ) )
                      	    // InternalSARL.g:5728:8: ({...}? => (otherlv_73= 'with' ( (lv_typeParameters_74_0= ruleJvmTypeParameter ) ) (otherlv_75= ',' ( (lv_typeParameters_76_0= ruleJvmTypeParameter ) ) )* ) )
                      	    {
                      	    getUnorderedGroupHelper().select(grammarAccess.getMemberAccess().getUnorderedGroup_2_2_8(), 2);
                      	    // InternalSARL.g:5731:11: ({...}? => (otherlv_73= 'with' ( (lv_typeParameters_74_0= ruleJvmTypeParameter ) ) (otherlv_75= ',' ( (lv_typeParameters_76_0= ruleJvmTypeParameter ) ) )* ) )
                      	    // InternalSARL.g:5731:12: {...}? => (otherlv_73= 'with' ( (lv_typeParameters_74_0= ruleJvmTypeParameter ) ) (otherlv_75= ',' ( (lv_typeParameters_76_0= ruleJvmTypeParameter ) ) )* )
                      	    {
                      	    if ( !((true)) ) {
                      	        if (state.backtracking>0) {state.failed=true; return current;}
                      	        throw new FailedPredicateException(input, "ruleMember", "true");
                      	    }
                      	    // InternalSARL.g:5731:21: (otherlv_73= 'with' ( (lv_typeParameters_74_0= ruleJvmTypeParameter ) ) (otherlv_75= ',' ( (lv_typeParameters_76_0= ruleJvmTypeParameter ) ) )* )
                      	    // InternalSARL.g:5731:22: otherlv_73= 'with' ( (lv_typeParameters_74_0= ruleJvmTypeParameter ) ) (otherlv_75= ',' ( (lv_typeParameters_76_0= ruleJvmTypeParameter ) ) )*
                      	    {
                      	    otherlv_73=(Token)match(input,52,FOLLOW_3); if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      											newLeafNode(otherlv_73, grammarAccess.getMemberAccess().getWithKeyword_2_2_8_2_0());
                      	      										
                      	    }
                      	    // InternalSARL.g:5735:11: ( (lv_typeParameters_74_0= ruleJvmTypeParameter ) )
                      	    // InternalSARL.g:5736:12: (lv_typeParameters_74_0= ruleJvmTypeParameter )
                      	    {
                      	    // InternalSARL.g:5736:12: (lv_typeParameters_74_0= ruleJvmTypeParameter )
                      	    // InternalSARL.g:5737:13: lv_typeParameters_74_0= ruleJvmTypeParameter
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      													newCompositeNode(grammarAccess.getMemberAccess().getTypeParametersJvmTypeParameterParserRuleCall_2_2_8_2_1_0());
                      	      												
                      	    }
                      	    pushFollow(FOLLOW_60);
                      	    lv_typeParameters_74_0=ruleJvmTypeParameter();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      													if (current==null) {
                      	      														current = createModelElementForParent(grammarAccess.getMemberRule());
                      	      													}
                      	      													add(
                      	      														current,
                      	      														"typeParameters",
                      	      														lv_typeParameters_74_0,
                      	      														"org.eclipse.xtext.xbase.Xtype.JvmTypeParameter");
                      	      													afterParserOrEnumRuleCall();
                      	      												
                      	    }
  
                      	    }
  
  
                      	    }
  
                      	    // InternalSARL.g:5754:11: (otherlv_75= ',' ( (lv_typeParameters_76_0= ruleJvmTypeParameter ) ) )*
                      	    loop164:
                      	    do {
                      	        int alt164=2;
                      	        int LA164_0 = input.LA(1);
  
                      	        if ( (LA164_0==32) ) {
                      	            alt164=1;
                      	        }
  
  
                      	        switch (alt164) {
                      	    	case 1 :
                      	    	    // InternalSARL.g:5755:12: otherlv_75= ',' ( (lv_typeParameters_76_0= ruleJvmTypeParameter ) )
                      	    	    {
                      	    	    otherlv_75=(Token)match(input,32,FOLLOW_3); if (state.failed) return current;
                      	    	    if ( state.backtracking==0 ) {
  
                      	    	      												newLeafNode(otherlv_75, grammarAccess.getMemberAccess().getCommaKeyword_2_2_8_2_2_0());
                      	    	      											
                      	    	    }
                      	    	    // InternalSARL.g:5759:12: ( (lv_typeParameters_76_0= ruleJvmTypeParameter ) )
                      	    	    // InternalSARL.g:5760:13: (lv_typeParameters_76_0= ruleJvmTypeParameter )
                      	    	    {
                      	    	    // InternalSARL.g:5760:13: (lv_typeParameters_76_0= ruleJvmTypeParameter )
                      	    	    // InternalSARL.g:5761:14: lv_typeParameters_76_0= ruleJvmTypeParameter
                      	    	    {
                      	    	    if ( state.backtracking==0 ) {
  
                      	    	      														newCompositeNode(grammarAccess.getMemberAccess().getTypeParametersJvmTypeParameterParserRuleCall_2_2_8_2_2_1_0());
                      	    	      													
                      	    	    }
                      	    	    pushFollow(FOLLOW_60);
                      	    	    lv_typeParameters_76_0=ruleJvmTypeParameter();
  
                      	    	    state._fsp--;
                      	    	    if (state.failed) return current;
                      	    	    if ( state.backtracking==0 ) {
  
                      	    	      														if (current==null) {
                      	    	      															current = createModelElementForParent(grammarAccess.getMemberRule());
                      	    	      														}
                      	    	      														add(
                      	    	      															current,
                      	    	      															"typeParameters",
                      	    	      															lv_typeParameters_76_0,
                      	    	      															"org.eclipse.xtext.xbase.Xtype.JvmTypeParameter");
                      	    	      														afterParserOrEnumRuleCall();
                      	    	      													
                      	    	    }
  
                      	    	    }
  
  
                      	    	    }
  
  
                      	    	    }
                      	    	    break;
  
                      	    	default :
                      	    	    break loop164;
                      	        }
                      	    } while (true);
  
  
                      	    }
  
  
                      	    }
  
                      	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getMemberAccess().getUnorderedGroup_2_2_8());
  
                      	    }
  
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop165;
                          }
                      } while (true);
  
  
                      }
  
  
                      }
  
                      getUnorderedGroupHelper().leave(grammarAccess.getMemberAccess().getUnorderedGroup_2_2_8());
  
                      }
  
                      // InternalSARL.g:5792:5: ( ( (lv_expression_77_0= ruleXBlockExpression ) ) | otherlv_78= ';' )?
                      int alt166=3;
                      int LA166_0 = input.LA(1);
  
                      if ( (LA166_0==29) ) {
                          alt166=1;
                      }
                      else if ( (LA166_0==26) ) {
                          alt166=2;
                      }
                      switch (alt166) {
                          case 1 :
                              // InternalSARL.g:5793:6: ( (lv_expression_77_0= ruleXBlockExpression ) )
                              {
                              // InternalSARL.g:5793:6: ( (lv_expression_77_0= ruleXBlockExpression ) )
                              // InternalSARL.g:5794:7: (lv_expression_77_0= ruleXBlockExpression )
                              {
                              // InternalSARL.g:5794:7: (lv_expression_77_0= ruleXBlockExpression )
                              // InternalSARL.g:5795:8: lv_expression_77_0= ruleXBlockExpression
                              {
                              if ( state.backtracking==0 ) {
  
                                								newCompositeNode(grammarAccess.getMemberAccess().getExpressionXBlockExpressionParserRuleCall_2_2_9_0_0());
                                							
                              }
                              pushFollow(FOLLOW_2);
                              lv_expression_77_0=ruleXBlockExpression();
  
                              state._fsp--;
                              if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                								if (current==null) {
                                									current = createModelElementForParent(grammarAccess.getMemberRule());
                                								}
                                								set(
                                									current,
                                									"expression",
                                									lv_expression_77_0,
                                									"org.eclipse.xtext.xbase.Xbase.XBlockExpression");
                                								afterParserOrEnumRuleCall();
                                							
                              }
  
                              }
  
  
                              }
  
  
                              }
                              break;
                          case 2 :
                              // InternalSARL.g:5813:6: otherlv_78= ';'
                              {
                              otherlv_78=(Token)match(input,26,FOLLOW_2); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_78, grammarAccess.getMemberAccess().getSemicolonKeyword_2_2_9_1());
                                					
                              }
  
                              }
                              break;
  
                      }
  
  
                      }
  
  
                      }
                      break;
                  case 4 :
                      // InternalSARL.g:5820:4: ( () ( (lv_modifiers_80_0= ruleCommonModifier ) )* otherlv_81= 'class' ( (lv_name_82_0= ruleValidID ) ) (otherlv_83= '<' ( (lv_typeParameters_84_0= ruleJvmTypeParameter ) ) (otherlv_85= ',' ( (lv_typeParameters_86_0= ruleJvmTypeParameter ) ) )* otherlv_87= '>' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_89= 'extends' ( (lv_extends_90_0= ruleJvmParameterizedTypeReference ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_91= 'implements' ( (lv_implements_92_0= ruleJvmParameterizedTypeReference ) ) (otherlv_93= ',' ( (lv_implements_94_0= ruleJvmParameterizedTypeReference ) ) )* ) ) ) ) )* ) ) ) otherlv_95= '{' ( (lv_members_96_0= ruleMember ) )* otherlv_97= '}' )
                      {
                      // InternalSARL.g:5820:4: ( () ( (lv_modifiers_80_0= ruleCommonModifier ) )* otherlv_81= 'class' ( (lv_name_82_0= ruleValidID ) ) (otherlv_83= '<' ( (lv_typeParameters_84_0= ruleJvmTypeParameter ) ) (otherlv_85= ',' ( (lv_typeParameters_86_0= ruleJvmTypeParameter ) ) )* otherlv_87= '>' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_89= 'extends' ( (lv_extends_90_0= ruleJvmParameterizedTypeReference ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_91= 'implements' ( (lv_implements_92_0= ruleJvmParameterizedTypeReference ) ) (otherlv_93= ',' ( (lv_implements_94_0= ruleJvmParameterizedTypeReference ) ) )* ) ) ) ) )* ) ) ) otherlv_95= '{' ( (lv_members_96_0= ruleMember ) )* otherlv_97= '}' )
                      // InternalSARL.g:5821:5: () ( (lv_modifiers_80_0= ruleCommonModifier ) )* otherlv_81= 'class' ( (lv_name_82_0= ruleValidID ) ) (otherlv_83= '<' ( (lv_typeParameters_84_0= ruleJvmTypeParameter ) ) (otherlv_85= ',' ( (lv_typeParameters_86_0= ruleJvmTypeParameter ) ) )* otherlv_87= '>' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_89= 'extends' ( (lv_extends_90_0= ruleJvmParameterizedTypeReference ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_91= 'implements' ( (lv_implements_92_0= ruleJvmParameterizedTypeReference ) ) (otherlv_93= ',' ( (lv_implements_94_0= ruleJvmParameterizedTypeReference ) ) )* ) ) ) ) )* ) ) ) otherlv_95= '{' ( (lv_members_96_0= ruleMember ) )* otherlv_97= '}'
                      {
                      // InternalSARL.g:5821:5: ()
                      // InternalSARL.g:5822:6: 
                      {
                      if ( state.backtracking==0 ) {
  
                        						current = forceCreateModelElementAndSet(
                        							grammarAccess.getMemberAccess().getSarlClassAnnotationInfoAction_2_3_0(),
                        							current);
                        					
                      }
  
                      }
  
                      // InternalSARL.g:5828:5: ( (lv_modifiers_80_0= ruleCommonModifier ) )*
                      loop167:
                      do {
                          int alt167=2;
                          int LA167_0 = input.LA(1);
  
                          if ( (LA167_0==25||(LA167_0>=78 && LA167_0<=89)) ) {
                              alt167=1;
                          }
  
  
                          switch (alt167) {
                      	case 1 :
                      	    // InternalSARL.g:5829:6: (lv_modifiers_80_0= ruleCommonModifier )
                      	    {
                      	    // InternalSARL.g:5829:6: (lv_modifiers_80_0= ruleCommonModifier )
                      	    // InternalSARL.g:5830:7: lv_modifiers_80_0= ruleCommonModifier
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      							newCompositeNode(grammarAccess.getMemberAccess().getModifiersCommonModifierParserRuleCall_2_3_1_0());
                      	      						
                      	    }
                      	    pushFollow(FOLLOW_26);
                      	    lv_modifiers_80_0=ruleCommonModifier();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      							if (current==null) {
                      	      								current = createModelElementForParent(grammarAccess.getMemberRule());
                      	      							}
                      	      							add(
                      	      								current,
                      	      								"modifiers",
                      	      								lv_modifiers_80_0,
                      	      								"org.eclipse.xtend.core.Xtend.CommonModifier");
                      	      							afterParserOrEnumRuleCall();
                      	      						
                      	    }
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop167;
                          }
                      } while (true);
  
                      otherlv_81=(Token)match(input,39,FOLLOW_3); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					newLeafNode(otherlv_81, grammarAccess.getMemberAccess().getClassKeyword_2_3_2());
                        				
                      }
                      // InternalSARL.g:5851:5: ( (lv_name_82_0= ruleValidID ) )
                      // InternalSARL.g:5852:6: (lv_name_82_0= ruleValidID )
                      {
                      // InternalSARL.g:5852:6: (lv_name_82_0= ruleValidID )
                      // InternalSARL.g:5853:7: lv_name_82_0= ruleValidID
                      {
                      if ( state.backtracking==0 ) {
  
                        							newCompositeNode(grammarAccess.getMemberAccess().getNameValidIDParserRuleCall_2_3_3_0());
                        						
                      }
                      pushFollow(FOLLOW_27);
                      lv_name_82_0=ruleValidID();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        							if (current==null) {
                        								current = createModelElementForParent(grammarAccess.getMemberRule());
                        							}
                        							set(
                        								current,
                        								"name",
                        								lv_name_82_0,
                        								"org.eclipse.xtend.core.Xtend.ValidID");
                        							afterParserOrEnumRuleCall();
                        						
                      }
  
                      }
  
  
                      }
  
                      // InternalSARL.g:5870:5: (otherlv_83= '<' ( (lv_typeParameters_84_0= ruleJvmTypeParameter ) ) (otherlv_85= ',' ( (lv_typeParameters_86_0= ruleJvmTypeParameter ) ) )* otherlv_87= '>' )?
                      int alt169=2;
                      int LA169_0 = input.LA(1);
  
                      if ( (LA169_0==40) ) {
                          alt169=1;
                      }
                      switch (alt169) {
                          case 1 :
                              // InternalSARL.g:5871:6: otherlv_83= '<' ( (lv_typeParameters_84_0= ruleJvmTypeParameter ) ) (otherlv_85= ',' ( (lv_typeParameters_86_0= ruleJvmTypeParameter ) ) )* otherlv_87= '>'
                              {
                              otherlv_83=(Token)match(input,40,FOLLOW_3); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_83, grammarAccess.getMemberAccess().getLessThanSignKeyword_2_3_4_0());
                                					
                              }
                              // InternalSARL.g:5875:6: ( (lv_typeParameters_84_0= ruleJvmTypeParameter ) )
                              // InternalSARL.g:5876:7: (lv_typeParameters_84_0= ruleJvmTypeParameter )
                              {
                              // InternalSARL.g:5876:7: (lv_typeParameters_84_0= ruleJvmTypeParameter )
                              // InternalSARL.g:5877:8: lv_typeParameters_84_0= ruleJvmTypeParameter
                              {
                              if ( state.backtracking==0 ) {
  
                                								newCompositeNode(grammarAccess.getMemberAccess().getTypeParametersJvmTypeParameterParserRuleCall_2_3_4_1_0());
                                							
                              }
                              pushFollow(FOLLOW_28);
                              lv_typeParameters_84_0=ruleJvmTypeParameter();
  
                              state._fsp--;
                              if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                								if (current==null) {
                                									current = createModelElementForParent(grammarAccess.getMemberRule());
                                								}
                                								add(
                                									current,
                                									"typeParameters",
                                									lv_typeParameters_84_0,
                                									"org.eclipse.xtext.xbase.Xtype.JvmTypeParameter");
                                								afterParserOrEnumRuleCall();
                                							
                              }
  
                              }
  
  
                              }
  
                              // InternalSARL.g:5894:6: (otherlv_85= ',' ( (lv_typeParameters_86_0= ruleJvmTypeParameter ) ) )*
                              loop168:
                              do {
                                  int alt168=2;
                                  int LA168_0 = input.LA(1);
  
                                  if ( (LA168_0==32) ) {
                                      alt168=1;
                                  }
  
  
                                  switch (alt168) {
                              	case 1 :
                              	    // InternalSARL.g:5895:7: otherlv_85= ',' ( (lv_typeParameters_86_0= ruleJvmTypeParameter ) )
                              	    {
                              	    otherlv_85=(Token)match(input,32,FOLLOW_3); if (state.failed) return current;
                              	    if ( state.backtracking==0 ) {
  
                              	      							newLeafNode(otherlv_85, grammarAccess.getMemberAccess().getCommaKeyword_2_3_4_2_0());
                              	      						
                              	    }
                              	    // InternalSARL.g:5899:7: ( (lv_typeParameters_86_0= ruleJvmTypeParameter ) )
                              	    // InternalSARL.g:5900:8: (lv_typeParameters_86_0= ruleJvmTypeParameter )
                              	    {
                              	    // InternalSARL.g:5900:8: (lv_typeParameters_86_0= ruleJvmTypeParameter )
                              	    // InternalSARL.g:5901:9: lv_typeParameters_86_0= ruleJvmTypeParameter
                              	    {
                              	    if ( state.backtracking==0 ) {
  
                              	      									newCompositeNode(grammarAccess.getMemberAccess().getTypeParametersJvmTypeParameterParserRuleCall_2_3_4_2_1_0());
                              	      								
                              	    }
                              	    pushFollow(FOLLOW_28);
                              	    lv_typeParameters_86_0=ruleJvmTypeParameter();
  
                              	    state._fsp--;
                              	    if (state.failed) return current;
                              	    if ( state.backtracking==0 ) {
  
                              	      									if (current==null) {
                              	      										current = createModelElementForParent(grammarAccess.getMemberRule());
                              	      									}
                              	      									add(
                              	      										current,
                              	      										"typeParameters",
                              	      										lv_typeParameters_86_0,
                              	      										"org.eclipse.xtext.xbase.Xtype.JvmTypeParameter");
                              	      									afterParserOrEnumRuleCall();
                              	      								
                              	    }
  
                              	    }
  
  
                              	    }
  
  
                              	    }
                              	    break;
  
                              	default :
                              	    break loop168;
                                  }
                              } while (true);
  
                              otherlv_87=(Token)match(input,41,FOLLOW_21); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_87, grammarAccess.getMemberAccess().getGreaterThanSignKeyword_2_3_4_3());
                                					
                              }
  
                              }
                              break;
  
                      }
  
                      // InternalSARL.g:5924:5: ( ( ( ( ({...}? => ( ({...}? => (otherlv_89= 'extends' ( (lv_extends_90_0= ruleJvmParameterizedTypeReference ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_91= 'implements' ( (lv_implements_92_0= ruleJvmParameterizedTypeReference ) ) (otherlv_93= ',' ( (lv_implements_94_0= ruleJvmParameterizedTypeReference ) ) )* ) ) ) ) )* ) ) )
                      // InternalSARL.g:5925:6: ( ( ( ({...}? => ( ({...}? => (otherlv_89= 'extends' ( (lv_extends_90_0= ruleJvmParameterizedTypeReference ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_91= 'implements' ( (lv_implements_92_0= ruleJvmParameterizedTypeReference ) ) (otherlv_93= ',' ( (lv_implements_94_0= ruleJvmParameterizedTypeReference ) ) )* ) ) ) ) )* ) )
                      {
                      // InternalSARL.g:5925:6: ( ( ( ({...}? => ( ({...}? => (otherlv_89= 'extends' ( (lv_extends_90_0= ruleJvmParameterizedTypeReference ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_91= 'implements' ( (lv_implements_92_0= ruleJvmParameterizedTypeReference ) ) (otherlv_93= ',' ( (lv_implements_94_0= ruleJvmParameterizedTypeReference ) ) )* ) ) ) ) )* ) )
                      // InternalSARL.g:5926:7: ( ( ({...}? => ( ({...}? => (otherlv_89= 'extends' ( (lv_extends_90_0= ruleJvmParameterizedTypeReference ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_91= 'implements' ( (lv_implements_92_0= ruleJvmParameterizedTypeReference ) ) (otherlv_93= ',' ( (lv_implements_94_0= ruleJvmParameterizedTypeReference ) ) )* ) ) ) ) )* )
                      {
                      getUnorderedGroupHelper().enter(grammarAccess.getMemberAccess().getUnorderedGroup_2_3_5());
                      // InternalSARL.g:5929:7: ( ( ({...}? => ( ({...}? => (otherlv_89= 'extends' ( (lv_extends_90_0= ruleJvmParameterizedTypeReference ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_91= 'implements' ( (lv_implements_92_0= ruleJvmParameterizedTypeReference ) ) (otherlv_93= ',' ( (lv_implements_94_0= ruleJvmParameterizedTypeReference ) ) )* ) ) ) ) )* )
                      // InternalSARL.g:5930:8: ( ({...}? => ( ({...}? => (otherlv_89= 'extends' ( (lv_extends_90_0= ruleJvmParameterizedTypeReference ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_91= 'implements' ( (lv_implements_92_0= ruleJvmParameterizedTypeReference ) ) (otherlv_93= ',' ( (lv_implements_94_0= ruleJvmParameterizedTypeReference ) ) )* ) ) ) ) )*
                      {
                      // InternalSARL.g:5930:8: ( ({...}? => ( ({...}? => (otherlv_89= 'extends' ( (lv_extends_90_0= ruleJvmParameterizedTypeReference ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_91= 'implements' ( (lv_implements_92_0= ruleJvmParameterizedTypeReference ) ) (otherlv_93= ',' ( (lv_implements_94_0= ruleJvmParameterizedTypeReference ) ) )* ) ) ) ) )*
                      loop171:
                      do {
                          int alt171=3;
                          int LA171_0 = input.LA(1);
  
                          if ( LA171_0 == 28 && getUnorderedGroupHelper().canSelect(grammarAccess.getMemberAccess().getUnorderedGroup_2_3_5(), 0) ) {
                              alt171=1;
                          }
                          else if ( LA171_0 == 36 && getUnorderedGroupHelper().canSelect(grammarAccess.getMemberAccess().getUnorderedGroup_2_3_5(), 1) ) {
                              alt171=2;
                          }
  
  
                          switch (alt171) {
                      	case 1 :
                      	    // InternalSARL.g:5931:6: ({...}? => ( ({...}? => (otherlv_89= 'extends' ( (lv_extends_90_0= ruleJvmParameterizedTypeReference ) ) ) ) ) )
                      	    {
                      	    // InternalSARL.g:5931:6: ({...}? => ( ({...}? => (otherlv_89= 'extends' ( (lv_extends_90_0= ruleJvmParameterizedTypeReference ) ) ) ) ) )
                      	    // InternalSARL.g:5932:7: {...}? => ( ({...}? => (otherlv_89= 'extends' ( (lv_extends_90_0= ruleJvmParameterizedTypeReference ) ) ) ) )
                      	    {
                      	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getMemberAccess().getUnorderedGroup_2_3_5(), 0) ) {
                      	        if (state.backtracking>0) {state.failed=true; return current;}
                      	        throw new FailedPredicateException(input, "ruleMember", "getUnorderedGroupHelper().canSelect(grammarAccess.getMemberAccess().getUnorderedGroup_2_3_5(), 0)");
                      	    }
                      	    // InternalSARL.g:5932:109: ( ({...}? => (otherlv_89= 'extends' ( (lv_extends_90_0= ruleJvmParameterizedTypeReference ) ) ) ) )
                      	    // InternalSARL.g:5933:8: ({...}? => (otherlv_89= 'extends' ( (lv_extends_90_0= ruleJvmParameterizedTypeReference ) ) ) )
                      	    {
                      	    getUnorderedGroupHelper().select(grammarAccess.getMemberAccess().getUnorderedGroup_2_3_5(), 0);
                      	    // InternalSARL.g:5936:11: ({...}? => (otherlv_89= 'extends' ( (lv_extends_90_0= ruleJvmParameterizedTypeReference ) ) ) )
                      	    // InternalSARL.g:5936:12: {...}? => (otherlv_89= 'extends' ( (lv_extends_90_0= ruleJvmParameterizedTypeReference ) ) )
                      	    {
                      	    if ( !((true)) ) {
                      	        if (state.backtracking>0) {state.failed=true; return current;}
                      	        throw new FailedPredicateException(input, "ruleMember", "true");
                      	    }
                      	    // InternalSARL.g:5936:21: (otherlv_89= 'extends' ( (lv_extends_90_0= ruleJvmParameterizedTypeReference ) ) )
                      	    // InternalSARL.g:5936:22: otherlv_89= 'extends' ( (lv_extends_90_0= ruleJvmParameterizedTypeReference ) )
                      	    {
                      	    otherlv_89=(Token)match(input,28,FOLLOW_3); if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      											newLeafNode(otherlv_89, grammarAccess.getMemberAccess().getExtendsKeyword_2_3_5_0_0());
                      	      										
                      	    }
                      	    // InternalSARL.g:5940:11: ( (lv_extends_90_0= ruleJvmParameterizedTypeReference ) )
                      	    // InternalSARL.g:5941:12: (lv_extends_90_0= ruleJvmParameterizedTypeReference )
                      	    {
                      	    // InternalSARL.g:5941:12: (lv_extends_90_0= ruleJvmParameterizedTypeReference )
                      	    // InternalSARL.g:5942:13: lv_extends_90_0= ruleJvmParameterizedTypeReference
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      													newCompositeNode(grammarAccess.getMemberAccess().getExtendsJvmParameterizedTypeReferenceParserRuleCall_2_3_5_0_1_0());
                      	      												
                      	    }
                      	    pushFollow(FOLLOW_21);
                      	    lv_extends_90_0=ruleJvmParameterizedTypeReference();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      													if (current==null) {
                      	      														current = createModelElementForParent(grammarAccess.getMemberRule());
                      	      													}
                      	      													set(
                      	      														current,
                      	      														"extends",
                      	      														lv_extends_90_0,
                      	      														"org.eclipse.xtext.xbase.Xtype.JvmParameterizedTypeReference");
                      	      													afterParserOrEnumRuleCall();
                      	      												
                      	    }
  
                      	    }
  
  
                      	    }
  
  
                      	    }
  
  
                      	    }
  
                      	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getMemberAccess().getUnorderedGroup_2_3_5());
  
                      	    }
  
  
                      	    }
  
  
                      	    }
                      	    break;
                      	case 2 :
                      	    // InternalSARL.g:5965:6: ({...}? => ( ({...}? => (otherlv_91= 'implements' ( (lv_implements_92_0= ruleJvmParameterizedTypeReference ) ) (otherlv_93= ',' ( (lv_implements_94_0= ruleJvmParameterizedTypeReference ) ) )* ) ) ) )
                      	    {
                      	    // InternalSARL.g:5965:6: ({...}? => ( ({...}? => (otherlv_91= 'implements' ( (lv_implements_92_0= ruleJvmParameterizedTypeReference ) ) (otherlv_93= ',' ( (lv_implements_94_0= ruleJvmParameterizedTypeReference ) ) )* ) ) ) )
                      	    // InternalSARL.g:5966:7: {...}? => ( ({...}? => (otherlv_91= 'implements' ( (lv_implements_92_0= ruleJvmParameterizedTypeReference ) ) (otherlv_93= ',' ( (lv_implements_94_0= ruleJvmParameterizedTypeReference ) ) )* ) ) )
                      	    {
                      	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getMemberAccess().getUnorderedGroup_2_3_5(), 1) ) {
                      	        if (state.backtracking>0) {state.failed=true; return current;}
                      	        throw new FailedPredicateException(input, "ruleMember", "getUnorderedGroupHelper().canSelect(grammarAccess.getMemberAccess().getUnorderedGroup_2_3_5(), 1)");
                      	    }
                      	    // InternalSARL.g:5966:109: ( ({...}? => (otherlv_91= 'implements' ( (lv_implements_92_0= ruleJvmParameterizedTypeReference ) ) (otherlv_93= ',' ( (lv_implements_94_0= ruleJvmParameterizedTypeReference ) ) )* ) ) )
                      	    // InternalSARL.g:5967:8: ({...}? => (otherlv_91= 'implements' ( (lv_implements_92_0= ruleJvmParameterizedTypeReference ) ) (otherlv_93= ',' ( (lv_implements_94_0= ruleJvmParameterizedTypeReference ) ) )* ) )
                      	    {
                      	    getUnorderedGroupHelper().select(grammarAccess.getMemberAccess().getUnorderedGroup_2_3_5(), 1);
                      	    // InternalSARL.g:5970:11: ({...}? => (otherlv_91= 'implements' ( (lv_implements_92_0= ruleJvmParameterizedTypeReference ) ) (otherlv_93= ',' ( (lv_implements_94_0= ruleJvmParameterizedTypeReference ) ) )* ) )
                      	    // InternalSARL.g:5970:12: {...}? => (otherlv_91= 'implements' ( (lv_implements_92_0= ruleJvmParameterizedTypeReference ) ) (otherlv_93= ',' ( (lv_implements_94_0= ruleJvmParameterizedTypeReference ) ) )* )
                      	    {
                      	    if ( !((true)) ) {
                      	        if (state.backtracking>0) {state.failed=true; return current;}
                      	        throw new FailedPredicateException(input, "ruleMember", "true");
                      	    }
                      	    // InternalSARL.g:5970:21: (otherlv_91= 'implements' ( (lv_implements_92_0= ruleJvmParameterizedTypeReference ) ) (otherlv_93= ',' ( (lv_implements_94_0= ruleJvmParameterizedTypeReference ) ) )* )
                      	    // InternalSARL.g:5970:22: otherlv_91= 'implements' ( (lv_implements_92_0= ruleJvmParameterizedTypeReference ) ) (otherlv_93= ',' ( (lv_implements_94_0= ruleJvmParameterizedTypeReference ) ) )*
                      	    {
                      	    otherlv_91=(Token)match(input,36,FOLLOW_3); if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      											newLeafNode(otherlv_91, grammarAccess.getMemberAccess().getImplementsKeyword_2_3_5_1_0());
                      	      										
                      	    }
                      	    // InternalSARL.g:5974:11: ( (lv_implements_92_0= ruleJvmParameterizedTypeReference ) )
                      	    // InternalSARL.g:5975:12: (lv_implements_92_0= ruleJvmParameterizedTypeReference )
                      	    {
                      	    // InternalSARL.g:5975:12: (lv_implements_92_0= ruleJvmParameterizedTypeReference )
                      	    // InternalSARL.g:5976:13: lv_implements_92_0= ruleJvmParameterizedTypeReference
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      													newCompositeNode(grammarAccess.getMemberAccess().getImplementsJvmParameterizedTypeReferenceParserRuleCall_2_3_5_1_1_0());
                      	      												
                      	    }
                      	    pushFollow(FOLLOW_22);
                      	    lv_implements_92_0=ruleJvmParameterizedTypeReference();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      													if (current==null) {
                      	      														current = createModelElementForParent(grammarAccess.getMemberRule());
                      	      													}
                      	      													add(
                      	      														current,
                      	      														"implements",
                      	      														lv_implements_92_0,
                      	      														"org.eclipse.xtext.xbase.Xtype.JvmParameterizedTypeReference");
                      	      													afterParserOrEnumRuleCall();
                      	      												
                      	    }
  
                      	    }
  
  
                      	    }
  
                      	    // InternalSARL.g:5993:11: (otherlv_93= ',' ( (lv_implements_94_0= ruleJvmParameterizedTypeReference ) ) )*
                      	    loop170:
                      	    do {
                      	        int alt170=2;
                      	        int LA170_0 = input.LA(1);
  
                      	        if ( (LA170_0==32) ) {
                      	            alt170=1;
                      	        }
  
  
                      	        switch (alt170) {
                      	    	case 1 :
                      	    	    // InternalSARL.g:5994:12: otherlv_93= ',' ( (lv_implements_94_0= ruleJvmParameterizedTypeReference ) )
                      	    	    {
                      	    	    otherlv_93=(Token)match(input,32,FOLLOW_3); if (state.failed) return current;
                      	    	    if ( state.backtracking==0 ) {
  
                      	    	      												newLeafNode(otherlv_93, grammarAccess.getMemberAccess().getCommaKeyword_2_3_5_1_2_0());
                      	    	      											
                      	    	    }
                      	    	    // InternalSARL.g:5998:12: ( (lv_implements_94_0= ruleJvmParameterizedTypeReference ) )
                      	    	    // InternalSARL.g:5999:13: (lv_implements_94_0= ruleJvmParameterizedTypeReference )
                      	    	    {
                      	    	    // InternalSARL.g:5999:13: (lv_implements_94_0= ruleJvmParameterizedTypeReference )
                      	    	    // InternalSARL.g:6000:14: lv_implements_94_0= ruleJvmParameterizedTypeReference
                      	    	    {
                      	    	    if ( state.backtracking==0 ) {
  
                      	    	      														newCompositeNode(grammarAccess.getMemberAccess().getImplementsJvmParameterizedTypeReferenceParserRuleCall_2_3_5_1_2_1_0());
                      	    	      													
                      	    	    }
                      	    	    pushFollow(FOLLOW_22);
                      	    	    lv_implements_94_0=ruleJvmParameterizedTypeReference();
  
                      	    	    state._fsp--;
                      	    	    if (state.failed) return current;
                      	    	    if ( state.backtracking==0 ) {
  
                      	    	      														if (current==null) {
                      	    	      															current = createModelElementForParent(grammarAccess.getMemberRule());
                      	    	      														}
                      	    	      														add(
                      	    	      															current,
                      	    	      															"implements",
                      	    	      															lv_implements_94_0,
                      	    	      															"org.eclipse.xtext.xbase.Xtype.JvmParameterizedTypeReference");
                      	    	      														afterParserOrEnumRuleCall();
                      	    	      													
                      	    	    }
  
                      	    	    }
  
  
                      	    	    }
  
  
                      	    	    }
                      	    	    break;
  
                      	    	default :
                      	    	    break loop170;
                      	        }
                      	    } while (true);
  
  
                      	    }
  
  
                      	    }
  
                      	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getMemberAccess().getUnorderedGroup_2_3_5());
  
                      	    }
  
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop171;
                          }
                      } while (true);
  
  
                      }
  
  
                      }
  
                      getUnorderedGroupHelper().leave(grammarAccess.getMemberAccess().getUnorderedGroup_2_3_5());
  
                      }
  
                      otherlv_95=(Token)match(input,29,FOLLOW_29); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					newLeafNode(otherlv_95, grammarAccess.getMemberAccess().getLeftCurlyBracketKeyword_2_3_6());
                        				
                      }
                      // InternalSARL.g:6035:5: ( (lv_members_96_0= ruleMember ) )*
                      loop172:
                      do {
                          int alt172=2;
                          int LA172_0 = input.LA(1);
  
                          if ( (LA172_0==25||LA172_0==39||(LA172_0>=42 && LA172_0<=45)||LA172_0==48||(LA172_0>=65 && LA172_0<=66)||(LA172_0>=78 && LA172_0<=91)||LA172_0==105) ) {
                              alt172=1;
                          }
  
  
                          switch (alt172) {
                      	case 1 :
                      	    // InternalSARL.g:6036:6: (lv_members_96_0= ruleMember )
                      	    {
                      	    // InternalSARL.g:6036:6: (lv_members_96_0= ruleMember )
                      	    // InternalSARL.g:6037:7: lv_members_96_0= ruleMember
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      							newCompositeNode(grammarAccess.getMemberAccess().getMembersMemberParserRuleCall_2_3_7_0());
                      	      						
                      	    }
                      	    pushFollow(FOLLOW_29);
                      	    lv_members_96_0=ruleMember();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      							if (current==null) {
                      	      								current = createModelElementForParent(grammarAccess.getMemberRule());
                      	      							}
                      	      							add(
                      	      								current,
                      	      								"members",
                      	      								lv_members_96_0,
                      	      								"io.sarl.lang.SARL.Member");
                      	      							afterParserOrEnumRuleCall();
                      	      						
                      	    }
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop172;
                          }
                      } while (true);
  
                      otherlv_97=(Token)match(input,30,FOLLOW_2); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					newLeafNode(otherlv_97, grammarAccess.getMemberAccess().getRightCurlyBracketKeyword_2_3_8());
                        				
                      }
  
                      }
  
  
                      }
                      break;
                  case 5 :
                      // InternalSARL.g:6060:4: ( () ( (lv_modifiers_99_0= ruleCommonModifier ) )* otherlv_100= 'interface' ( (lv_name_101_0= ruleValidID ) ) (otherlv_102= '<' ( (lv_typeParameters_103_0= ruleJvmTypeParameter ) ) (otherlv_104= ',' ( (lv_typeParameters_105_0= ruleJvmTypeParameter ) ) )* otherlv_106= '>' )? (otherlv_107= 'extends' ( (lv_extends_108_0= ruleJvmParameterizedTypeReference ) ) (otherlv_109= ',' ( (lv_extends_110_0= ruleJvmParameterizedTypeReference ) ) )* )? otherlv_111= '{' ( (lv_members_112_0= ruleMember ) )* otherlv_113= '}' )
                      {
                      // InternalSARL.g:6060:4: ( () ( (lv_modifiers_99_0= ruleCommonModifier ) )* otherlv_100= 'interface' ( (lv_name_101_0= ruleValidID ) ) (otherlv_102= '<' ( (lv_typeParameters_103_0= ruleJvmTypeParameter ) ) (otherlv_104= ',' ( (lv_typeParameters_105_0= ruleJvmTypeParameter ) ) )* otherlv_106= '>' )? (otherlv_107= 'extends' ( (lv_extends_108_0= ruleJvmParameterizedTypeReference ) ) (otherlv_109= ',' ( (lv_extends_110_0= ruleJvmParameterizedTypeReference ) ) )* )? otherlv_111= '{' ( (lv_members_112_0= ruleMember ) )* otherlv_113= '}' )
                      // InternalSARL.g:6061:5: () ( (lv_modifiers_99_0= ruleCommonModifier ) )* otherlv_100= 'interface' ( (lv_name_101_0= ruleValidID ) ) (otherlv_102= '<' ( (lv_typeParameters_103_0= ruleJvmTypeParameter ) ) (otherlv_104= ',' ( (lv_typeParameters_105_0= ruleJvmTypeParameter ) ) )* otherlv_106= '>' )? (otherlv_107= 'extends' ( (lv_extends_108_0= ruleJvmParameterizedTypeReference ) ) (otherlv_109= ',' ( (lv_extends_110_0= ruleJvmParameterizedTypeReference ) ) )* )? otherlv_111= '{' ( (lv_members_112_0= ruleMember ) )* otherlv_113= '}'
                      {
                      // InternalSARL.g:6061:5: ()
                      // InternalSARL.g:6062:6: 
                      {
                      if ( state.backtracking==0 ) {
  
                        						current = forceCreateModelElementAndSet(
                        							grammarAccess.getMemberAccess().getSarlInterfaceAnnotationInfoAction_2_4_0(),
                        							current);
                        					
                      }
  
                      }
  
                      // InternalSARL.g:6068:5: ( (lv_modifiers_99_0= ruleCommonModifier ) )*
                      loop173:
                      do {
                          int alt173=2;
                          int LA173_0 = input.LA(1);
  
                          if ( (LA173_0==25||(LA173_0>=78 && LA173_0<=89)) ) {
                              alt173=1;
                          }
  
  
                          switch (alt173) {
                      	case 1 :
                      	    // InternalSARL.g:6069:6: (lv_modifiers_99_0= ruleCommonModifier )
                      	    {
                      	    // InternalSARL.g:6069:6: (lv_modifiers_99_0= ruleCommonModifier )
                      	    // InternalSARL.g:6070:7: lv_modifiers_99_0= ruleCommonModifier
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      							newCompositeNode(grammarAccess.getMemberAccess().getModifiersCommonModifierParserRuleCall_2_4_1_0());
                      	      						
                      	    }
                      	    pushFollow(FOLLOW_30);
                      	    lv_modifiers_99_0=ruleCommonModifier();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      							if (current==null) {
                      	      								current = createModelElementForParent(grammarAccess.getMemberRule());
                      	      							}
                      	      							add(
                      	      								current,
                      	      								"modifiers",
                      	      								lv_modifiers_99_0,
                      	      								"org.eclipse.xtend.core.Xtend.CommonModifier");
                      	      							afterParserOrEnumRuleCall();
                      	      						
                      	    }
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop173;
                          }
                      } while (true);
  
                      otherlv_100=(Token)match(input,42,FOLLOW_3); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					newLeafNode(otherlv_100, grammarAccess.getMemberAccess().getInterfaceKeyword_2_4_2());
                        				
                      }
                      // InternalSARL.g:6091:5: ( (lv_name_101_0= ruleValidID ) )
                      // InternalSARL.g:6092:6: (lv_name_101_0= ruleValidID )
                      {
                      // InternalSARL.g:6092:6: (lv_name_101_0= ruleValidID )
                      // InternalSARL.g:6093:7: lv_name_101_0= ruleValidID
                      {
                      if ( state.backtracking==0 ) {
  
                        							newCompositeNode(grammarAccess.getMemberAccess().getNameValidIDParserRuleCall_2_4_3_0());
                        						
                      }
                      pushFollow(FOLLOW_31);
                      lv_name_101_0=ruleValidID();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        							if (current==null) {
                        								current = createModelElementForParent(grammarAccess.getMemberRule());
                        							}
                        							set(
                        								current,
                        								"name",
                        								lv_name_101_0,
                        								"org.eclipse.xtend.core.Xtend.ValidID");
                        							afterParserOrEnumRuleCall();
                        						
                      }
  
                      }
  
  
                      }
  
                      // InternalSARL.g:6110:5: (otherlv_102= '<' ( (lv_typeParameters_103_0= ruleJvmTypeParameter ) ) (otherlv_104= ',' ( (lv_typeParameters_105_0= ruleJvmTypeParameter ) ) )* otherlv_106= '>' )?
                      int alt175=2;
                      int LA175_0 = input.LA(1);
  
                      if ( (LA175_0==40) ) {
                          alt175=1;
                      }
                      switch (alt175) {
                          case 1 :
                              // InternalSARL.g:6111:6: otherlv_102= '<' ( (lv_typeParameters_103_0= ruleJvmTypeParameter ) ) (otherlv_104= ',' ( (lv_typeParameters_105_0= ruleJvmTypeParameter ) ) )* otherlv_106= '>'
                              {
                              otherlv_102=(Token)match(input,40,FOLLOW_3); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_102, grammarAccess.getMemberAccess().getLessThanSignKeyword_2_4_4_0());
                                					
                              }
                              // InternalSARL.g:6115:6: ( (lv_typeParameters_103_0= ruleJvmTypeParameter ) )
                              // InternalSARL.g:6116:7: (lv_typeParameters_103_0= ruleJvmTypeParameter )
                              {
                              // InternalSARL.g:6116:7: (lv_typeParameters_103_0= ruleJvmTypeParameter )
                              // InternalSARL.g:6117:8: lv_typeParameters_103_0= ruleJvmTypeParameter
                              {
                              if ( state.backtracking==0 ) {
  
                                								newCompositeNode(grammarAccess.getMemberAccess().getTypeParametersJvmTypeParameterParserRuleCall_2_4_4_1_0());
                                							
                              }
                              pushFollow(FOLLOW_28);
                              lv_typeParameters_103_0=ruleJvmTypeParameter();
  
                              state._fsp--;
                              if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                								if (current==null) {
                                									current = createModelElementForParent(grammarAccess.getMemberRule());
                                								}
                                								add(
                                									current,
                                									"typeParameters",
                                									lv_typeParameters_103_0,
                                									"org.eclipse.xtext.xbase.Xtype.JvmTypeParameter");
                                								afterParserOrEnumRuleCall();
                                							
                              }
  
                              }
  
  
                              }
  
                              // InternalSARL.g:6134:6: (otherlv_104= ',' ( (lv_typeParameters_105_0= ruleJvmTypeParameter ) ) )*
                              loop174:
                              do {
                                  int alt174=2;
                                  int LA174_0 = input.LA(1);
  
                                  if ( (LA174_0==32) ) {
                                      alt174=1;
                                  }
  
  
                                  switch (alt174) {
                              	case 1 :
                              	    // InternalSARL.g:6135:7: otherlv_104= ',' ( (lv_typeParameters_105_0= ruleJvmTypeParameter ) )
                              	    {
                              	    otherlv_104=(Token)match(input,32,FOLLOW_3); if (state.failed) return current;
                              	    if ( state.backtracking==0 ) {
  
                              	      							newLeafNode(otherlv_104, grammarAccess.getMemberAccess().getCommaKeyword_2_4_4_2_0());
                              	      						
                              	    }
                              	    // InternalSARL.g:6139:7: ( (lv_typeParameters_105_0= ruleJvmTypeParameter ) )
                              	    // InternalSARL.g:6140:8: (lv_typeParameters_105_0= ruleJvmTypeParameter )
                              	    {
                              	    // InternalSARL.g:6140:8: (lv_typeParameters_105_0= ruleJvmTypeParameter )
                              	    // InternalSARL.g:6141:9: lv_typeParameters_105_0= ruleJvmTypeParameter
                              	    {
                              	    if ( state.backtracking==0 ) {
  
                              	      									newCompositeNode(grammarAccess.getMemberAccess().getTypeParametersJvmTypeParameterParserRuleCall_2_4_4_2_1_0());
                              	      								
                              	    }
                              	    pushFollow(FOLLOW_28);
                              	    lv_typeParameters_105_0=ruleJvmTypeParameter();
  
                              	    state._fsp--;
                              	    if (state.failed) return current;
                              	    if ( state.backtracking==0 ) {
  
                              	      									if (current==null) {
                              	      										current = createModelElementForParent(grammarAccess.getMemberRule());
                              	      									}
                              	      									add(
                              	      										current,
                              	      										"typeParameters",
                              	      										lv_typeParameters_105_0,
                              	      										"org.eclipse.xtext.xbase.Xtype.JvmTypeParameter");
                              	      									afterParserOrEnumRuleCall();
                              	      								
                              	    }
  
                              	    }
  
  
                              	    }
  
  
                              	    }
                              	    break;
  
                              	default :
                              	    break loop174;
                                  }
                              } while (true);
  
                              otherlv_106=(Token)match(input,41,FOLLOW_13); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_106, grammarAccess.getMemberAccess().getGreaterThanSignKeyword_2_4_4_3());
                                					
                              }
  
                              }
                              break;
  
                      }
  
                      // InternalSARL.g:6164:5: (otherlv_107= 'extends' ( (lv_extends_108_0= ruleJvmParameterizedTypeReference ) ) (otherlv_109= ',' ( (lv_extends_110_0= ruleJvmParameterizedTypeReference ) ) )* )?
                      int alt177=2;
                      int LA177_0 = input.LA(1);
  
                      if ( (LA177_0==28) ) {
                          alt177=1;
                      }
                      switch (alt177) {
                          case 1 :
                              // InternalSARL.g:6165:6: otherlv_107= 'extends' ( (lv_extends_108_0= ruleJvmParameterizedTypeReference ) ) (otherlv_109= ',' ( (lv_extends_110_0= ruleJvmParameterizedTypeReference ) ) )*
                              {
                              otherlv_107=(Token)match(input,28,FOLLOW_3); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_107, grammarAccess.getMemberAccess().getExtendsKeyword_2_4_5_0());
                                					
                              }
                              // InternalSARL.g:6169:6: ( (lv_extends_108_0= ruleJvmParameterizedTypeReference ) )
                              // InternalSARL.g:6170:7: (lv_extends_108_0= ruleJvmParameterizedTypeReference )
                              {
                              // InternalSARL.g:6170:7: (lv_extends_108_0= ruleJvmParameterizedTypeReference )
                              // InternalSARL.g:6171:8: lv_extends_108_0= ruleJvmParameterizedTypeReference
                              {
                              if ( state.backtracking==0 ) {
  
                                								newCompositeNode(grammarAccess.getMemberAccess().getExtendsJvmParameterizedTypeReferenceParserRuleCall_2_4_5_1_0());
                                							
                              }
                              pushFollow(FOLLOW_14);
                              lv_extends_108_0=ruleJvmParameterizedTypeReference();
  
                              state._fsp--;
                              if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                								if (current==null) {
                                									current = createModelElementForParent(grammarAccess.getMemberRule());
                                								}
                                								add(
                                									current,
                                									"extends",
                                									lv_extends_108_0,
                                									"org.eclipse.xtext.xbase.Xtype.JvmParameterizedTypeReference");
                                								afterParserOrEnumRuleCall();
                                							
                              }
  
                              }
  
  
                              }
  
                              // InternalSARL.g:6188:6: (otherlv_109= ',' ( (lv_extends_110_0= ruleJvmParameterizedTypeReference ) ) )*
                              loop176:
                              do {
                                  int alt176=2;
                                  int LA176_0 = input.LA(1);
  
                                  if ( (LA176_0==32) ) {
                                      alt176=1;
                                  }
  
  
                                  switch (alt176) {
                              	case 1 :
                              	    // InternalSARL.g:6189:7: otherlv_109= ',' ( (lv_extends_110_0= ruleJvmParameterizedTypeReference ) )
                              	    {
                              	    otherlv_109=(Token)match(input,32,FOLLOW_3); if (state.failed) return current;
                              	    if ( state.backtracking==0 ) {
  
                              	      							newLeafNode(otherlv_109, grammarAccess.getMemberAccess().getCommaKeyword_2_4_5_2_0());
                              	      						
                              	    }
                              	    // InternalSARL.g:6193:7: ( (lv_extends_110_0= ruleJvmParameterizedTypeReference ) )
                              	    // InternalSARL.g:6194:8: (lv_extends_110_0= ruleJvmParameterizedTypeReference )
                              	    {
                              	    // InternalSARL.g:6194:8: (lv_extends_110_0= ruleJvmParameterizedTypeReference )
                              	    // InternalSARL.g:6195:9: lv_extends_110_0= ruleJvmParameterizedTypeReference
                              	    {
                              	    if ( state.backtracking==0 ) {
  
                              	      									newCompositeNode(grammarAccess.getMemberAccess().getExtendsJvmParameterizedTypeReferenceParserRuleCall_2_4_5_2_1_0());
                              	      								
                              	    }
                              	    pushFollow(FOLLOW_14);
                              	    lv_extends_110_0=ruleJvmParameterizedTypeReference();
  
                              	    state._fsp--;
                              	    if (state.failed) return current;
                              	    if ( state.backtracking==0 ) {
  
                              	      									if (current==null) {
                              	      										current = createModelElementForParent(grammarAccess.getMemberRule());
                              	      									}
                              	      									add(
                              	      										current,
                              	      										"extends",
                              	      										lv_extends_110_0,
                              	      										"org.eclipse.xtext.xbase.Xtype.JvmParameterizedTypeReference");
                              	      									afterParserOrEnumRuleCall();
                              	      								
                              	    }
  
                              	    }
  
  
                              	    }
  
  
                              	    }
                              	    break;
  
                              	default :
                              	    break loop176;
                                  }
                              } while (true);
  
  
                              }
                              break;
  
                      }
  
                      otherlv_111=(Token)match(input,29,FOLLOW_29); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					newLeafNode(otherlv_111, grammarAccess.getMemberAccess().getLeftCurlyBracketKeyword_2_4_6());
                        				
                      }
                      // InternalSARL.g:6218:5: ( (lv_members_112_0= ruleMember ) )*
                      loop178:
                      do {
                          int alt178=2;
                          int LA178_0 = input.LA(1);
  
                          if ( (LA178_0==25||LA178_0==39||(LA178_0>=42 && LA178_0<=45)||LA178_0==48||(LA178_0>=65 && LA178_0<=66)||(LA178_0>=78 && LA178_0<=91)||LA178_0==105) ) {
                              alt178=1;
                          }
  
  
                          switch (alt178) {
                      	case 1 :
                      	    // InternalSARL.g:6219:6: (lv_members_112_0= ruleMember )
                      	    {
                      	    // InternalSARL.g:6219:6: (lv_members_112_0= ruleMember )
                      	    // InternalSARL.g:6220:7: lv_members_112_0= ruleMember
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      							newCompositeNode(grammarAccess.getMemberAccess().getMembersMemberParserRuleCall_2_4_7_0());
                      	      						
                      	    }
                      	    pushFollow(FOLLOW_29);
                      	    lv_members_112_0=ruleMember();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      							if (current==null) {
                      	      								current = createModelElementForParent(grammarAccess.getMemberRule());
                      	      							}
                      	      							add(
                      	      								current,
                      	      								"members",
                      	      								lv_members_112_0,
                      	      								"io.sarl.lang.SARL.Member");
                      	      							afterParserOrEnumRuleCall();
                      	      						
                      	    }
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop178;
                          }
                      } while (true);
  
                      otherlv_113=(Token)match(input,30,FOLLOW_2); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					newLeafNode(otherlv_113, grammarAccess.getMemberAccess().getRightCurlyBracketKeyword_2_4_8());
                        				
                      }
  
                      }
  
  
                      }
                      break;
                  case 6 :
                      // InternalSARL.g:6243:4: ( () ( (lv_modifiers_115_0= ruleCommonModifier ) )* otherlv_116= 'enum' ( (lv_name_117_0= ruleValidID ) ) otherlv_118= '{' ( ( (lv_members_119_0= ruleXtendEnumLiteral ) ) (otherlv_120= ',' ( (lv_members_121_0= ruleXtendEnumLiteral ) ) )* )? (otherlv_122= ';' )? otherlv_123= '}' )
                      {
                      // InternalSARL.g:6243:4: ( () ( (lv_modifiers_115_0= ruleCommonModifier ) )* otherlv_116= 'enum' ( (lv_name_117_0= ruleValidID ) ) otherlv_118= '{' ( ( (lv_members_119_0= ruleXtendEnumLiteral ) ) (otherlv_120= ',' ( (lv_members_121_0= ruleXtendEnumLiteral ) ) )* )? (otherlv_122= ';' )? otherlv_123= '}' )
                      // InternalSARL.g:6244:5: () ( (lv_modifiers_115_0= ruleCommonModifier ) )* otherlv_116= 'enum' ( (lv_name_117_0= ruleValidID ) ) otherlv_118= '{' ( ( (lv_members_119_0= ruleXtendEnumLiteral ) ) (otherlv_120= ',' ( (lv_members_121_0= ruleXtendEnumLiteral ) ) )* )? (otherlv_122= ';' )? otherlv_123= '}'
                      {
                      // InternalSARL.g:6244:5: ()
                      // InternalSARL.g:6245:6: 
                      {
                      if ( state.backtracking==0 ) {
  
                        						current = forceCreateModelElementAndSet(
                        							grammarAccess.getMemberAccess().getSarlEnumerationAnnotationInfoAction_2_5_0(),
                        							current);
                        					
                      }
  
                      }
  
                      // InternalSARL.g:6251:5: ( (lv_modifiers_115_0= ruleCommonModifier ) )*
                      loop179:
                      do {
                          int alt179=2;
                          int LA179_0 = input.LA(1);
  
                          if ( (LA179_0==25||(LA179_0>=78 && LA179_0<=89)) ) {
                              alt179=1;
                          }
  
  
                          switch (alt179) {
                      	case 1 :
                      	    // InternalSARL.g:6252:6: (lv_modifiers_115_0= ruleCommonModifier )
                      	    {
                      	    // InternalSARL.g:6252:6: (lv_modifiers_115_0= ruleCommonModifier )
                      	    // InternalSARL.g:6253:7: lv_modifiers_115_0= ruleCommonModifier
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      							newCompositeNode(grammarAccess.getMemberAccess().getModifiersCommonModifierParserRuleCall_2_5_1_0());
                      	      						
                      	    }
                      	    pushFollow(FOLLOW_32);
                      	    lv_modifiers_115_0=ruleCommonModifier();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      							if (current==null) {
                      	      								current = createModelElementForParent(grammarAccess.getMemberRule());
                      	      							}
                      	      							add(
                      	      								current,
                      	      								"modifiers",
                      	      								lv_modifiers_115_0,
                      	      								"org.eclipse.xtend.core.Xtend.CommonModifier");
                      	      							afterParserOrEnumRuleCall();
                      	      						
                      	    }
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop179;
                          }
                      } while (true);
  
                      otherlv_116=(Token)match(input,43,FOLLOW_3); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					newLeafNode(otherlv_116, grammarAccess.getMemberAccess().getEnumKeyword_2_5_2());
                        				
                      }
                      // InternalSARL.g:6274:5: ( (lv_name_117_0= ruleValidID ) )
                      // InternalSARL.g:6275:6: (lv_name_117_0= ruleValidID )
                      {
                      // InternalSARL.g:6275:6: (lv_name_117_0= ruleValidID )
                      // InternalSARL.g:6276:7: lv_name_117_0= ruleValidID
                      {
                      if ( state.backtracking==0 ) {
  
                        							newCompositeNode(grammarAccess.getMemberAccess().getNameValidIDParserRuleCall_2_5_3_0());
                        						
                      }
                      pushFollow(FOLLOW_17);
                      lv_name_117_0=ruleValidID();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        							if (current==null) {
                        								current = createModelElementForParent(grammarAccess.getMemberRule());
                        							}
                        							set(
                        								current,
                        								"name",
                        								lv_name_117_0,
                        								"org.eclipse.xtend.core.Xtend.ValidID");
                        							afterParserOrEnumRuleCall();
                        						
                      }
  
                      }
  
  
                      }
  
                      otherlv_118=(Token)match(input,29,FOLLOW_33); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					newLeafNode(otherlv_118, grammarAccess.getMemberAccess().getLeftCurlyBracketKeyword_2_5_4());
                        				
                      }
                      // InternalSARL.g:6297:5: ( ( (lv_members_119_0= ruleXtendEnumLiteral ) ) (otherlv_120= ',' ( (lv_members_121_0= ruleXtendEnumLiteral ) ) )* )?
                      int alt181=2;
                      int LA181_0 = input.LA(1);
  
                      if ( (LA181_0==RULE_ID||LA181_0==44||(LA181_0>=92 && LA181_0<=95)) ) {
                          alt181=1;
                      }
                      switch (alt181) {
                          case 1 :
                              // InternalSARL.g:6298:6: ( (lv_members_119_0= ruleXtendEnumLiteral ) ) (otherlv_120= ',' ( (lv_members_121_0= ruleXtendEnumLiteral ) ) )*
                              {
                              // InternalSARL.g:6298:6: ( (lv_members_119_0= ruleXtendEnumLiteral ) )
                              // InternalSARL.g:6299:7: (lv_members_119_0= ruleXtendEnumLiteral )
                              {
                              // InternalSARL.g:6299:7: (lv_members_119_0= ruleXtendEnumLiteral )
                              // InternalSARL.g:6300:8: lv_members_119_0= ruleXtendEnumLiteral
                              {
                              if ( state.backtracking==0 ) {
  
                                								newCompositeNode(grammarAccess.getMemberAccess().getMembersXtendEnumLiteralParserRuleCall_2_5_5_0_0());
                                							
                              }
                              pushFollow(FOLLOW_34);
                              lv_members_119_0=ruleXtendEnumLiteral();
  
                              state._fsp--;
                              if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                								if (current==null) {
                                									current = createModelElementForParent(grammarAccess.getMemberRule());
                                								}
                                								add(
                                									current,
                                									"members",
                                									lv_members_119_0,
                                									"io.sarl.lang.SARL.XtendEnumLiteral");
                                								afterParserOrEnumRuleCall();
                                							
                              }
  
                              }
  
  
                              }
  
                              // InternalSARL.g:6317:6: (otherlv_120= ',' ( (lv_members_121_0= ruleXtendEnumLiteral ) ) )*
                              loop180:
                              do {
                                  int alt180=2;
                                  int LA180_0 = input.LA(1);
  
                                  if ( (LA180_0==32) ) {
                                      alt180=1;
                                  }
  
  
                                  switch (alt180) {
                              	case 1 :
                              	    // InternalSARL.g:6318:7: otherlv_120= ',' ( (lv_members_121_0= ruleXtendEnumLiteral ) )
                              	    {
                              	    otherlv_120=(Token)match(input,32,FOLLOW_3); if (state.failed) return current;
                              	    if ( state.backtracking==0 ) {
  
                              	      							newLeafNode(otherlv_120, grammarAccess.getMemberAccess().getCommaKeyword_2_5_5_1_0());
                              	      						
                              	    }
                              	    // InternalSARL.g:6322:7: ( (lv_members_121_0= ruleXtendEnumLiteral ) )
                              	    // InternalSARL.g:6323:8: (lv_members_121_0= ruleXtendEnumLiteral )
                              	    {
                              	    // InternalSARL.g:6323:8: (lv_members_121_0= ruleXtendEnumLiteral )
                              	    // InternalSARL.g:6324:9: lv_members_121_0= ruleXtendEnumLiteral
                              	    {
                              	    if ( state.backtracking==0 ) {
  
                              	      									newCompositeNode(grammarAccess.getMemberAccess().getMembersXtendEnumLiteralParserRuleCall_2_5_5_1_1_0());
                              	      								
                              	    }
                              	    pushFollow(FOLLOW_34);
                              	    lv_members_121_0=ruleXtendEnumLiteral();
  
                              	    state._fsp--;
                              	    if (state.failed) return current;
                              	    if ( state.backtracking==0 ) {
  
                              	      									if (current==null) {
                              	      										current = createModelElementForParent(grammarAccess.getMemberRule());
                              	      									}
                              	      									add(
                              	      										current,
                              	      										"members",
                              	      										lv_members_121_0,
                              	      										"io.sarl.lang.SARL.XtendEnumLiteral");
                              	      									afterParserOrEnumRuleCall();
                              	      								
                              	    }
  
                              	    }
  
  
                              	    }
  
  
                              	    }
                              	    break;
  
                              	default :
                              	    break loop180;
                                  }
                              } while (true);
  
  
                              }
                              break;
  
                      }
  
                      // InternalSARL.g:6343:5: (otherlv_122= ';' )?
                      int alt182=2;
                      int LA182_0 = input.LA(1);
  
                      if ( (LA182_0==26) ) {
                          alt182=1;
                      }
                      switch (alt182) {
                          case 1 :
                              // InternalSARL.g:6344:6: otherlv_122= ';'
                              {
                              otherlv_122=(Token)match(input,26,FOLLOW_24); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_122, grammarAccess.getMemberAccess().getSemicolonKeyword_2_5_6());
                                					
                              }
  
                              }
                              break;
  
                      }
  
                      otherlv_123=(Token)match(input,30,FOLLOW_2); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					newLeafNode(otherlv_123, grammarAccess.getMemberAccess().getRightCurlyBracketKeyword_2_5_7());
                        				
                      }
  
                      }
  
  
                      }
                      break;
                  case 7 :
                      // InternalSARL.g:6355:4: ( () ( (lv_modifiers_125_0= ruleCommonModifier ) )* otherlv_126= 'annotation' ( (lv_name_127_0= ruleValidID ) ) otherlv_128= '{' ( (lv_members_129_0= ruleAnnotationField ) )* otherlv_130= '}' )
                      {
                      // InternalSARL.g:6355:4: ( () ( (lv_modifiers_125_0= ruleCommonModifier ) )* otherlv_126= 'annotation' ( (lv_name_127_0= ruleValidID ) ) otherlv_128= '{' ( (lv_members_129_0= ruleAnnotationField ) )* otherlv_130= '}' )
                      // InternalSARL.g:6356:5: () ( (lv_modifiers_125_0= ruleCommonModifier ) )* otherlv_126= 'annotation' ( (lv_name_127_0= ruleValidID ) ) otherlv_128= '{' ( (lv_members_129_0= ruleAnnotationField ) )* otherlv_130= '}'
                      {
                      // InternalSARL.g:6356:5: ()
                      // InternalSARL.g:6357:6: 
                      {
                      if ( state.backtracking==0 ) {
  
                        						current = forceCreateModelElementAndSet(
                        							grammarAccess.getMemberAccess().getSarlAnnotationTypeAnnotationInfoAction_2_6_0(),
                        							current);
                        					
                      }
  
                      }
  
                      // InternalSARL.g:6363:5: ( (lv_modifiers_125_0= ruleCommonModifier ) )*
                      loop183:
                      do {
                          int alt183=2;
                          int LA183_0 = input.LA(1);
  
                          if ( (LA183_0==25||(LA183_0>=78 && LA183_0<=89)) ) {
                              alt183=1;
                          }
  
  
                          switch (alt183) {
                      	case 1 :
                      	    // InternalSARL.g:6364:6: (lv_modifiers_125_0= ruleCommonModifier )
                      	    {
                      	    // InternalSARL.g:6364:6: (lv_modifiers_125_0= ruleCommonModifier )
                      	    // InternalSARL.g:6365:7: lv_modifiers_125_0= ruleCommonModifier
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      							newCompositeNode(grammarAccess.getMemberAccess().getModifiersCommonModifierParserRuleCall_2_6_1_0());
                      	      						
                      	    }
                      	    pushFollow(FOLLOW_35);
                      	    lv_modifiers_125_0=ruleCommonModifier();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      							if (current==null) {
                      	      								current = createModelElementForParent(grammarAccess.getMemberRule());
                      	      							}
                      	      							add(
                      	      								current,
                      	      								"modifiers",
                      	      								lv_modifiers_125_0,
                      	      								"org.eclipse.xtend.core.Xtend.CommonModifier");
                      	      							afterParserOrEnumRuleCall();
                      	      						
                      	    }
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop183;
                          }
                      } while (true);
  
                      otherlv_126=(Token)match(input,44,FOLLOW_3); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					newLeafNode(otherlv_126, grammarAccess.getMemberAccess().getAnnotationKeyword_2_6_2());
                        				
                      }
                      // InternalSARL.g:6386:5: ( (lv_name_127_0= ruleValidID ) )
                      // InternalSARL.g:6387:6: (lv_name_127_0= ruleValidID )
                      {
                      // InternalSARL.g:6387:6: (lv_name_127_0= ruleValidID )
                      // InternalSARL.g:6388:7: lv_name_127_0= ruleValidID
                      {
                      if ( state.backtracking==0 ) {
  
                        							newCompositeNode(grammarAccess.getMemberAccess().getNameValidIDParserRuleCall_2_6_3_0());
                        						
                      }
                      pushFollow(FOLLOW_17);
                      lv_name_127_0=ruleValidID();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        							if (current==null) {
                        								current = createModelElementForParent(grammarAccess.getMemberRule());
                        							}
                        							set(
                        								current,
                        								"name",
                        								lv_name_127_0,
                        								"org.eclipse.xtend.core.Xtend.ValidID");
                        							afterParserOrEnumRuleCall();
                        						
                      }
  
                      }
  
  
                      }
  
                      otherlv_128=(Token)match(input,29,FOLLOW_36); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					newLeafNode(otherlv_128, grammarAccess.getMemberAccess().getLeftCurlyBracketKeyword_2_6_4());
                        				
                      }
                      // InternalSARL.g:6409:5: ( (lv_members_129_0= ruleAnnotationField ) )*
                      loop184:
                      do {
                          int alt184=2;
                          int LA184_0 = input.LA(1);
  
                          if ( (LA184_0==25||LA184_0==39||(LA184_0>=42 && LA184_0<=44)||(LA184_0>=65 && LA184_0<=66)||(LA184_0>=78 && LA184_0<=89)||LA184_0==105) ) {
                              alt184=1;
                          }
  
  
                          switch (alt184) {
                      	case 1 :
                      	    // InternalSARL.g:6410:6: (lv_members_129_0= ruleAnnotationField )
                      	    {
                      	    // InternalSARL.g:6410:6: (lv_members_129_0= ruleAnnotationField )
                      	    // InternalSARL.g:6411:7: lv_members_129_0= ruleAnnotationField
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      							newCompositeNode(grammarAccess.getMemberAccess().getMembersAnnotationFieldParserRuleCall_2_6_5_0());
                      	      						
                      	    }
                      	    pushFollow(FOLLOW_36);
                      	    lv_members_129_0=ruleAnnotationField();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      							if (current==null) {
                      	      								current = createModelElementForParent(grammarAccess.getMemberRule());
                      	      							}
                      	      							add(
                      	      								current,
                      	      								"members",
                      	      								lv_members_129_0,
                      	      								"io.sarl.lang.SARL.AnnotationField");
                      	      							afterParserOrEnumRuleCall();
                      	      						
                      	    }
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop184;
                          }
                      } while (true);
  
                      otherlv_130=(Token)match(input,30,FOLLOW_2); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					newLeafNode(otherlv_130, grammarAccess.getMemberAccess().getRightCurlyBracketKeyword_2_6_6());
                        				
                      }
  
                      }
  
  
                      }
                      break;
  
              }
  
  
              }
  
  
              }
  
              if ( state.backtracking==0 ) {
  
                	leaveRule();
  
              }
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }