docs: public final EObject ruleAssumeExpression() throws RecognitionException {
          EObject current = null;
  
          Token lv_isStatic_1_0=null;
          Token otherlv_3=null;
          Token lv_message_4_0=null;
          EObject lv_condition_2_0 = null;
  
  
  
          	enterRule();
  
          try {
              // InternalSARL.g:7599:2: ( ( () ( (lv_isStatic_1_0= 'assume' ) ) ( ( 'abstract' | 'annotation' | 'class' | 'create' | 'def' | 'dispatch' | 'enum' | 'extends' | 'final' | 'implements' | 'import' | 'interface' | 'override' | 'package' | 'public' | 'private' | 'protected' | 'static' | 'throws' | 'strictfp' | 'native' | 'volatile' | 'synchronized' | 'transient' | 'AFTER' | 'BEFORE' | 'SEPARATOR' | 'extension' | '!' | '-' | '+' | 'break' | 'continue' | 'assert' | 'assume' | 'new' | '{' | 'switch' | '<' | 'super' | '#' | '[' | 'false' | 'true' | 'null' | 'typeof' | 'if' | 'for' | 'while' | 'do' | 'throw' | 'return' | 'try' | '(' | RULE_ID | RULE_HEX | RULE_INT | RULE_DECIMAL | RULE_STRING | RULE_RICH_TEXT | RULE_RICH_TEXT_START )=> (lv_condition_2_0= ruleXExpression ) ) ( ( ( ',' )=>otherlv_3= ',' ) ( (lv_message_4_0= RULE_STRING ) ) )? ) )
              // InternalSARL.g:7600:2: ( () ( (lv_isStatic_1_0= 'assume' ) ) ( ( 'abstract' | 'annotation' | 'class' | 'create' | 'def' | 'dispatch' | 'enum' | 'extends' | 'final' | 'implements' | 'import' | 'interface' | 'override' | 'package' | 'public' | 'private' | 'protected' | 'static' | 'throws' | 'strictfp' | 'native' | 'volatile' | 'synchronized' | 'transient' | 'AFTER' | 'BEFORE' | 'SEPARATOR' | 'extension' | '!' | '-' | '+' | 'break' | 'continue' | 'assert' | 'assume' | 'new' | '{' | 'switch' | '<' | 'super' | '#' | '[' | 'false' | 'true' | 'null' | 'typeof' | 'if' | 'for' | 'while' | 'do' | 'throw' | 'return' | 'try' | '(' | RULE_ID | RULE_HEX | RULE_INT | RULE_DECIMAL | RULE_STRING | RULE_RICH_TEXT | RULE_RICH_TEXT_START )=> (lv_condition_2_0= ruleXExpression ) ) ( ( ( ',' )=>otherlv_3= ',' ) ( (lv_message_4_0= RULE_STRING ) ) )? )
              {
              // InternalSARL.g:7600:2: ( () ( (lv_isStatic_1_0= 'assume' ) ) ( ( 'abstract' | 'annotation' | 'class' | 'create' | 'def' | 'dispatch' | 'enum' | 'extends' | 'final' | 'implements' | 'import' | 'interface' | 'override' | 'package' | 'public' | 'private' | 'protected' | 'static' | 'throws' | 'strictfp' | 'native' | 'volatile' | 'synchronized' | 'transient' | 'AFTER' | 'BEFORE' | 'SEPARATOR' | 'extension' | '!' | '-' | '+' | 'break' | 'continue' | 'assert' | 'assume' | 'new' | '{' | 'switch' | '<' | 'super' | '#' | '[' | 'false' | 'true' | 'null' | 'typeof' | 'if' | 'for' | 'while' | 'do' | 'throw' | 'return' | 'try' | '(' | RULE_ID | RULE_HEX | RULE_INT | RULE_DECIMAL | RULE_STRING | RULE_RICH_TEXT | RULE_RICH_TEXT_START )=> (lv_condition_2_0= ruleXExpression ) ) ( ( ( ',' )=>otherlv_3= ',' ) ( (lv_message_4_0= RULE_STRING ) ) )? )
              // InternalSARL.g:7601:3: () ( (lv_isStatic_1_0= 'assume' ) ) ( ( 'abstract' | 'annotation' | 'class' | 'create' | 'def' | 'dispatch' | 'enum' | 'extends' | 'final' | 'implements' | 'import' | 'interface' | 'override' | 'package' | 'public' | 'private' | 'protected' | 'static' | 'throws' | 'strictfp' | 'native' | 'volatile' | 'synchronized' | 'transient' | 'AFTER' | 'BEFORE' | 'SEPARATOR' | 'extension' | '!' | '-' | '+' | 'break' | 'continue' | 'assert' | 'assume' | 'new' | '{' | 'switch' | '<' | 'super' | '#' | '[' | 'false' | 'true' | 'null' | 'typeof' | 'if' | 'for' | 'while' | 'do' | 'throw' | 'return' | 'try' | '(' | RULE_ID | RULE_HEX | RULE_INT | RULE_DECIMAL | RULE_STRING | RULE_RICH_TEXT | RULE_RICH_TEXT_START )=> (lv_condition_2_0= ruleXExpression ) ) ( ( ( ',' )=>otherlv_3= ',' ) ( (lv_message_4_0= RULE_STRING ) ) )?
              {
              // InternalSARL.g:7601:3: ()
              // InternalSARL.g:7602:4: 
              {
              if ( state.backtracking==0 ) {
  
                				current = forceCreateModelElement(
                					grammarAccess.getAssumeExpressionAccess().getSarlAssertExpressionAction_0(),
                					current);
                			
              }
  
              }
  
              // InternalSARL.g:7608:3: ( (lv_isStatic_1_0= 'assume' ) )
              // InternalSARL.g:7609:4: (lv_isStatic_1_0= 'assume' )
              {
              // InternalSARL.g:7609:4: (lv_isStatic_1_0= 'assume' )
              // InternalSARL.g:7610:5: lv_isStatic_1_0= 'assume'
              {
              lv_isStatic_1_0=(Token)match(input,63,FOLLOW_45); if (state.failed) return current;
              if ( state.backtracking==0 ) {
  
                					newLeafNode(lv_isStatic_1_0, grammarAccess.getAssumeExpressionAccess().getIsStaticAssumeKeyword_1_0());
                				
              }
              if ( state.backtracking==0 ) {
  
                					if (current==null) {
                						current = createModelElement(grammarAccess.getAssumeExpressionRule());
                					}
                					setWithLastConsumed(current, "isStatic", true, "assume");
                				
              }
  
              }
  
  
              }
  
              // InternalSARL.g:7622:3: ( ( 'abstract' | 'annotation' | 'class' | 'create' | 'def' | 'dispatch' | 'enum' | 'extends' | 'final' | 'implements' | 'import' | 'interface' | 'override' | 'package' | 'public' | 'private' | 'protected' | 'static' | 'throws' | 'strictfp' | 'native' | 'volatile' | 'synchronized' | 'transient' | 'AFTER' | 'BEFORE' | 'SEPARATOR' | 'extension' | '!' | '-' | '+' | 'break' | 'continue' | 'assert' | 'assume' | 'new' | '{' | 'switch' | '<' | 'super' | '#' | '[' | 'false' | 'true' | 'null' | 'typeof' | 'if' | 'for' | 'while' | 'do' | 'throw' | 'return' | 'try' | '(' | RULE_ID | RULE_HEX | RULE_INT | RULE_DECIMAL | RULE_STRING | RULE_RICH_TEXT | RULE_RICH_TEXT_START )=> (lv_condition_2_0= ruleXExpression ) )
              // InternalSARL.g:7623:4: ( 'abstract' | 'annotation' | 'class' | 'create' | 'def' | 'dispatch' | 'enum' | 'extends' | 'final' | 'implements' | 'import' | 'interface' | 'override' | 'package' | 'public' | 'private' | 'protected' | 'static' | 'throws' | 'strictfp' | 'native' | 'volatile' | 'synchronized' | 'transient' | 'AFTER' | 'BEFORE' | 'SEPARATOR' | 'extension' | '!' | '-' | '+' | 'break' | 'continue' | 'assert' | 'assume' | 'new' | '{' | 'switch' | '<' | 'super' | '#' | '[' | 'false' | 'true' | 'null' | 'typeof' | 'if' | 'for' | 'while' | 'do' | 'throw' | 'return' | 'try' | '(' | RULE_ID | RULE_HEX | RULE_INT | RULE_DECIMAL | RULE_STRING | RULE_RICH_TEXT | RULE_RICH_TEXT_START )=> (lv_condition_2_0= ruleXExpression )
              {
              // InternalSARL.g:7624:4: (lv_condition_2_0= ruleXExpression )
              // InternalSARL.g:7625:5: lv_condition_2_0= ruleXExpression
              {
              if ( state.backtracking==0 ) {
  
                					newCompositeNode(grammarAccess.getAssumeExpressionAccess().getConditionXExpressionParserRuleCall_2_0());
                				
              }
              pushFollow(FOLLOW_72);
              lv_condition_2_0=ruleXExpression();
  
              state._fsp--;
              if (state.failed) return current;
              if ( state.backtracking==0 ) {
  
                					if (current==null) {
                						current = createModelElementForParent(grammarAccess.getAssumeExpressionRule());
                					}
                					set(
                						current,
                						"condition",
                						lv_condition_2_0,
                						"org.eclipse.xtext.xbase.Xbase.XExpression");
                					afterParserOrEnumRuleCall();
                				
              }
  
              }
  
  
              }
  
              // InternalSARL.g:7642:3: ( ( ( ',' )=>otherlv_3= ',' ) ( (lv_message_4_0= RULE_STRING ) ) )?
              int alt216=2;
              int LA216_0 = input.LA(1);
  
              if ( (LA216_0==32) ) {
                  int LA216_1 = input.LA(2);
  
                  if ( (synpred4_InternalSARL()) ) {
                      alt216=1;
                  }
              }
              switch (alt216) {
                  case 1 :
                      // InternalSARL.g:7643:4: ( ( ',' )=>otherlv_3= ',' ) ( (lv_message_4_0= RULE_STRING ) )
                      {
                      // InternalSARL.g:7643:4: ( ( ',' )=>otherlv_3= ',' )
                      // InternalSARL.g:7644:5: ( ',' )=>otherlv_3= ','
                      {
                      otherlv_3=(Token)match(input,32,FOLLOW_73); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					newLeafNode(otherlv_3, grammarAccess.getAssumeExpressionAccess().getCommaKeyword_3_0());
                        				
                      }
  
                      }
  
                      // InternalSARL.g:7650:4: ( (lv_message_4_0= RULE_STRING ) )
                      // InternalSARL.g:7651:5: (lv_message_4_0= RULE_STRING )
                      {
                      // InternalSARL.g:7651:5: (lv_message_4_0= RULE_STRING )
                      // InternalSARL.g:7652:6: lv_message_4_0= RULE_STRING
                      {
                      lv_message_4_0=(Token)match(input,RULE_STRING,FOLLOW_2); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        						newLeafNode(lv_message_4_0, grammarAccess.getAssumeExpressionAccess().getMessageSTRINGTerminalRuleCall_3_1_0());
                        					
                      }
                      if ( state.backtracking==0 ) {
  
                        						if (current==null) {
                        							current = createModelElement(grammarAccess.getAssumeExpressionRule());
                        						}
                        						setWithLastConsumed(
                        							current,
                        							"message",
                        							lv_message_4_0,
                        							"org.eclipse.xtext.xbase.Xtype.STRING");
                        					
                      }
  
                      }
  
  
                      }
  
  
                      }
                      break;
  
              }
  
  
              }
  
  
              }
  
              if ( state.backtracking==0 ) {
  
                	leaveRule();
  
              }
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }