docs: public final EventFilterParser.regex_predicate_return regex_predicate() throws RecognitionException {
          EventFilterParser.regex_predicate_return retval = new EventFilterParser.regex_predicate_return();
          retval.start = input.LT(1);
  
  
          CommonTree root_0 = null;
  
          Token MATCHES75=null;
          Token STRING76=null;
          EventFilterParser.path_function_return path_function74 =null;
  
  
          CommonTree MATCHES75_tree=null;
          CommonTree STRING76_tree=null;
          RewriteRuleTokenStream stream_MATCHES=new RewriteRuleTokenStream(adaptor,"token MATCHES");
          RewriteRuleTokenStream stream_STRING=new RewriteRuleTokenStream(adaptor,"token STRING");
          RewriteRuleSubtreeStream stream_path_function=new RewriteRuleSubtreeStream(adaptor,"rule path_function");
          try {
              // EventFilter.g:156:2: ( path_function MATCHES STRING -> ^( MATCHES path_function STRING ) )
              // EventFilter.g:156:6: path_function MATCHES STRING
              {
              pushFollow(FOLLOW_path_function_in_regex_predicate909);
              path_function74=path_function();
  
              state._fsp--;
  
              stream_path_function.add(path_function74.getTree());
  
              MATCHES75=(Token)match(input,MATCHES,FOLLOW_MATCHES_in_regex_predicate911);
              stream_MATCHES.add(MATCHES75);
  
  
              STRING76=(Token)match(input,STRING,FOLLOW_STRING_in_regex_predicate913);
              stream_STRING.add(STRING76);
  
  
              // AST REWRITE
              // elements: MATCHES, path_function, 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();
              // 156:35: -> ^( MATCHES path_function STRING )
              {
                  // EventFilter.g:156:38: ^( MATCHES path_function STRING )
                  {
                  CommonTree root_1 = (CommonTree)adaptor.nil();
                  root_1 = (CommonTree)adaptor.becomeRoot(
                  new MatchesTreeNode(stream_MATCHES.nextToken())
                  , root_1);
  
                  adaptor.addChild(root_1, stream_path_function.nextTree());
  
                  adaptor.addChild(root_1,
                  new StringTreeNode(stream_STRING.nextToken())
                  );
  
                  adaptor.addChild(root_0, root_1);
                  }
  
              }
  
  
              retval.tree = root_0;
  
              }
  
              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;
      }