82 lines
2.4 KiB
OCaml
82 lines
2.4 KiB
OCaml
(* camlp4r *)
|
|
(***********************************************************************)
|
|
(* *)
|
|
(* Camlp4 *)
|
|
(* *)
|
|
(* Daniel de Rauglaudre, projet Cristal, INRIA Rocquencourt *)
|
|
(* *)
|
|
(* Copyright 2002 Institut National de Recherche en Informatique et *)
|
|
(* Automatique. Distributed only by permission. *)
|
|
(* *)
|
|
(***********************************************************************)
|
|
|
|
(* $Id$ *)
|
|
|
|
type grammar 'te =
|
|
{ gtokens : Hashtbl.t Token.pattern (ref int);
|
|
glexer : mutable Token.glexer 'te }
|
|
;
|
|
|
|
type g_entry 'te =
|
|
{ egram : grammar 'te;
|
|
ename : string;
|
|
estart : mutable int -> Stream.t 'te -> Obj.t;
|
|
econtinue : mutable int -> int -> Obj.t -> Stream.t 'te -> Obj.t;
|
|
edesc : mutable g_desc 'te }
|
|
and g_desc 'te =
|
|
[ Dlevels of list (g_level 'te)
|
|
| Dparser of Stream.t 'te -> Obj.t ]
|
|
and g_level 'te =
|
|
{ assoc : g_assoc;
|
|
lname : option string;
|
|
lsuffix : g_tree 'te;
|
|
lprefix : g_tree 'te }
|
|
and g_assoc =
|
|
[ NonA
|
|
| RightA
|
|
| LeftA ]
|
|
and g_symbol 'te =
|
|
[ Smeta of string and list (g_symbol 'te) and Obj.t
|
|
| Snterm of g_entry 'te
|
|
| Snterml of g_entry 'te and string
|
|
| Slist0 of g_symbol 'te
|
|
| Slist0sep of g_symbol 'te and g_symbol 'te
|
|
| Slist1 of g_symbol 'te
|
|
| Slist1sep of g_symbol 'te and g_symbol 'te
|
|
| Sopt of g_symbol 'te
|
|
| Sself
|
|
| Snext
|
|
| Stoken of Token.pattern
|
|
| Stree of g_tree 'te ]
|
|
and g_action = Obj.t
|
|
and g_tree 'te =
|
|
[ Node of g_node 'te
|
|
| LocAct of g_action and list g_action
|
|
| DeadEnd ]
|
|
and g_node 'te =
|
|
{ node : g_symbol 'te; son : g_tree 'te; brother : g_tree 'te }
|
|
;
|
|
|
|
type position =
|
|
[ First
|
|
| Last
|
|
| Before of string
|
|
| After of string
|
|
| Level of string ]
|
|
;
|
|
|
|
value levels_of_rules :
|
|
g_entry 'te -> option position ->
|
|
list
|
|
(option string * option g_assoc *
|
|
list (list (g_symbol 'te) * g_action)) ->
|
|
list (g_level 'te);
|
|
value srules : list (list (g_symbol 'te) * g_action) -> g_symbol 'te;
|
|
external action : 'a -> g_action = "%identity";
|
|
|
|
value delete_rule_in_level_list :
|
|
g_entry 'te -> list (g_symbol 'te) -> list (g_level 'te) ->
|
|
list (g_level 'te);
|
|
|
|
value warning_verbose : ref bool;
|