docs: public final AntlrDatatypeRuleToken ruleNumber() throws RecognitionException {
          AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
  
          Token this_HEX_0=null;
          Token this_INT_1=null;
          Token this_DECIMAL_2=null;
          Token kw=null;
          Token this_INT_4=null;
          Token this_DECIMAL_5=null;
  
  
          	enterRule();
          	HiddenTokens myHiddenTokenState = ((XtextTokenStream)input).setHiddenTokens();
  
          try {
              // InternalSARL.g:15808:2: ( (this_HEX_0= RULE_HEX | ( (this_INT_1= RULE_INT | this_DECIMAL_2= RULE_DECIMAL ) (kw= '.' (this_INT_4= RULE_INT | this_DECIMAL_5= RULE_DECIMAL ) )? ) ) )
              // InternalSARL.g:15809:2: (this_HEX_0= RULE_HEX | ( (this_INT_1= RULE_INT | this_DECIMAL_2= RULE_DECIMAL ) (kw= '.' (this_INT_4= RULE_INT | this_DECIMAL_5= RULE_DECIMAL ) )? ) )
              {
              // InternalSARL.g:15809:2: (this_HEX_0= RULE_HEX | ( (this_INT_1= RULE_INT | this_DECIMAL_2= RULE_DECIMAL ) (kw= '.' (this_INT_4= RULE_INT | this_DECIMAL_5= RULE_DECIMAL ) )? ) )
              int alt364=2;
              int LA364_0 = input.LA(1);
  
              if ( (LA364_0==RULE_HEX) ) {
                  alt364=1;
              }
              else if ( ((LA364_0>=RULE_INT && LA364_0<=RULE_DECIMAL)) ) {
                  alt364=2;
              }
              else {
                  if (state.backtracking>0) {state.failed=true; return current;}
                  NoViableAltException nvae =
                      new NoViableAltException("", 364, 0, input);
  
                  throw nvae;
              }
              switch (alt364) {
                  case 1 :
                      // InternalSARL.g:15810:3: this_HEX_0= RULE_HEX
                      {
                      this_HEX_0=(Token)match(input,RULE_HEX,FOLLOW_2); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        			current.merge(this_HEX_0);
                        		
                      }
                      if ( state.backtracking==0 ) {
  
                        			newLeafNode(this_HEX_0, grammarAccess.getNumberAccess().getHEXTerminalRuleCall_0());
                        		
                      }
  
                      }
                      break;
                  case 2 :
                      // InternalSARL.g:15818:3: ( (this_INT_1= RULE_INT | this_DECIMAL_2= RULE_DECIMAL ) (kw= '.' (this_INT_4= RULE_INT | this_DECIMAL_5= RULE_DECIMAL ) )? )
                      {
                      // InternalSARL.g:15818:3: ( (this_INT_1= RULE_INT | this_DECIMAL_2= RULE_DECIMAL ) (kw= '.' (this_INT_4= RULE_INT | this_DECIMAL_5= RULE_DECIMAL ) )? )
                      // InternalSARL.g:15819:4: (this_INT_1= RULE_INT | this_DECIMAL_2= RULE_DECIMAL ) (kw= '.' (this_INT_4= RULE_INT | this_DECIMAL_5= RULE_DECIMAL ) )?
                      {
                      // InternalSARL.g:15819:4: (this_INT_1= RULE_INT | this_DECIMAL_2= RULE_DECIMAL )
                      int alt361=2;
                      int LA361_0 = input.LA(1);
  
                      if ( (LA361_0==RULE_INT) ) {
                          alt361=1;
                      }
                      else if ( (LA361_0==RULE_DECIMAL) ) {
                          alt361=2;
                      }
                      else {
                          if (state.backtracking>0) {state.failed=true; return current;}
                          NoViableAltException nvae =
                              new NoViableAltException("", 361, 0, input);
  
                          throw nvae;
                      }
                      switch (alt361) {
                          case 1 :
                              // InternalSARL.g:15820:5: this_INT_1= RULE_INT
                              {
                              this_INT_1=(Token)match(input,RULE_INT,FOLLOW_93); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                					current.merge(this_INT_1);
                                				
                              }
                              if ( state.backtracking==0 ) {
  
                                					newLeafNode(this_INT_1, grammarAccess.getNumberAccess().getINTTerminalRuleCall_1_0_0());
                                				
                              }
  
                              }
                              break;
                          case 2 :
                              // InternalSARL.g:15828:5: this_DECIMAL_2= RULE_DECIMAL
                              {
                              this_DECIMAL_2=(Token)match(input,RULE_DECIMAL,FOLLOW_93); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                					current.merge(this_DECIMAL_2);
                                				
                              }
                              if ( state.backtracking==0 ) {
  
                                					newLeafNode(this_DECIMAL_2, grammarAccess.getNumberAccess().getDECIMALTerminalRuleCall_1_0_1());
                                				
                              }
  
                              }
                              break;
  
                      }
  
                      // InternalSARL.g:15836:4: (kw= '.' (this_INT_4= RULE_INT | this_DECIMAL_5= RULE_DECIMAL ) )?
                      int alt363=2;
                      int LA363_0 = input.LA(1);
  
                      if ( (LA363_0==77) ) {
                          int LA363_1 = input.LA(2);
  
                          if ( ((LA363_1>=RULE_INT && LA363_1<=RULE_DECIMAL)) ) {
                              alt363=1;
                          }
                      }
                      switch (alt363) {
                          case 1 :
                              // InternalSARL.g:15837:5: kw= '.' (this_INT_4= RULE_INT | this_DECIMAL_5= RULE_DECIMAL )
                              {
                              kw=(Token)match(input,77,FOLLOW_151); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                					current.merge(kw);
                                					newLeafNode(kw, grammarAccess.getNumberAccess().getFullStopKeyword_1_1_0());
                                				
                              }
                              // InternalSARL.g:15842:5: (this_INT_4= RULE_INT | this_DECIMAL_5= RULE_DECIMAL )
                              int alt362=2;
                              int LA362_0 = input.LA(1);
  
                              if ( (LA362_0==RULE_INT) ) {
                                  alt362=1;
                              }
                              else if ( (LA362_0==RULE_DECIMAL) ) {
                                  alt362=2;
                              }
                              else {
                                  if (state.backtracking>0) {state.failed=true; return current;}
                                  NoViableAltException nvae =
                                      new NoViableAltException("", 362, 0, input);
  
                                  throw nvae;
                              }
                              switch (alt362) {
                                  case 1 :
                                      // InternalSARL.g:15843:6: this_INT_4= RULE_INT
                                      {
                                      this_INT_4=(Token)match(input,RULE_INT,FOLLOW_2); if (state.failed) return current;
                                      if ( state.backtracking==0 ) {
  
                                        						current.merge(this_INT_4);
                                        					
                                      }
                                      if ( state.backtracking==0 ) {
  
                                        						newLeafNode(this_INT_4, grammarAccess.getNumberAccess().getINTTerminalRuleCall_1_1_1_0());
                                        					
                                      }
  
                                      }
                                      break;
                                  case 2 :
                                      // InternalSARL.g:15851:6: this_DECIMAL_5= RULE_DECIMAL
                                      {
                                      this_DECIMAL_5=(Token)match(input,RULE_DECIMAL,FOLLOW_2); if (state.failed) return current;
                                      if ( state.backtracking==0 ) {
  
                                        						current.merge(this_DECIMAL_5);
                                        					
                                      }
                                      if ( state.backtracking==0 ) {
  
                                        						newLeafNode(this_DECIMAL_5, grammarAccess.getNumberAccess().getDECIMALTerminalRuleCall_1_1_1_1());
                                        					
                                      }
  
                                      }
                                      break;
  
                              }
  
  
                              }
                              break;
  
                      }
  
  
                      }
  
  
                      }
                      break;
  
              }
  
  
              }
  
              if ( state.backtracking==0 ) {
  
                	leaveRule();
  
              }
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
  
              	myHiddenTokenState.restore();
  
          }
          return current;
      }