aboutsummaryrefslogtreecommitdiffhomepage
path: root/parsing/g_natsyntax.ml
diff options
context:
space:
mode:
Diffstat (limited to 'parsing/g_natsyntax.ml')
-rw-r--r--parsing/g_natsyntax.ml30
1 files changed, 11 insertions, 19 deletions
diff --git a/parsing/g_natsyntax.ml b/parsing/g_natsyntax.ml
index 9a97f4b06..97ffba1d0 100644
--- a/parsing/g_natsyntax.ml
+++ b/parsing/g_natsyntax.ml
@@ -19,12 +19,12 @@ open Coqast
open Ast
open Coqlib
open Termast
+open Extend
exception Non_closed_number
let ast_O = ast_of_ref glob_O
let ast_S = ast_of_ref glob_S
-let ast_myvar = ast_of_ref glob_My_special_variable_nat
(* For example, (nat_of_string "3") is <<(S (S (S O)))>> *)
let nat_of_int n dloc =
@@ -69,37 +69,29 @@ let int_of_nat p =
with
Non_closed_number -> None
-let replace_S p =
- let rec aux p =
- match p with
- | Node (l,"APPLIST", [b; a]) when b = ast_S ->
- Node (l, "APPLIST", [ast_myvar; (aux a)])
- | _ -> p
- in
- ope("APPLIST", [ast_myvar; (aux p)])
+let pr_S a = hov 0 (str "S" ++ brk (1,1) ++ a)
+let rec pr_external_S std_pr = function
+ | Node (l,"APPLIST", [b; a]) when b = ast_S ->
+ str"(" ++ pr_S (pr_external_S std_pr a) ++ str")"
+ | p -> std_pr p
(* Declare the primitive printer *)
(* Prints not p, but the SUCCESSOR of p !!!!! *)
let nat_printer std_pr p =
match (int_of_nat p) with
- | Some i -> (str (string_of_int i))
- | None -> std_pr (replace_S p)
+ | Some i -> str (string_of_int i)
+ | None -> pr_S (pr_external_S std_pr p)
let _ = Esyntax.Ppprim.add ("nat_printer", nat_printer)
(* Declare the primitive parser *)
-let number =
- match create_entry (get_univ "nat") "number" ETast with
- | Ast n -> n
- | _ -> anomaly "G_natsyntax : create_entry number failed"
+let unat = create_univ_if_new "nat"
-let pat_number =
- match create_entry (get_univ "nat") "pat_number" ETast with
- | Ast n -> n
- | _ -> anomaly "G_natsyntax : create_entry number failed"
+let number = create_constr_entry unat "number"
+let pat_number = create_constr_entry unat "pat_number"
let _ =
Gram.extend number None