|
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 |
*)
|