Blame camlp4/Camlp4/Struct/Grammar/Find.ml

Packit 1f8b6b
(****************************************************************************)
Packit 1f8b6b
(*                                                                          *)
Packit 1f8b6b
(*                                   OCaml                                  *)
Packit 1f8b6b
(*                                                                          *)
Packit 1f8b6b
(*                            INRIA Rocquencourt                            *)
Packit 1f8b6b
(*                                                                          *)
Packit 1f8b6b
(*  Copyright  2006   Institut National de Recherche  en  Informatique et   *)
Packit 1f8b6b
(*  en Automatique.  All rights reserved.  This file is distributed under   *)
Packit 1f8b6b
(*  the terms of the GNU Library General Public License, with the special   *)
Packit 1f8b6b
(*  exception on linking described in LICENSE at the top of the Camlp4      *)
Packit 1f8b6b
(*  source tree.                                                            *)
Packit 1f8b6b
(*                                                                          *)
Packit 1f8b6b
(****************************************************************************)
Packit 1f8b6b
Packit 1f8b6b
(* Authors:
Packit 1f8b6b
 * - Daniel de Rauglaudre: initial version
Packit 1f8b6b
 * - Nicolas Pouillard: refactoring
Packit 1f8b6b
 *)
Packit 1f8b6b
(*
Packit 1f8b6b
      value entry e s =
Packit 1f8b6b
        let rec find_levels =
Packit 1f8b6b
          fun
Packit 1f8b6b
          [ [] -> None
Packit 1f8b6b
          | [lev :: levs] ->
Packit 1f8b6b
              match find_tree lev.lsuffix with
Packit 1f8b6b
              [ None ->
Packit 1f8b6b
                  match find_tree lev.lprefix with
Packit 1f8b6b
                  [ None -> find_levels levs
Packit 1f8b6b
                  | x -> x ]
Packit 1f8b6b
              | x -> x ] ]
Packit 1f8b6b
        and symbol =
Packit 1f8b6b
          fun
Packit 1f8b6b
          [ Snterm e -> if e.ename = s then Some e else None
Packit 1f8b6b
          | Snterml e _ -> if e.ename = s then Some e else None
Packit 1f8b6b
          | Smeta _ sl _ -> find_symbol_list sl
Packit 1f8b6b
          | Slist0 s -> find_symbol s
Packit 1f8b6b
          | Slist0sep s _ -> find_symbol s
Packit 1f8b6b
          | Slist1 s -> find_symbol s
Packit 1f8b6b
          | Slist1sep s _ -> find_symbol s
Packit 1f8b6b
          | Sopt s -> find_symbol s
Packit 1f8b6b
          | Stree t -> find_tree t
Packit 1f8b6b
          | Sself | Snext | Stoken _ | Stoken_fun _ -> None ]
Packit 1f8b6b
        and symbol_list =
Packit 1f8b6b
          fun
Packit 1f8b6b
          [ [s :: sl] ->
Packit 1f8b6b
              match find_symbol s with
Packit 1f8b6b
              [ None -> find_symbol_list sl
Packit 1f8b6b
              | x -> x ]
Packit 1f8b6b
          | [] -> None ]
Packit 1f8b6b
        and tree =
Packit 1f8b6b
          fun
Packit 1f8b6b
          [ Node {node = s; brother = bro; son = son} ->
Packit 1f8b6b
              match find_symbol s with
Packit 1f8b6b
              [ None ->
Packit 1f8b6b
                  match find_tree bro with
Packit 1f8b6b
                  [ None -> find_tree son
Packit 1f8b6b
                  | x -> x ]
Packit 1f8b6b
              | x -> x ]
Packit 1f8b6b
          | LocAct _ _ | DeadEnd -> None ]
Packit 1f8b6b
        in
Packit 1f8b6b
        match e.edesc with
Packit 1f8b6b
        [ Dlevels levs ->
Packit 1f8b6b
            match find_levels levs with
Packit 1f8b6b
            [ Some e -> e
Packit 1f8b6b
            | None -> raise Not_found ]
Packit 1f8b6b
        | Dparser _ -> raise Not_found ]
Packit 1f8b6b
      ;
Packit 1f8b6b
*)