docs: public final EventFilterParser.time_millis_function_return time_millis_function() throws RecognitionException {
          EventFilterParser.time_millis_function_return retval = new EventFilterParser.time_millis_function_return();
          retval.start = input.LT(1);
  
  
          CommonTree root_0 = null;
  
          Token TIME_MILLIS_FUN_NAME95=null;
          Token char_literal96=null;
          Token STRING97=null;
          Token char_literal98=null;
          Token STRING99=null;
          Token char_literal100=null;
  
          CommonTree TIME_MILLIS_FUN_NAME95_tree=null;
          CommonTree char_literal96_tree=null;
          CommonTree STRING97_tree=null;
          CommonTree char_literal98_tree=null;
          CommonTree STRING99_tree=null;
          CommonTree char_literal100_tree=null;
          RewriteRuleTokenStream stream_35=new RewriteRuleTokenStream(adaptor,"token 35");
          RewriteRuleTokenStream stream_33=new RewriteRuleTokenStream(adaptor,"token 33");
          RewriteRuleTokenStream stream_34=new RewriteRuleTokenStream(adaptor,"token 34");
          RewriteRuleTokenStream stream_TIME_MILLIS_FUN_NAME=new RewriteRuleTokenStream(adaptor,"token TIME_MILLIS_FUN_NAME");
          RewriteRuleTokenStream stream_STRING=new RewriteRuleTokenStream(adaptor,"token STRING");
  
          try {
              // EventFilter.g:187:2: ( TIME_MILLIS_FUN_NAME '(' STRING ',' STRING ')' -> ^( TIME_MILLIS_FUN_NAME STRING STRING ) |)
              int alt15=2;
              int LA15_0 = input.LA(1);
  
              if ( (LA15_0==TIME_MILLIS_FUN_NAME) ) {
                  alt15=1;
              }
              else if ( (LA15_0==EOF||LA15_0==AND||LA15_0==OR||(LA15_0 >= 34 && LA15_0 <= 35)) ) {
                  alt15=2;
              }
              else {
                  NoViableAltException nvae =
                      new NoViableAltException("", 15, 0, input);
  
                  throw nvae;
  
              }
              switch (alt15) {
                  case 1 :
                      // EventFilter.g:187:4: TIME_MILLIS_FUN_NAME '(' STRING ',' STRING ')'
                      {
                      TIME_MILLIS_FUN_NAME95=(Token)match(input,TIME_MILLIS_FUN_NAME,FOLLOW_TIME_MILLIS_FUN_NAME_in_time_millis_function1132);
                      stream_TIME_MILLIS_FUN_NAME.add(TIME_MILLIS_FUN_NAME95);
  
  
                      char_literal96=(Token)match(input,33,FOLLOW_33_in_time_millis_function1134);
                      stream_33.add(char_literal96);
  
  
                      STRING97=(Token)match(input,STRING,FOLLOW_STRING_in_time_millis_function1136);
                      stream_STRING.add(STRING97);
  
  
                      char_literal98=(Token)match(input,35,FOLLOW_35_in_time_millis_function1138);
                      stream_35.add(char_literal98);
  
  
                      STRING99=(Token)match(input,STRING,FOLLOW_STRING_in_time_millis_function1140);
                      stream_STRING.add(STRING99);
  
  
                      char_literal100=(Token)match(input,34,FOLLOW_34_in_time_millis_function1142);
                      stream_34.add(char_literal100);
  
  
                      // AST REWRITE
                      // elements: TIME_MILLIS_FUN_NAME, STRING, STRING
                      // token labels:
                      // rule labels: retval
                      // token list labels:
                      // rule list labels:
                      // wildcard labels:
                      retval.tree = root_0;
                      RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);
  
                      root_0 = (CommonTree)adaptor.nil();
                      // 187:51: -> ^( TIME_MILLIS_FUN_NAME STRING STRING )
                      {
                          // EventFilter.g:187:54: ^( TIME_MILLIS_FUN_NAME STRING STRING )
                          {
                          CommonTree root_1 = (CommonTree)adaptor.nil();
                          root_1 = (CommonTree)adaptor.becomeRoot(
                          new TimeMillisValueTreeNode(stream_TIME_MILLIS_FUN_NAME.nextToken())
                          , root_1);
  
                          adaptor.addChild(root_1,
                          new StringTreeNode(stream_STRING.nextToken())
                          );
  
                          adaptor.addChild(root_1,
                          new StringTreeNode(stream_STRING.nextToken())
                          );
  
                          adaptor.addChild(root_0, root_1);
                          }
  
                      }
  
  
                      retval.tree = root_0;
  
                      }
                      break;
                  case 2 :
                      // EventFilter.g:188:2:
                      {
                      root_0 = (CommonTree)adaptor.nil();
  
  
                      }
                      break;
  
              }
              retval.stop = input.LT(-1);
  
  
              retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
              adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
  
          }
          catch (RecognitionException re) {
              reportError(re);
              recover(input,re);
      	retval.tree = (CommonTree)adaptor.errorNode(input, retval.start, input.LT(-1), re);
  
          }
  
          finally {
          	// do for sure before leaving
          }
          return retval;
      }