docs: public final QueryParser.expr_return expr() throws RecognitionException {
          QueryParser.expr_return retval = new QueryParser.expr_return();
          retval.start = input.LT(1);
  
          CommonTree root_0 = null;
  
          Token EOF2=null;
          QueryParser.or_return or1 = null;
  
  
          CommonTree EOF2_tree=null;
          RewriteRuleTokenStream stream_EOF=new RewriteRuleTokenStream(adaptor,"token EOF");
          RewriteRuleSubtreeStream stream_or=new RewriteRuleSubtreeStream(adaptor,"rule or");
          try {
              // src/riemann/Query.g:26:6: ( ( or EOF ) -> or )
              // src/riemann/Query.g:26:8: ( or EOF )
              {
              // src/riemann/Query.g:26:8: ( or EOF )
              // src/riemann/Query.g:26:9: or EOF
              {
              pushFollow(FOLLOW_or_in_expr145);
              or1=or();
  
              state._fsp--;
  
              stream_or.add(or1.getTree());
              EOF2=(Token)match(input,EOF,FOLLOW_EOF_in_expr147);  
              stream_EOF.add(EOF2);
  
  
              }
  
  
  
              // AST REWRITE
              // elements: or
              // 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();
              // 26:17: -> or
              {
                  adaptor.addChild(root_0, stream_or.nextTree());
  
              }
  
              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 {
          }
          return retval;
      }