aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorherbelin2003-09-18 17:24:38 +0000
committerherbelin2003-09-18 17:24:38 +0000
commite2773e97af1fc19f92839abba42a0b06eed993b4 (patch)
tree48efd75366e7de8d7824bc742faa55e1f25d65a1
parent25b2bf4053c7c97f70c9dfef465f5eeb414fcaaa (diff)
Ajout r gle d'affichage tactiques èéfinies par Notation
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@4409 85f007b7-540e-0410-9357-904b9bb8a0f7
-rw-r--r--parsing/egrammar.mli3
-rw-r--r--toplevel/metasyntax.ml37
2 files changed, 37 insertions, 3 deletions
diff --git a/parsing/egrammar.mli b/parsing/egrammar.mli
index 091f98424c..caa144ce99 100644
--- a/parsing/egrammar.mli
+++ b/parsing/egrammar.mli
@@ -50,3 +50,6 @@ val reset_extend_grammars_v8 : unit -> unit
val subst_all_grammar_command :
Names.substitution -> all_grammar_command -> all_grammar_command
+
+val interp_entry_name : string -> string ->
+ entry_type * Token.t Gramext.g_symbol
diff --git a/toplevel/metasyntax.ml b/toplevel/metasyntax.ml
index 4df5c8d206..88ba115867 100644
--- a/toplevel/metasyntax.ml
+++ b/toplevel/metasyntax.ml
@@ -137,9 +137,40 @@ let (inToken, outToken) =
let add_token_obj s = Lib.add_anonymous_leaf (inToken s)
-(* Grammar rules *)
-let cache_grammar (_,a) = Egrammar.extend_grammar a
-let subst_grammar (_,subst,a) = Egrammar.subst_all_grammar_command subst a
+(* Grammars (especially Tactic Notation) *)
+
+let make_terminal_status = function
+ | VTerm s -> Some s
+ | VNonTerm _ -> None
+
+let qualified_nterm current_univ = function
+ | NtQual (univ, en) -> (univ, en)
+ | NtShort en -> (current_univ, en)
+
+let rec make_tags = function
+ | VTerm s :: l -> make_tags l
+ | VNonTerm (loc, nt, po) :: l ->
+ let (u,nt) = qualified_nterm "tactic" nt in
+ let (etyp, _) = Egrammar.interp_entry_name u nt in
+ etyp :: make_tags l
+ | [] -> []
+
+let declare_pprule = function
+ (* Pretty-printing rules only for Grammar (Tactic Notation) *)
+ | Egrammar.TacticGrammar gl ->
+ let f (s,(s',l),tac) =
+ let pp = (make_tags l, (s',List.map make_terminal_status l)) in
+ Pptactic.declare_extra_tactic_pprule true s pp;
+ Pptactic.declare_extra_tactic_pprule false s pp in
+ List.iter f gl
+ | _ -> ()
+
+let cache_grammar (_,a) =
+ Egrammar.extend_grammar a;
+ declare_pprule a
+
+let subst_grammar (_,subst,a) =
+ Egrammar.subst_all_grammar_command subst a
let (inGrammar, outGrammar) =
declare_object {(default_object "GRAMMAR") with