docs: public final EObject ruleComparison() throws RecognitionException {
          EObject current = null;
  
          Token lv_operator_2_1=null;
          Token lv_operator_2_2=null;
          Token lv_operator_2_3=null;
          EObject this_PrefixExpression_0 = null;
  
          EObject lv_right_3_0 = null;
  
  
           enterRule(); 
              
          try {
              // InternalSimpleExpressions.g:265:28: ( (this_PrefixExpression_0= rulePrefixExpression ( () ( ( (lv_operator_2_1= '==' | lv_operator_2_2= '<=' | lv_operator_2_3= '>=' ) ) ) ( (lv_right_3_0= rulePrefixExpression ) ) )? ) )
              // InternalSimpleExpressions.g:266:1: (this_PrefixExpression_0= rulePrefixExpression ( () ( ( (lv_operator_2_1= '==' | lv_operator_2_2= '<=' | lv_operator_2_3= '>=' ) ) ) ( (lv_right_3_0= rulePrefixExpression ) ) )? )
              {
              // InternalSimpleExpressions.g:266:1: (this_PrefixExpression_0= rulePrefixExpression ( () ( ( (lv_operator_2_1= '==' | lv_operator_2_2= '<=' | lv_operator_2_3= '>=' ) ) ) ( (lv_right_3_0= rulePrefixExpression ) ) )? )
              // InternalSimpleExpressions.g:267:5: this_PrefixExpression_0= rulePrefixExpression ( () ( ( (lv_operator_2_1= '==' | lv_operator_2_2= '<=' | lv_operator_2_3= '>=' ) ) ) ( (lv_right_3_0= rulePrefixExpression ) ) )?
              {
               
                      newCompositeNode(grammarAccess.getComparisonAccess().getPrefixExpressionParserRuleCall_0()); 
                  
              pushFollow(FOLLOW_10);
              this_PrefixExpression_0=rulePrefixExpression();
  
              state._fsp--;
  
               
                      current = this_PrefixExpression_0; 
                      afterParserOrEnumRuleCall();
                  
              // InternalSimpleExpressions.g:275:1: ( () ( ( (lv_operator_2_1= '==' | lv_operator_2_2= '<=' | lv_operator_2_3= '>=' ) ) ) ( (lv_right_3_0= rulePrefixExpression ) ) )?
              int alt5=2;
              int LA5_0 = input.LA(1);
  
              if ( ((LA5_0>=18 && LA5_0<=20)) ) {
                  alt5=1;
              }
              switch (alt5) {
                  case 1 :
                      // InternalSimpleExpressions.g:275:2: () ( ( (lv_operator_2_1= '==' | lv_operator_2_2= '<=' | lv_operator_2_3= '>=' ) ) ) ( (lv_right_3_0= rulePrefixExpression ) )
                      {
                      // InternalSimpleExpressions.g:275:2: ()
                      // InternalSimpleExpressions.g:276:5: 
                      {
  
                              current = forceCreateModelElementAndSet(
                                  grammarAccess.getComparisonAccess().getComparisonLeftAction_1_0(),
                                  current);
                          
  
                      }
  
                      // InternalSimpleExpressions.g:281:2: ( ( (lv_operator_2_1= '==' | lv_operator_2_2= '<=' | lv_operator_2_3= '>=' ) ) )
                      // InternalSimpleExpressions.g:282:1: ( (lv_operator_2_1= '==' | lv_operator_2_2= '<=' | lv_operator_2_3= '>=' ) )
                      {
                      // InternalSimpleExpressions.g:282:1: ( (lv_operator_2_1= '==' | lv_operator_2_2= '<=' | lv_operator_2_3= '>=' ) )
                      // InternalSimpleExpressions.g:283:1: (lv_operator_2_1= '==' | lv_operator_2_2= '<=' | lv_operator_2_3= '>=' )
                      {
                      // InternalSimpleExpressions.g:283:1: (lv_operator_2_1= '==' | lv_operator_2_2= '<=' | lv_operator_2_3= '>=' )
                      int alt4=3;
                      switch ( input.LA(1) ) {
                      case 18:
                          {
                          alt4=1;
                          }
                          break;
                      case 19:
                          {
                          alt4=2;
                          }
                          break;
                      case 20:
                          {
                          alt4=3;
                          }
                          break;
                      default:
                          NoViableAltException nvae =
                              new NoViableAltException("", 4, 0, input);
  
                          throw nvae;
                      }
  
                      switch (alt4) {
                          case 1 :
                              // InternalSimpleExpressions.g:284:3: lv_operator_2_1= '=='
                              {
                              lv_operator_2_1=(Token)match(input,18,FOLLOW_5); 
  
                                      newLeafNode(lv_operator_2_1, grammarAccess.getComparisonAccess().getOperatorEqualsSignEqualsSignKeyword_1_1_0_0());
                                  
  
                              	        if (current==null) {
                              	            current = createModelElement(grammarAccess.getComparisonRule());
                              	        }
                                     		setWithLastConsumed(current, "operator", lv_operator_2_1, null);
                              	    
  
                              }
                              break;
                          case 2 :
                              // InternalSimpleExpressions.g:296:8: lv_operator_2_2= '<='
                              {
                              lv_operator_2_2=(Token)match(input,19,FOLLOW_5); 
  
                                      newLeafNode(lv_operator_2_2, grammarAccess.getComparisonAccess().getOperatorLessThanSignEqualsSignKeyword_1_1_0_1());
                                  
  
                              	        if (current==null) {
                              	            current = createModelElement(grammarAccess.getComparisonRule());
                              	        }
                                     		setWithLastConsumed(current, "operator", lv_operator_2_2, null);
                              	    
  
                              }
                              break;
                          case 3 :
                              // InternalSimpleExpressions.g:308:8: lv_operator_2_3= '>='
                              {
                              lv_operator_2_3=(Token)match(input,20,FOLLOW_5); 
  
                                      newLeafNode(lv_operator_2_3, grammarAccess.getComparisonAccess().getOperatorGreaterThanSignEqualsSignKeyword_1_1_0_2());
                                  
  
                              	        if (current==null) {
                              	            current = createModelElement(grammarAccess.getComparisonRule());
                              	        }
                                     		setWithLastConsumed(current, "operator", lv_operator_2_3, null);
                              	    
  
                              }
                              break;
  
                      }
  
  
                      }
  
  
                      }
  
                      // InternalSimpleExpressions.g:323:2: ( (lv_right_3_0= rulePrefixExpression ) )
                      // InternalSimpleExpressions.g:324:1: (lv_right_3_0= rulePrefixExpression )
                      {
                      // InternalSimpleExpressions.g:324:1: (lv_right_3_0= rulePrefixExpression )
                      // InternalSimpleExpressions.g:325:3: lv_right_3_0= rulePrefixExpression
                      {
                       
                      	        newCompositeNode(grammarAccess.getComparisonAccess().getRightPrefixExpressionParserRuleCall_1_2_0()); 
                      	    
                      pushFollow(FOLLOW_2);
                      lv_right_3_0=rulePrefixExpression();
  
                      state._fsp--;
  
  
                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getComparisonRule());
                      	        }
                             		set(
                             			current, 
                             			"right",
                              		lv_right_3_0, 
                              		"org.eclipse.xtext.xtext.generator.parser.antlr.splitting.SimpleExpressions.PrefixExpression");
                      	        afterParserOrEnumRuleCall();
                      	    
  
                      }
  
  
                      }
  
  
                      }
                      break;
  
              }
  
  
              }
  
  
              }
  
               leaveRule(); 
          }
           
              catch (RecognitionException re) { 
                  recover(input,re); 
                  appendSkippedTokens();
              } 
          finally {
          }
          return current;
      }