From 55b6884dda47f773156fa2484e927430c53b4e05 Mon Sep 17 00:00:00 2001 From: herbelin Date: Tue, 31 Jan 2006 10:43:51 +0000 Subject: Ajout de fichiers d'interprétation de la syntaxe primitive pour string et char git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@7966 85f007b7-540e-0410-9357-904b9bb8a0f7 --- Makefile | 8 ++--- parsing/g_ascii_syntax.ml | 74 ++++++++++++++++++++++++++++++++++++++++++++++ parsing/g_string_syntax.ml | 60 +++++++++++++++++++++++++++++++++++++ 3 files changed, 137 insertions(+), 5 deletions(-) create mode 100644 parsing/g_ascii_syntax.ml create mode 100644 parsing/g_string_syntax.ml diff --git a/Makefile b/Makefile index 30a962b67e..67a803ca22 100644 --- a/Makefile +++ b/Makefile @@ -174,12 +174,10 @@ PARSING=\ parsing/printmod.cmo parsing/prettyp.cmo parsing/search.cmo HIGHPARSING=\ - parsing/g_natsyntax.cmo parsing/g_zsyntax.cmo parsing/g_rsyntax.cmo \ parsing/g_constr.cmo parsing/g_vernac.cmo parsing/g_prim.cmo \ - parsing/g_proofs.cmo parsing/g_tactic.cmo parsing/g_ltac.cmo - -ARITHSYNTAX=\ - parsing/g_natsyntax.cmo parsing/g_zsyntax.cmo parsing/g_rsyntax.cmo + parsing/g_proofs.cmo parsing/g_tactic.cmo parsing/g_ltac.cmo \ + parsing/g_natsyntax.cmo parsing/g_zsyntax.cmo parsing/g_rsyntax.cmo \ + parsing/g_ascii_syntax.cmo parsing/g_string_syntax.cmo TACTICS=\ tactics/dn.cmo tactics/termdn.cmo tactics/btermdn.cmo \ diff --git a/parsing/g_ascii_syntax.ml b/parsing/g_ascii_syntax.ml new file mode 100644 index 0000000000..4472621f72 --- /dev/null +++ b/parsing/g_ascii_syntax.ml @@ -0,0 +1,74 @@ +(***********************************************************************) +(* v * The Coq Proof Assistant / The Coq Development Team *) +(* 0 + | RRef (_,k)::l when k = glob_true -> 1+2*(uninterp_bool_list (n-1) l) + | RRef (_,k)::l when k = glob_false -> 2*(uninterp_bool_list (n-1) l) + | _ -> raise Non_closed_ascii in + try + let rec aux = function + | RApp (_,RRef (_,k),l) when k = glob_Ascii -> uninterp_bool_list 8 l + | _ -> raise Non_closed_ascii in + Some (aux r) + with + Non_closed_ascii -> None + +let make_ascii_string n = + if n>=32 && n<=126 then String.make 1 (char_of_int n) + else Printf.sprintf "%03d" n + +let uninterp_ascii_string r = option_app make_ascii_string (uninterp_ascii r) + +let _ = + Notation.declare_string_interpreter "char_scope" + (glob_ascii,["Coq";"Strings";"Ascii"]) + interp_ascii_string + ([RRef (dummy_loc,glob_Ascii)], uninterp_ascii_string, true) diff --git a/parsing/g_string_syntax.ml b/parsing/g_string_syntax.ml new file mode 100644 index 0000000000..d4d83f6d27 --- /dev/null +++ b/parsing/g_string_syntax.ml @@ -0,0 +1,60 @@ +(***********************************************************************) +(* v * The Coq Proof Assistant / The Coq Development Team *) +(* + (match uninterp_ascii a with + | Some c -> Buffer.add_char b (Char.chr c); aux s + | _ -> raise Non_closed_string) + | RRef (_,z) when z = glob_EmptyString -> + Some (Buffer.contents b) + | _ -> + raise Non_closed_string + in aux r + with + Non_closed_string -> None + +let _ = + Notation.declare_string_interpreter "string_scope" + (glob_string,["Coq";"Strings";"String"]) + interp_string + ([RRef (dummy_loc,glob_String); RRef (dummy_loc,glob_EmptyString)], + uninterp_string, true) -- cgit v1.2.3