let rec file l (strm__ : _ Stream.t) = match try Some (ident strm__) with Stream.Failure -> None with Some id -> begin match Stream.peek strm__ with Some (Genlex.Kwd "="-> Stream.junk strm__; let v = try value strm__ with Stream.Failure -> raise (Stream.Error ""in begin try file ((id, v) :: l) strm__ with Stream.Failure -> raise (Stream.Error ""end | _ -> raise (Stream.Error ""end | _ -> List.rev l
    and value (strm__ : _ Stream.t) = match Stream.peek strm__ with Some (Genlex.Kwd "{"-> Stream.junk strm__; let v = try file [] strm__ with Stream.Failure -> raise (Stream.Error ""in begin match Stream.peek strm__ with Some (Genlex.Kwd "}"-> Stream.junk strm__; Section v | _ -> raise (Stream.Error ""end | Some (Genlex.Ident s) -> Stream.junk strm__; String s | Some (Genlex.String s) -> Stream.junk strm__; String s | Some (Genlex.Int i) -> Stream.junk strm__; Int i | Some (Genlex.Float f) -> Stream.junk strm__; Float f | Some (Genlex.Char c) -> Stream.junk strm__; String (String.make 1 c) | Some (Genlex.Kwd "["-> Stream.junk strm__; let v = try list [] strm__ with Stream.Failure -> raise (Stream.Error ""in List v | Some (Genlex.Kwd "("-> Stream.junk strm__; let v = try list [] strm__ with Stream.Failure -> raise (Stream.Error ""in Tuple v | _ -> raise Stream.Failure
    and ident (strm__ : _ Stream.t) = match Stream.peek strm__ with Some (Genlex.Ident s) -> Stream.junk strm__; s | Some (Genlex.String s) -> Stream.junk strm__; s | _ -> raise Stream.Failure
    and list l (strm__ : _ Stream.t) = match Stream.peek strm__ with Some (Genlex.Kwd ";"-> Stream.junk strm__; begin try list l strm__ with Stream.Failure -> raise (Stream.Error ""end | Some (Genlex.Kwd ","-> Stream.junk strm__; begin try list l strm__ with Stream.Failure -> raise (Stream.Error ""end | _ -> match try Some (value strm__) with Stream.Failure -> None with Some v -> begin try list (v :: l) strm__ with Stream.Failure -> raise (Stream.Error ""end | _ -> match Stream.peek strm__ with Some (Genlex.Kwd "]"-> Stream.junk strm__; List.rev l | Some (Genlex.Kwd ")"-> Stream.junk strm__; List.rev l | _ -> raise Stream.Failure