docs: public final EObject ruleXExpressionOrVarDeclaration() throws RecognitionException {
          EObject current = null;
  
          EObject this_XVariableDeclaration_0 = null;
  
          EObject this_XExpression_1 = null;
  
  
  
          	enterRule();
  
          try {
              // InternalSARL.g:14822:2: ( ( ( ( ( () ( ( ( ( ( 'var' ) ) | 'val' ) ( ( 'extension' ) )? ) | ( ( ( 'extension' ) ) ( ( ( 'var' ) ) | 'val' ) ) ) ) )=>this_XVariableDeclaration_0= ruleXVariableDeclaration ) | this_XExpression_1= ruleXExpression ) )
              // InternalSARL.g:14823:2: ( ( ( ( () ( ( ( ( ( 'var' ) ) | 'val' ) ( ( 'extension' ) )? ) | ( ( ( 'extension' ) ) ( ( ( 'var' ) ) | 'val' ) ) ) ) )=>this_XVariableDeclaration_0= ruleXVariableDeclaration ) | this_XExpression_1= ruleXExpression )
              {
              // InternalSARL.g:14823:2: ( ( ( ( () ( ( ( ( ( 'var' ) ) | 'val' ) ( ( 'extension' ) )? ) | ( ( ( 'extension' ) ) ( ( ( 'var' ) ) | 'val' ) ) ) ) )=>this_XVariableDeclaration_0= ruleXVariableDeclaration ) | this_XExpression_1= ruleXExpression )
              int alt346=2;
              int LA346_0 = input.LA(1);
  
              if ( (LA346_0==65) && (synpred51_InternalSARL())) {
                  alt346=1;
              }
              else if ( (LA346_0==66) && (synpred51_InternalSARL())) {
                  alt346=1;
              }
              else if ( (LA346_0==45) ) {
                  switch ( input.LA(2) ) {
                  case EOF:
                  case RULE_STRING:
                  case RULE_ID:
                  case RULE_RICH_TEXT:
                  case RULE_RICH_TEXT_START:
                  case RULE_RICH_TEXT_INBETWEEN:
                  case RULE_COMMENT_RICH_TEXT_INBETWEEN:
                  case RULE_RICH_TEXT_END:
                  case RULE_COMMENT_RICH_TEXT_END:
                  case RULE_HEX:
                  case RULE_INT:
                  case RULE_DECIMAL:
                  case 25:
                  case 26:
                  case 28:
                  case 29:
                  case 30:
                  case 32:
                  case 36:
                  case 39:
                  case 40:
                  case 41:
                  case 42:
                  case 43:
                  case 44:
                  case 45:
                  case 47:
                  case 48:
                  case 49:
                  case 51:
                  case 55:
                  case 56:
                  case 59:
                  case 60:
                  case 61:
                  case 62:
                  case 63:
                  case 64:
                  case 67:
                  case 68:
                  case 70:
                  case 71:
                  case 72:
                  case 73:
                  case 74:
                  case 75:
                  case 76:
                  case 77:
                  case 78:
                  case 79:
                  case 80:
                  case 81:
                  case 82:
                  case 83:
                  case 84:
                  case 85:
                  case 86:
                  case 87:
                  case 88:
                  case 89:
                  case 90:
                  case 91:
                  case 92:
                  case 93:
                  case 94:
                  case 95:
                  case 96:
                  case 106:
                  case 107:
                  case 108:
                  case 109:
                  case 110:
                  case 111:
                  case 112:
                  case 113:
                  case 114:
                  case 115:
                  case 116:
                  case 117:
                  case 118:
                  case 119:
                  case 120:
                  case 121:
                  case 122:
                  case 123:
                  case 124:
                  case 125:
                  case 126:
                  case 127:
                  case 128:
                  case 129:
                  case 131:
                  case 132:
                  case 133:
                  case 134:
                  case 135:
                  case 136:
                  case 137:
                  case 138:
                  case 139:
                  case 140:
                      {
                      alt346=2;
                      }
                      break;
                  case 65:
                      {
                      int LA346_5 = input.LA(3);
  
                      if ( (synpred51_InternalSARL()) ) {
                          alt346=1;
                      }
                      else if ( (true) ) {
                          alt346=2;
                      }
                      else {
                          if (state.backtracking>0) {state.failed=true; return current;}
                          NoViableAltException nvae =
                              new NoViableAltException("", 346, 5, input);
  
                          throw nvae;
                      }
                      }
                      break;
                  case 66:
                      {
                      int LA346_6 = input.LA(3);
  
                      if ( (synpred51_InternalSARL()) ) {
                          alt346=1;
                      }
                      else if ( (true) ) {
                          alt346=2;
                      }
                      else {
                          if (state.backtracking>0) {state.failed=true; return current;}
                          NoViableAltException nvae =
                              new NoViableAltException("", 346, 6, input);
  
                          throw nvae;
                      }
                      }
                      break;
                  default:
                      if (state.backtracking>0) {state.failed=true; return current;}
                      NoViableAltException nvae =
                          new NoViableAltException("", 346, 3, input);
  
                      throw nvae;
                  }
  
              }
              else if ( ((LA346_0>=RULE_STRING && LA346_0<=RULE_RICH_TEXT_START)||(LA346_0>=RULE_HEX && LA346_0<=RULE_DECIMAL)||LA346_0==25||(LA346_0>=28 && LA346_0<=29)||LA346_0==36||(LA346_0>=39 && LA346_0<=40)||(LA346_0>=42 && LA346_0<=44)||(LA346_0>=48 && LA346_0<=49)||LA346_0==51||LA346_0==55||(LA346_0>=60 && LA346_0<=63)||(LA346_0>=67 && LA346_0<=68)||(LA346_0>=73 && LA346_0<=75)||(LA346_0>=78 && LA346_0<=96)||LA346_0==106||LA346_0==129||(LA346_0>=131 && LA346_0<=140)) ) {
                  alt346=2;
              }
              else {
                  if (state.backtracking>0) {state.failed=true; return current;}
                  NoViableAltException nvae =
                      new NoViableAltException("", 346, 0, input);
  
                  throw nvae;
              }
              switch (alt346) {
                  case 1 :
                      // InternalSARL.g:14824:3: ( ( ( () ( ( ( ( ( 'var' ) ) | 'val' ) ( ( 'extension' ) )? ) | ( ( ( 'extension' ) ) ( ( ( 'var' ) ) | 'val' ) ) ) ) )=>this_XVariableDeclaration_0= ruleXVariableDeclaration )
                      {
                      // InternalSARL.g:14824:3: ( ( ( () ( ( ( ( ( 'var' ) ) | 'val' ) ( ( 'extension' ) )? ) | ( ( ( 'extension' ) ) ( ( ( 'var' ) ) | 'val' ) ) ) ) )=>this_XVariableDeclaration_0= ruleXVariableDeclaration )
                      // InternalSARL.g:14825:4: ( ( () ( ( ( ( ( 'var' ) ) | 'val' ) ( ( 'extension' ) )? ) | ( ( ( 'extension' ) ) ( ( ( 'var' ) ) | 'val' ) ) ) ) )=>this_XVariableDeclaration_0= ruleXVariableDeclaration
                      {
                      if ( state.backtracking==0 ) {
  
                        				newCompositeNode(grammarAccess.getXExpressionOrVarDeclarationAccess().getXVariableDeclarationParserRuleCall_0());
                        			
                      }
                      pushFollow(FOLLOW_2);
                      this_XVariableDeclaration_0=ruleXVariableDeclaration();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        				current = this_XVariableDeclaration_0;
                        				afterParserOrEnumRuleCall();
                        			
                      }
  
                      }
  
  
                      }
                      break;
                  case 2 :
                      // InternalSARL.g:14875:3: this_XExpression_1= ruleXExpression
                      {
                      if ( state.backtracking==0 ) {
  
                        			newCompositeNode(grammarAccess.getXExpressionOrVarDeclarationAccess().getXExpressionParserRuleCall_1());
                        		
                      }
                      pushFollow(FOLLOW_2);
                      this_XExpression_1=ruleXExpression();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current = this_XExpression_1;
                        			afterParserOrEnumRuleCall();
                        		
                      }
  
                      }
                      break;
  
              }
  
  
              }
  
              if ( state.backtracking==0 ) {
  
                	leaveRule();
  
              }
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }