type token =
  | GROUP
  | ITEM
  | EMPTY
  | STATE
  | DESC
  | BEFORE
  | EOF
  | String of (string)
  | Date of (Tdl_date.t)
  | State of (Tdl_types.state)
  | LPAR
  | RPAR
  | OR
  | AND
  | NOT

open Parsing;;
# 2 "tdl/tdl_filter_parser.mly"
open Tdl_filter
# 22 "tdl/tdl_filter_parser.ml"
let yytransl_const = [|
  257 (* GROUP *);
  258 (* ITEM *);
  259 (* EMPTY *);
  260 (* STATE *);
  261 (* DESC *);
  262 (* BEFORE *);
    0 (* EOF *);
  266 (* LPAR *);
  267 (* RPAR *);
  268 (* OR *);
  269 (* AND *);
  270 (* NOT *);
    0|]

let yytransl_block = [|
  263 (* String *);
  264 (* Date *);
  265 (* State *);
    0|]

let yylhs = "\255\255\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\000\000"

let yylen = "\002\000\002\000\002\000\001\000\002\000\002\000\002\000\002\000\003\000\003\000\003\000\002\000"

let yydefred = "\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\002\000\004\000\005\000\006\000\000\000\007\000\000\000\000\000\t\000\000\000\008\000"

let yydgoto = "\002\000\011\000"

let yysindex = "\t\000\001\255\000\000\249\254\007\255\000\000\008\255\016\255\017\255\001\255\001\255\000\255\000\000\000\000\000\000\000\000\000\000\t\255\000\000\001\255\001\255\000\000\003\255\000\000"

let yyrindex = "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000"

let yygindex = "\000\000\255\255"

let yytablesize = 269
let yytable = "\012\000\n\000\003\000\004\000\005\000\006\000\007\000\008\000\017\000\018\000\001\000\t\000\019\000\020\000\013\000\n\000\020\000\014\000\022\000\023\000\021\000\019\000\020\000\015\000\011\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\000\n\000"

let yycheck = "\007\001\000\000\001\001\002\001\003\001\004\001\005\001\006\001\t\000\n\000\001\000\n\001\012\001\013\001\007\001\014\001\013\001\t\001\019\000\020\000\011\001\012\001\013\001\007\001\000\000\008\001\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\011\001\012\001"

let yynames_const = "GROUP\000ITEM\000EMPTY\000STATE\000DESC\000BEFORE\000EOF\000LPAR\000RPAR\000OR\000AND\000NOT\000"

let yynames_block = "String\000Date\000State\000"

let yyact = [|
  (fun _ -> failwith "parser")
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 0 : string) in
    Obj.repr(
# 19 "tdl/tdl_filter_parser.mly"
               (
  Tdl_filter.Group _2
  )
# 176 "tdl/tdl_filter_parser.ml"
               : Tdl_filter.filter))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 0 : string) in
    Obj.repr(
# 22 "tdl/tdl_filter_parser.mly"
              (
  Tdl_filter.Item _2
  )
# 185 "tdl/tdl_filter_parser.ml"
               : Tdl_filter.filter))
; (fun __caml_parser_env ->
    Obj.repr(
# 25 "tdl/tdl_filter_parser.mly"
        (
  Tdl_filter.Empty
  )
# 193 "tdl/tdl_filter_parser.ml"
               : Tdl_filter.filter))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 0 : Tdl_types.state) in
    Obj.repr(
# 28 "tdl/tdl_filter_parser.mly"
              (
  Tdl_filter.State _2
  )
# 202 "tdl/tdl_filter_parser.ml"
               : Tdl_filter.filter))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 0 : string) in
    Obj.repr(
# 31 "tdl/tdl_filter_parser.mly"
              (
  Tdl_filter.Desc _2
  )
# 211 "tdl/tdl_filter_parser.ml"
               : Tdl_filter.filter))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 0 : Tdl_date.t) in
    Obj.repr(
# 34 "tdl/tdl_filter_parser.mly"
              (
  Tdl_filter.Before _2
  )
# 220 "tdl/tdl_filter_parser.ml"
               : Tdl_filter.filter))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 0 : Tdl_filter.filter) in
    Obj.repr(
# 37 "tdl/tdl_filter_parser.mly"
             (
  Tdl_filter.Not _2
  )
# 229 "tdl/tdl_filter_parser.ml"
               : Tdl_filter.filter))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : Tdl_filter.filter) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : Tdl_filter.filter) in
    Obj.repr(
# 40 "tdl/tdl_filter_parser.mly"
                    (
  Tdl_filter.And (_1, _3)
  )
# 239 "tdl/tdl_filter_parser.ml"
               : Tdl_filter.filter))
; (fun __caml_parser_env ->
    let _2 = (Parsing.peek_val __caml_parser_env 1 : Tdl_filter.filter) in
    Obj.repr(
# 43 "tdl/tdl_filter_parser.mly"
                   (
  _2
  )
# 248 "tdl/tdl_filter_parser.ml"
               : Tdl_filter.filter))
; (fun __caml_parser_env ->
    let _1 = (Parsing.peek_val __caml_parser_env 2 : Tdl_filter.filter) in
    let _3 = (Parsing.peek_val __caml_parser_env 0 : Tdl_filter.filter) in
    Obj.repr(
# 46 "tdl/tdl_filter_parser.mly"
                   (
  Tdl_filter.Or (_1, _3)
  )
# 258 "tdl/tdl_filter_parser.ml"
               : Tdl_filter.filter))
(* Entry filter *)
; (fun __caml_parser_env -> raise (Parsing.YYexit (Parsing.peek_val __caml_parser_env 0)))
|]
let yytables =
  { Parsing.actions=yyact;
    Parsing.transl_const=yytransl_const;
    Parsing.transl_block=yytransl_block;
    Parsing.lhs=yylhs;
    Parsing.len=yylen;
    Parsing.defred=yydefred;
    Parsing.dgoto=yydgoto;
    Parsing.sindex=yysindex;
    Parsing.rindex=yyrindex;
    Parsing.gindex=yygindex;
    Parsing.tablesize=yytablesize;
    Parsing.table=yytable;
    Parsing.check=yycheck;
    Parsing.error_function=parse_error;
    Parsing.names_const=yynames_const;
    Parsing.names_block=yynames_block }
let filter (lexfun : Lexing.lexbuf -> token) (lexbuf : Lexing.lexbuf) =
   (Parsing.yyparse yytables 1 lexfun lexbuf : Tdl_filter.filter)
;;