docs: public final EObject ruleXVariableDeclaration() throws RecognitionException {
          EObject current = null;
  
          Token lv_writeable_1_0=null;
          Token otherlv_2=null;
          Token lv_extension_3_0=null;
          Token lv_extension_4_0=null;
          Token lv_writeable_5_0=null;
          Token otherlv_6=null;
          Token otherlv_8=null;
          Token otherlv_10=null;
          AntlrDatatypeRuleToken lv_name_7_0 = null;
  
          EObject lv_type_9_0 = null;
  
          EObject lv_right_11_0 = null;
  
  
  
          	enterRule();
  
          try {
              // InternalSARL.g:7968:2: ( ( ( ( ( () ( ( ( ( ( 'var' ) ) | 'val' ) ( ( 'extension' ) )? ) | ( ( ( 'extension' ) ) ( ( ( 'var' ) ) | 'val' ) ) ) ) )=> ( () ( ( ( ( (lv_writeable_1_0= 'var' ) ) | otherlv_2= 'val' ) ( (lv_extension_3_0= 'extension' ) )? ) | ( ( (lv_extension_4_0= 'extension' ) ) ( ( (lv_writeable_5_0= 'var' ) ) | otherlv_6= 'val' ) ) ) ) ) ( (lv_name_7_0= ruleValidID ) ) (otherlv_8= ':' ( (lv_type_9_0= ruleJvmTypeReference ) ) )? (otherlv_10= '=' ( (lv_right_11_0= ruleXExpression ) ) )? ) )
              // InternalSARL.g:7969:2: ( ( ( ( () ( ( ( ( ( 'var' ) ) | 'val' ) ( ( 'extension' ) )? ) | ( ( ( 'extension' ) ) ( ( ( 'var' ) ) | 'val' ) ) ) ) )=> ( () ( ( ( ( (lv_writeable_1_0= 'var' ) ) | otherlv_2= 'val' ) ( (lv_extension_3_0= 'extension' ) )? ) | ( ( (lv_extension_4_0= 'extension' ) ) ( ( (lv_writeable_5_0= 'var' ) ) | otherlv_6= 'val' ) ) ) ) ) ( (lv_name_7_0= ruleValidID ) ) (otherlv_8= ':' ( (lv_type_9_0= ruleJvmTypeReference ) ) )? (otherlv_10= '=' ( (lv_right_11_0= ruleXExpression ) ) )? )
              {
              // InternalSARL.g:7969:2: ( ( ( ( () ( ( ( ( ( 'var' ) ) | 'val' ) ( ( 'extension' ) )? ) | ( ( ( 'extension' ) ) ( ( ( 'var' ) ) | 'val' ) ) ) ) )=> ( () ( ( ( ( (lv_writeable_1_0= 'var' ) ) | otherlv_2= 'val' ) ( (lv_extension_3_0= 'extension' ) )? ) | ( ( (lv_extension_4_0= 'extension' ) ) ( ( (lv_writeable_5_0= 'var' ) ) | otherlv_6= 'val' ) ) ) ) ) ( (lv_name_7_0= ruleValidID ) ) (otherlv_8= ':' ( (lv_type_9_0= ruleJvmTypeReference ) ) )? (otherlv_10= '=' ( (lv_right_11_0= ruleXExpression ) ) )? )
              // InternalSARL.g:7970:3: ( ( ( () ( ( ( ( ( 'var' ) ) | 'val' ) ( ( 'extension' ) )? ) | ( ( ( 'extension' ) ) ( ( ( 'var' ) ) | 'val' ) ) ) ) )=> ( () ( ( ( ( (lv_writeable_1_0= 'var' ) ) | otherlv_2= 'val' ) ( (lv_extension_3_0= 'extension' ) )? ) | ( ( (lv_extension_4_0= 'extension' ) ) ( ( (lv_writeable_5_0= 'var' ) ) | otherlv_6= 'val' ) ) ) ) ) ( (lv_name_7_0= ruleValidID ) ) (otherlv_8= ':' ( (lv_type_9_0= ruleJvmTypeReference ) ) )? (otherlv_10= '=' ( (lv_right_11_0= ruleXExpression ) ) )?
              {
              // InternalSARL.g:7970:3: ( ( ( () ( ( ( ( ( 'var' ) ) | 'val' ) ( ( 'extension' ) )? ) | ( ( ( 'extension' ) ) ( ( ( 'var' ) ) | 'val' ) ) ) ) )=> ( () ( ( ( ( (lv_writeable_1_0= 'var' ) ) | otherlv_2= 'val' ) ( (lv_extension_3_0= 'extension' ) )? ) | ( ( (lv_extension_4_0= 'extension' ) ) ( ( (lv_writeable_5_0= 'var' ) ) | otherlv_6= 'val' ) ) ) ) )
              // InternalSARL.g:7971:4: ( ( () ( ( ( ( ( 'var' ) ) | 'val' ) ( ( 'extension' ) )? ) | ( ( ( 'extension' ) ) ( ( ( 'var' ) ) | 'val' ) ) ) ) )=> ( () ( ( ( ( (lv_writeable_1_0= 'var' ) ) | otherlv_2= 'val' ) ( (lv_extension_3_0= 'extension' ) )? ) | ( ( (lv_extension_4_0= 'extension' ) ) ( ( (lv_writeable_5_0= 'var' ) ) | otherlv_6= 'val' ) ) ) )
              {
              // InternalSARL.g:8011:4: ( () ( ( ( ( (lv_writeable_1_0= 'var' ) ) | otherlv_2= 'val' ) ( (lv_extension_3_0= 'extension' ) )? ) | ( ( (lv_extension_4_0= 'extension' ) ) ( ( (lv_writeable_5_0= 'var' ) ) | otherlv_6= 'val' ) ) ) )
              // InternalSARL.g:8012:5: () ( ( ( ( (lv_writeable_1_0= 'var' ) ) | otherlv_2= 'val' ) ( (lv_extension_3_0= 'extension' ) )? ) | ( ( (lv_extension_4_0= 'extension' ) ) ( ( (lv_writeable_5_0= 'var' ) ) | otherlv_6= 'val' ) ) )
              {
              // InternalSARL.g:8012:5: ()
              // InternalSARL.g:8013:6: 
              {
              if ( state.backtracking==0 ) {
  
                						current = forceCreateModelElement(
                							grammarAccess.getXVariableDeclarationAccess().getXtendVariableDeclarationAction_0_0_0(),
                							current);
                					
              }
  
              }
  
              // InternalSARL.g:8019:5: ( ( ( ( (lv_writeable_1_0= 'var' ) ) | otherlv_2= 'val' ) ( (lv_extension_3_0= 'extension' ) )? ) | ( ( (lv_extension_4_0= 'extension' ) ) ( ( (lv_writeable_5_0= 'var' ) ) | otherlv_6= 'val' ) ) )
              int alt222=2;
              int LA222_0 = input.LA(1);
  
              if ( ((LA222_0>=65 && LA222_0<=66)) ) {
                  alt222=1;
              }
              else if ( (LA222_0==45) ) {
                  alt222=2;
              }
              else {
                  if (state.backtracking>0) {state.failed=true; return current;}
                  NoViableAltException nvae =
                      new NoViableAltException("", 222, 0, input);
  
                  throw nvae;
              }
              switch (alt222) {
                  case 1 :
                      // InternalSARL.g:8020:6: ( ( ( (lv_writeable_1_0= 'var' ) ) | otherlv_2= 'val' ) ( (lv_extension_3_0= 'extension' ) )? )
                      {
                      // InternalSARL.g:8020:6: ( ( ( (lv_writeable_1_0= 'var' ) ) | otherlv_2= 'val' ) ( (lv_extension_3_0= 'extension' ) )? )
                      // InternalSARL.g:8021:7: ( ( (lv_writeable_1_0= 'var' ) ) | otherlv_2= 'val' ) ( (lv_extension_3_0= 'extension' ) )?
                      {
                      // InternalSARL.g:8021:7: ( ( (lv_writeable_1_0= 'var' ) ) | otherlv_2= 'val' )
                      int alt219=2;
                      int LA219_0 = input.LA(1);
  
                      if ( (LA219_0==65) ) {
                          alt219=1;
                      }
                      else if ( (LA219_0==66) ) {
                          alt219=2;
                      }
                      else {
                          if (state.backtracking>0) {state.failed=true; return current;}
                          NoViableAltException nvae =
                              new NoViableAltException("", 219, 0, input);
  
                          throw nvae;
                      }
                      switch (alt219) {
                          case 1 :
                              // InternalSARL.g:8022:8: ( (lv_writeable_1_0= 'var' ) )
                              {
                              // InternalSARL.g:8022:8: ( (lv_writeable_1_0= 'var' ) )
                              // InternalSARL.g:8023:9: (lv_writeable_1_0= 'var' )
                              {
                              // InternalSARL.g:8023:9: (lv_writeable_1_0= 'var' )
                              // InternalSARL.g:8024:10: lv_writeable_1_0= 'var'
                              {
                              lv_writeable_1_0=(Token)match(input,65,FOLLOW_75); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                										newLeafNode(lv_writeable_1_0, grammarAccess.getXVariableDeclarationAccess().getWriteableVarKeyword_0_0_1_0_0_0_0());
                                									
                              }
                              if ( state.backtracking==0 ) {
  
                                										if (current==null) {
                                											current = createModelElement(grammarAccess.getXVariableDeclarationRule());
                                										}
                                										setWithLastConsumed(current, "writeable", true, "var");
                                									
                              }
  
                              }
  
  
                              }
  
  
                              }
                              break;
                          case 2 :
                              // InternalSARL.g:8037:8: otherlv_2= 'val'
                              {
                              otherlv_2=(Token)match(input,66,FOLLOW_75); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                								newLeafNode(otherlv_2, grammarAccess.getXVariableDeclarationAccess().getValKeyword_0_0_1_0_0_1());
                                							
                              }
  
                              }
                              break;
  
                      }
  
                      // InternalSARL.g:8042:7: ( (lv_extension_3_0= 'extension' ) )?
                      int alt220=2;
                      int LA220_0 = input.LA(1);
  
                      if ( (LA220_0==45) ) {
                          alt220=1;
                      }
                      switch (alt220) {
                          case 1 :
                              // InternalSARL.g:8043:8: (lv_extension_3_0= 'extension' )
                              {
                              // InternalSARL.g:8043:8: (lv_extension_3_0= 'extension' )
                              // InternalSARL.g:8044:9: lv_extension_3_0= 'extension'
                              {
                              lv_extension_3_0=(Token)match(input,45,FOLLOW_3); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                									newLeafNode(lv_extension_3_0, grammarAccess.getXVariableDeclarationAccess().getExtensionExtensionKeyword_0_0_1_0_1_0());
                                								
                              }
                              if ( state.backtracking==0 ) {
  
                                									if (current==null) {
                                										current = createModelElement(grammarAccess.getXVariableDeclarationRule());
                                									}
                                									setWithLastConsumed(current, "extension", true, "extension");
                                								
                              }
  
                              }
  
  
                              }
                              break;
  
                      }
  
  
                      }
  
  
                      }
                      break;
                  case 2 :
                      // InternalSARL.g:8058:6: ( ( (lv_extension_4_0= 'extension' ) ) ( ( (lv_writeable_5_0= 'var' ) ) | otherlv_6= 'val' ) )
                      {
                      // InternalSARL.g:8058:6: ( ( (lv_extension_4_0= 'extension' ) ) ( ( (lv_writeable_5_0= 'var' ) ) | otherlv_6= 'val' ) )
                      // InternalSARL.g:8059:7: ( (lv_extension_4_0= 'extension' ) ) ( ( (lv_writeable_5_0= 'var' ) ) | otherlv_6= 'val' )
                      {
                      // InternalSARL.g:8059:7: ( (lv_extension_4_0= 'extension' ) )
                      // InternalSARL.g:8060:8: (lv_extension_4_0= 'extension' )
                      {
                      // InternalSARL.g:8060:8: (lv_extension_4_0= 'extension' )
                      // InternalSARL.g:8061:9: lv_extension_4_0= 'extension'
                      {
                      lv_extension_4_0=(Token)match(input,45,FOLLOW_76); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        									newLeafNode(lv_extension_4_0, grammarAccess.getXVariableDeclarationAccess().getExtensionExtensionKeyword_0_0_1_1_0_0());
                        								
                      }
                      if ( state.backtracking==0 ) {
  
                        									if (current==null) {
                        										current = createModelElement(grammarAccess.getXVariableDeclarationRule());
                        									}
                        									setWithLastConsumed(current, "extension", true, "extension");
                        								
                      }
  
                      }
  
  
                      }
  
                      // InternalSARL.g:8073:7: ( ( (lv_writeable_5_0= 'var' ) ) | otherlv_6= 'val' )
                      int alt221=2;
                      int LA221_0 = input.LA(1);
  
                      if ( (LA221_0==65) ) {
                          alt221=1;
                      }
                      else if ( (LA221_0==66) ) {
                          alt221=2;
                      }
                      else {
                          if (state.backtracking>0) {state.failed=true; return current;}
                          NoViableAltException nvae =
                              new NoViableAltException("", 221, 0, input);
  
                          throw nvae;
                      }
                      switch (alt221) {
                          case 1 :
                              // InternalSARL.g:8074:8: ( (lv_writeable_5_0= 'var' ) )
                              {
                              // InternalSARL.g:8074:8: ( (lv_writeable_5_0= 'var' ) )
                              // InternalSARL.g:8075:9: (lv_writeable_5_0= 'var' )
                              {
                              // InternalSARL.g:8075:9: (lv_writeable_5_0= 'var' )
                              // InternalSARL.g:8076:10: lv_writeable_5_0= 'var'
                              {
                              lv_writeable_5_0=(Token)match(input,65,FOLLOW_3); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                										newLeafNode(lv_writeable_5_0, grammarAccess.getXVariableDeclarationAccess().getWriteableVarKeyword_0_0_1_1_1_0_0());
                                									
                              }
                              if ( state.backtracking==0 ) {
  
                                										if (current==null) {
                                											current = createModelElement(grammarAccess.getXVariableDeclarationRule());
                                										}
                                										setWithLastConsumed(current, "writeable", true, "var");
                                									
                              }
  
                              }
  
  
                              }
  
  
                              }
                              break;
                          case 2 :
                              // InternalSARL.g:8089:8: otherlv_6= 'val'
                              {
                              otherlv_6=(Token)match(input,66,FOLLOW_3); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                								newLeafNode(otherlv_6, grammarAccess.getXVariableDeclarationAccess().getValKeyword_0_0_1_1_1_1());
                                							
                              }
  
                              }
                              break;
  
                      }
  
  
                      }
  
  
                      }
                      break;
  
              }
  
  
              }
  
  
              }
  
              // InternalSARL.g:8098:3: ( (lv_name_7_0= ruleValidID ) )
              // InternalSARL.g:8099:4: (lv_name_7_0= ruleValidID )
              {
              // InternalSARL.g:8099:4: (lv_name_7_0= ruleValidID )
              // InternalSARL.g:8100:5: lv_name_7_0= ruleValidID
              {
              if ( state.backtracking==0 ) {
  
                					newCompositeNode(grammarAccess.getXVariableDeclarationAccess().getNameValidIDParserRuleCall_1_0());
                				
              }
              pushFollow(FOLLOW_77);
              lv_name_7_0=ruleValidID();
  
              state._fsp--;
              if (state.failed) return current;
              if ( state.backtracking==0 ) {
  
                					if (current==null) {
                						current = createModelElementForParent(grammarAccess.getXVariableDeclarationRule());
                					}
                					set(
                						current,
                						"name",
                						lv_name_7_0,
                						"org.eclipse.xtend.core.Xtend.ValidID");
                					afterParserOrEnumRuleCall();
                				
              }
  
              }
  
  
              }
  
              // InternalSARL.g:8117:3: (otherlv_8= ':' ( (lv_type_9_0= ruleJvmTypeReference ) ) )?
              int alt223=2;
              int LA223_0 = input.LA(1);
  
              if ( (LA223_0==46) ) {
                  alt223=1;
              }
              switch (alt223) {
                  case 1 :
                      // InternalSARL.g:8118:4: otherlv_8= ':' ( (lv_type_9_0= ruleJvmTypeReference ) )
                      {
                      otherlv_8=(Token)match(input,46,FOLLOW_41); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        				newLeafNode(otherlv_8, grammarAccess.getXVariableDeclarationAccess().getColonKeyword_2_0());
                        			
                      }
                      // InternalSARL.g:8122:4: ( (lv_type_9_0= ruleJvmTypeReference ) )
                      // InternalSARL.g:8123:5: (lv_type_9_0= ruleJvmTypeReference )
                      {
                      // InternalSARL.g:8123:5: (lv_type_9_0= ruleJvmTypeReference )
                      // InternalSARL.g:8124:6: lv_type_9_0= ruleJvmTypeReference
                      {
                      if ( state.backtracking==0 ) {
  
                        						newCompositeNode(grammarAccess.getXVariableDeclarationAccess().getTypeJvmTypeReferenceParserRuleCall_2_1_0());
                        					
                      }
                      pushFollow(FOLLOW_78);
                      lv_type_9_0=ruleJvmTypeReference();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        						if (current==null) {
                        							current = createModelElementForParent(grammarAccess.getXVariableDeclarationRule());
                        						}
                        						set(
                        							current,
                        							"type",
                        							lv_type_9_0,
                        							"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
                        						afterParserOrEnumRuleCall();
                        					
                      }
  
                      }
  
  
                      }
  
  
                      }
                      break;
  
              }
  
              // InternalSARL.g:8142:3: (otherlv_10= '=' ( (lv_right_11_0= ruleXExpression ) ) )?
              int alt224=2;
              int LA224_0 = input.LA(1);
  
              if ( (LA224_0==47) ) {
                  alt224=1;
              }
              switch (alt224) {
                  case 1 :
                      // InternalSARL.g:8143:4: otherlv_10= '=' ( (lv_right_11_0= ruleXExpression ) )
                      {
                      otherlv_10=(Token)match(input,47,FOLLOW_45); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        				newLeafNode(otherlv_10, grammarAccess.getXVariableDeclarationAccess().getEqualsSignKeyword_3_0());
                        			
                      }
                      // InternalSARL.g:8147:4: ( (lv_right_11_0= ruleXExpression ) )
                      // InternalSARL.g:8148:5: (lv_right_11_0= ruleXExpression )
                      {
                      // InternalSARL.g:8148:5: (lv_right_11_0= ruleXExpression )
                      // InternalSARL.g:8149:6: lv_right_11_0= ruleXExpression
                      {
                      if ( state.backtracking==0 ) {
  
                        						newCompositeNode(grammarAccess.getXVariableDeclarationAccess().getRightXExpressionParserRuleCall_3_1_0());
                        					
                      }
                      pushFollow(FOLLOW_2);
                      lv_right_11_0=ruleXExpression();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        						if (current==null) {
                        							current = createModelElementForParent(grammarAccess.getXVariableDeclarationRule());
                        						}
                        						set(
                        							current,
                        							"right",
                        							lv_right_11_0,
                        							"org.eclipse.xtext.xbase.Xbase.XExpression");
                        						afterParserOrEnumRuleCall();
                        					
                      }
  
                      }
  
  
                      }
  
  
                      }
                      break;
  
              }
  
  
              }
  
  
              }
  
              if ( state.backtracking==0 ) {
  
                	leaveRule();
  
              }
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }