docs: public final EObject ruleConjunction() throws RecognitionException {
          EObject current = null;
  
          Token otherlv_2=null;
          EObject this_Negation_0 = null;
  
          EObject lv_right_3_0 = null;
  
  
  
          	enterRule();
  
          try {
              // InternalXtext.g:1830:2: ( (this_Negation_0= ruleNegation ( () otherlv_2= '&' ( (lv_right_3_0= ruleNegation ) ) )* ) )
              // InternalXtext.g:1831:2: (this_Negation_0= ruleNegation ( () otherlv_2= '&' ( (lv_right_3_0= ruleNegation ) ) )* )
              {
              // InternalXtext.g:1831:2: (this_Negation_0= ruleNegation ( () otherlv_2= '&' ( (lv_right_3_0= ruleNegation ) ) )* )
              // InternalXtext.g:1832:3: this_Negation_0= ruleNegation ( () otherlv_2= '&' ( (lv_right_3_0= ruleNegation ) ) )*
              {
  
              			newCompositeNode(grammarAccess.getConjunctionAccess().getNegationParserRuleCall_0());
              		
              pushFollow(FollowSets000.FOLLOW_30);
              this_Negation_0=ruleNegation();
  
              state._fsp--;
  
  
              			current = this_Negation_0;
              			afterParserOrEnumRuleCall();
              		
              // InternalXtext.g:1840:3: ( () otherlv_2= '&' ( (lv_right_3_0= ruleNegation ) ) )*
              loop45:
              do {
                  int alt45=2;
                  int LA45_0 = input.LA(1);
  
                  if ( (LA45_0==31) ) {
                      alt45=1;
                  }
  
  
                  switch (alt45) {
              	case 1 :
              	    // InternalXtext.g:1841:4: () otherlv_2= '&' ( (lv_right_3_0= ruleNegation ) )
              	    {
              	    // InternalXtext.g:1841:4: ()
              	    // InternalXtext.g:1842:5: 
              	    {
  
              	    					current = forceCreateModelElementAndSet(
              	    						grammarAccess.getConjunctionAccess().getConjunctionLeftAction_1_0(),
              	    						current);
              	    				
  
              	    }
  
              	    otherlv_2=(Token)match(input,31,FollowSets000.FOLLOW_26); 
  
              	    				newLeafNode(otherlv_2, grammarAccess.getConjunctionAccess().getAmpersandKeyword_1_1());
              	    			
              	    // InternalXtext.g:1852:4: ( (lv_right_3_0= ruleNegation ) )
              	    // InternalXtext.g:1853:5: (lv_right_3_0= ruleNegation )
              	    {
              	    // InternalXtext.g:1853:5: (lv_right_3_0= ruleNegation )
              	    // InternalXtext.g:1854:6: lv_right_3_0= ruleNegation
              	    {
  
              	    						newCompositeNode(grammarAccess.getConjunctionAccess().getRightNegationParserRuleCall_1_2_0());
              	    					
              	    pushFollow(FollowSets000.FOLLOW_30);
              	    lv_right_3_0=ruleNegation();
  
              	    state._fsp--;
  
  
              	    						if (current==null) {
              	    							current = createModelElementForParent(grammarAccess.getConjunctionRule());
              	    						}
              	    						set(
              	    							current,
              	    							"right",
              	    							lv_right_3_0,
              	    							"org.eclipse.xtext.Xtext.Negation");
              	    						afterParserOrEnumRuleCall();
              	    					
  
              	    }
  
  
              	    }
  
  
              	    }
              	    break;
  
              	default :
              	    break loop45;
                  }
              } while (true);
  
  
              }
  
  
              }
  
  
              	leaveRule();
  
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }