docs: public final EObject ruleAndExpression() throws RecognitionException {
          EObject current = null;
  
          Token otherlv_2=null;
          EObject this_Comparison_0 = null;
  
          EObject lv_right_3_0 = null;
  
  
           enterRule(); 
              
          try {
              // InternalSimpleExpressions.g:207:28: ( (this_Comparison_0= ruleComparison ( () otherlv_2= '&&' ( (lv_right_3_0= ruleComparison ) ) )* ) )
              // InternalSimpleExpressions.g:208:1: (this_Comparison_0= ruleComparison ( () otherlv_2= '&&' ( (lv_right_3_0= ruleComparison ) ) )* )
              {
              // InternalSimpleExpressions.g:208:1: (this_Comparison_0= ruleComparison ( () otherlv_2= '&&' ( (lv_right_3_0= ruleComparison ) ) )* )
              // InternalSimpleExpressions.g:209:5: this_Comparison_0= ruleComparison ( () otherlv_2= '&&' ( (lv_right_3_0= ruleComparison ) ) )*
              {
               
                      newCompositeNode(grammarAccess.getAndExpressionAccess().getComparisonParserRuleCall_0()); 
                  
              pushFollow(FOLLOW_9);
              this_Comparison_0=ruleComparison();
  
              state._fsp--;
  
               
                      current = this_Comparison_0; 
                      afterParserOrEnumRuleCall();
                  
              // InternalSimpleExpressions.g:217:1: ( () otherlv_2= '&&' ( (lv_right_3_0= ruleComparison ) ) )*
              loop3:
              do {
                  int alt3=2;
                  int LA3_0 = input.LA(1);
  
                  if ( (LA3_0==17) ) {
                      alt3=1;
                  }
  
  
                  switch (alt3) {
              	case 1 :
              	    // InternalSimpleExpressions.g:217:2: () otherlv_2= '&&' ( (lv_right_3_0= ruleComparison ) )
              	    {
              	    // InternalSimpleExpressions.g:217:2: ()
              	    // InternalSimpleExpressions.g:218:5: 
              	    {
  
              	            current = forceCreateModelElementAndSet(
              	                grammarAccess.getAndExpressionAccess().getAndExpressionLeftAction_1_0(),
              	                current);
              	        
  
              	    }
  
              	    otherlv_2=(Token)match(input,17,FOLLOW_5); 
  
              	        	newLeafNode(otherlv_2, grammarAccess.getAndExpressionAccess().getAmpersandAmpersandKeyword_1_1());
              	        
              	    // InternalSimpleExpressions.g:227:1: ( (lv_right_3_0= ruleComparison ) )
              	    // InternalSimpleExpressions.g:228:1: (lv_right_3_0= ruleComparison )
              	    {
              	    // InternalSimpleExpressions.g:228:1: (lv_right_3_0= ruleComparison )
              	    // InternalSimpleExpressions.g:229:3: lv_right_3_0= ruleComparison
              	    {
              	     
              	    	        newCompositeNode(grammarAccess.getAndExpressionAccess().getRightComparisonParserRuleCall_1_2_0()); 
              	    	    
              	    pushFollow(FOLLOW_9);
              	    lv_right_3_0=ruleComparison();
  
              	    state._fsp--;
  
  
              	    	        if (current==null) {
              	    	            current = createModelElementForParent(grammarAccess.getAndExpressionRule());
              	    	        }
              	           		set(
              	           			current, 
              	           			"right",
              	            		lv_right_3_0, 
              	            		"org.eclipse.xtext.xtext.generator.parser.antlr.splitting.SimpleExpressions.Comparison");
              	    	        afterParserOrEnumRuleCall();
              	    	    
  
              	    }
  
  
              	    }
  
  
              	    }
              	    break;
  
              	default :
              	    break loop3;
                  }
              } while (true);
  
  
              }
  
  
              }
  
               leaveRule(); 
          }
           
              catch (RecognitionException re) { 
                  recover(input,re); 
                  appendSkippedTokens();
              } 
          finally {
          }
          return current;
      }