21 val add_undefined: string -> string -> string -> theory -> theory; |
21 val add_undefined: string -> string -> string -> theory -> theory; |
22 val add_pretty_list: string -> string -> string -> theory -> theory; |
22 val add_pretty_list: string -> string -> string -> theory -> theory; |
23 val add_pretty_list_string: string -> string -> string |
23 val add_pretty_list_string: string -> string -> string |
24 -> string -> string list -> theory -> theory; |
24 -> string -> string list -> theory -> theory; |
25 val add_pretty_char: string -> string -> string list -> theory -> theory |
25 val add_pretty_char: string -> string -> string list -> theory -> theory |
26 val add_pretty_numeral: string -> string * typ -> string -> string -> string |
26 val add_pretty_numeral: string -> bool -> string * typ -> string -> string -> string |
27 -> string -> string -> theory -> theory; |
27 -> string -> string -> theory -> theory; |
28 val add_pretty_ml_string: string -> string -> string list -> string |
28 val add_pretty_ml_string: string -> string -> string list -> string |
29 -> string -> string -> theory -> theory; |
29 -> string -> string -> theory -> theory; |
30 val add_pretty_imperative_monad_bind: string -> string -> theory -> theory; |
30 val add_pretty_imperative_monad_bind: string -> string -> theory -> theory; |
31 |
31 |
1633 local |
1633 local |
1634 |
1634 |
1635 val pretty : (string * { |
1635 val pretty : (string * { |
1636 pretty_char: string -> string, |
1636 pretty_char: string -> string, |
1637 pretty_string: string -> string, |
1637 pretty_string: string -> string, |
1638 pretty_numeral: IntInf.int -> string, |
1638 pretty_numeral: bool -> IntInf.int -> string, |
1639 pretty_list: Pretty.T list -> Pretty.T, |
1639 pretty_list: Pretty.T list -> Pretty.T, |
1640 infix_cons: int * string |
1640 infix_cons: int * string |
1641 }) list = [ |
1641 }) list = [ |
1642 ("SML", { pretty_char = prefix "#" o quote o ML_Syntax.print_char, |
1642 ("SML", { pretty_char = prefix "#" o quote o ML_Syntax.print_char, |
1643 pretty_string = ML_Syntax.print_string, |
1643 pretty_string = ML_Syntax.print_string, |
1644 pretty_numeral = fn k => "(" ^ IntInf.toString k ^ " : IntInf.int)", |
1644 pretty_numeral = fn unbounded => fn k => |
|
1645 if unbounded then "(" ^ IntInf.toString k ^ " : IntInf.int)" |
|
1646 else IntInf.toString k, |
1645 pretty_list = Pretty.enum "," "[" "]", |
1647 pretty_list = Pretty.enum "," "[" "]", |
1646 infix_cons = (7, "::")}), |
1648 infix_cons = (7, "::")}), |
1647 ("OCaml", { pretty_char = fn c => enclose "'" "'" |
1649 ("OCaml", { pretty_char = fn c => enclose "'" "'" |
1648 (let val i = ord c |
1650 (let val i = ord c |
1649 in if i < 32 orelse i = 39 orelse i = 92 |
1651 in if i < 32 orelse i = 39 orelse i = 92 |
1650 then prefix "\\" (string_of_int i) |
1652 then prefix "\\" (string_of_int i) |
1651 else c |
1653 else c |
1652 end), |
1654 end), |
1653 pretty_string = (fn _ => error "OCaml: no pretty strings"), |
1655 pretty_string = (fn _ => error "OCaml: no pretty strings"), |
1654 pretty_numeral = fn k => if k >= IntInf.fromInt 0 then |
1656 pretty_numeral = fn unbounded => fn k => if k >= IntInf.fromInt 0 then |
1655 "(Big_int.big_int_of_int " ^ IntInf.toString k ^ ")" |
1657 if unbounded then |
|
1658 "(Big_int.big_int_of_int " ^ IntInf.toString k ^ ")" |
|
1659 else IntInf.toString k |
1656 else |
1660 else |
1657 "(Big_int.big_int_of_int " ^ (enclose "(" ")" o prefix "-" |
1661 if unbounded then |
1658 o IntInf.toString o op ~) k ^ ")", |
1662 "(Big_int.big_int_of_int " ^ (enclose "(" ")" o prefix "-" |
|
1663 o IntInf.toString o op ~) k ^ ")" |
|
1664 else (enclose "(" ")" o prefix "-" o IntInf.toString o op ~) k, |
1659 pretty_list = Pretty.enum ";" "[" "]", |
1665 pretty_list = Pretty.enum ";" "[" "]", |
1660 infix_cons = (6, "::")}), |
1666 infix_cons = (6, "::")}), |
1661 ("Haskell", { pretty_char = fn c => enclose "'" "'" |
1667 ("Haskell", { pretty_char = fn c => enclose "'" "'" |
1662 (let val i = ord c |
1668 (let val i = ord c |
1663 in if i < 32 orelse i = 39 orelse i = 92 |
1669 in if i < 32 orelse i = 39 orelse i = 92 |
1664 then Library.prefix "\\" (string_of_int i) |
1670 then Library.prefix "\\" (string_of_int i) |
1665 else c |
1671 else c |
1666 end), |
1672 end), |
1667 pretty_string = ML_Syntax.print_string, |
1673 pretty_string = ML_Syntax.print_string, |
1668 pretty_numeral = fn k => if k >= IntInf.fromInt 0 then |
1674 pretty_numeral = fn unbounded => fn k => if k >= IntInf.fromInt 0 then |
1669 IntInf.toString k |
1675 IntInf.toString k |
1670 else |
1676 else |
1671 (enclose "(" ")" o Library.prefix "-" o IntInf.toString o IntInf.~) k, |
1677 (enclose "(" ")" o Library.prefix "-" o IntInf.toString o IntInf.~) k, |
1672 pretty_list = Pretty.enum "," "[" "]", |
1678 pretty_list = Pretty.enum "," "[" "]", |
1673 infix_cons = (5, ":")}) |
1679 infix_cons = (5, ":")}) |
1717 case decode_char c_nibbles (t1, t2) |
1723 case decode_char c_nibbles (t1, t2) |
1718 of SOME c => (str o mk_char) c |
1724 of SOME c => (str o mk_char) c |
1719 | NONE => error "Illegal character expression"; |
1725 | NONE => error "Illegal character expression"; |
1720 in (2, pretty) end; |
1726 in (2, pretty) end; |
1721 |
1727 |
1722 fun pretty_numeral c_bit0 c_bit1 c_pls c_min c_bit target = |
1728 fun pretty_numeral unbounded c_bit0 c_bit1 c_pls c_min c_bit target = |
1723 let |
1729 let |
1724 val mk_numeral = #pretty_numeral (pr_pretty target); |
1730 val mk_numeral = #pretty_numeral (pr_pretty target); |
1725 fun pretty _ _ _ [(t, _)] = |
1731 fun pretty _ _ _ [(t, _)] = |
1726 case implode_numeral c_bit0 c_bit1 c_pls c_min c_bit t |
1732 case implode_numeral c_bit0 c_bit1 c_pls c_min c_bit t |
1727 of SOME k => (str o mk_numeral) k |
1733 of SOME k => (str o mk_numeral unbounded) k |
1728 | NONE => error "Illegal numeral expression"; |
1734 | NONE => error "Illegal numeral expression"; |
1729 in (1, pretty) end; |
1735 in (1, pretty) end; |
1730 |
1736 |
1731 fun pretty_ml_string c_char c_nibbles c_nil c_cons target = |
1737 fun pretty_ml_string c_char c_nibbles c_nil c_cons target = |
1732 let |
1738 let |
1992 in |
1998 in |
1993 thy |
1999 thy |
1994 |> add_syntax_const target charr' (SOME pr) |
2000 |> add_syntax_const target charr' (SOME pr) |
1995 end; |
2001 end; |
1996 |
2002 |
1997 fun add_pretty_numeral target number_of b0 b1 pls min bit thy = |
2003 fun add_pretty_numeral target unbounded number_of b0 b1 pls min bit thy = |
1998 let |
2004 let |
1999 val number_of' = CodegenConsts.const_of_cexpr thy number_of; |
2005 val number_of' = CodegenConsts.const_of_cexpr thy number_of; |
2000 val (_, b0'') = idfs_of_const thy b0; |
2006 val (_, b0'') = idfs_of_const thy b0; |
2001 val (_, b1'') = idfs_of_const thy b1; |
2007 val (_, b1'') = idfs_of_const thy b1; |
2002 val (_, pls'') = idfs_of_const thy pls; |
2008 val (_, pls'') = idfs_of_const thy pls; |
2003 val (_, min'') = idfs_of_const thy min; |
2009 val (_, min'') = idfs_of_const thy min; |
2004 val (_, bit'') = idfs_of_const thy bit; |
2010 val (_, bit'') = idfs_of_const thy bit; |
2005 val pr = pretty_numeral b0'' b1'' pls'' min'' bit'' target; |
2011 val pr = pretty_numeral unbounded b0'' b1'' pls'' min'' bit'' target; |
2006 in |
2012 in |
2007 thy |
2013 thy |
2008 |> add_syntax_const target number_of' (SOME pr) |
2014 |> add_syntax_const target number_of' (SOME pr) |
2009 end; |
2015 end; |
2010 |
2016 |