src/HOL/Tools/string_syntax.ML
changeset 42290 b1f544c84040
parent 42248 04bffad68aa4
child 45490 20c8c0cca555
equal deleted inserted replaced
42289:dafae095d733 42290:b1f544c84040
    14 
    14 
    15 
    15 
    16 (* nibble *)
    16 (* nibble *)
    17 
    17 
    18 val mk_nib =
    18 val mk_nib =
    19   Ast.Constant o Syntax.mark_const o
    19   Ast.Constant o Lexicon.mark_const o
    20     fst o Term.dest_Const o HOLogic.mk_nibble;
    20     fst o Term.dest_Const o HOLogic.mk_nibble;
    21 
    21 
    22 fun dest_nib (Ast.Constant s) =
    22 fun dest_nib (Ast.Constant s) =
    23   (case try Syntax.unmark_const s of
    23   (case try Lexicon.unmark_const s of
    24     NONE => raise Match
    24     NONE => raise Match
    25   | SOME c => (HOLogic.dest_nibble (Const (c, HOLogic.nibbleT)) handle TERM _ => raise Match));
    25   | SOME c => (HOLogic.dest_nibble (Const (c, HOLogic.nibbleT)) handle TERM _ => raise Match));
    26 
    26 
    27 
    27 
    28 (* char *)
    28 (* char *)
    42 
    42 
    43 fun dest_char (Ast.Appl [Ast.Constant @{const_syntax Char}, c1, c2]) = dest_chr c1 c2
    43 fun dest_char (Ast.Appl [Ast.Constant @{const_syntax Char}, c1, c2]) = dest_chr c1 c2
    44   | dest_char _ = raise Match;
    44   | dest_char _ = raise Match;
    45 
    45 
    46 fun syntax_string cs =
    46 fun syntax_string cs =
    47   Ast.Appl [Ast.Constant @{syntax_const "_inner_string"}, Ast.Variable (Syntax.implode_xstr cs)];
    47   Ast.Appl [Ast.Constant @{syntax_const "_inner_string"},
       
    48     Ast.Variable (Lexicon.implode_xstr cs)];
    48 
    49 
    49 
    50 
    50 fun char_ast_tr [Ast.Variable xstr] =
    51 fun char_ast_tr [Ast.Variable xstr] =
    51       (case Syntax.explode_xstr xstr of
    52       (case Lexicon.explode_xstr xstr of
    52         [c] => mk_char c
    53         [c] => mk_char c
    53       | _ => error ("Single character expected: " ^ xstr))
    54       | _ => error ("Single character expected: " ^ xstr))
    54   | char_ast_tr asts = raise Ast.AST ("char_ast_tr", asts);
    55   | char_ast_tr asts = raise Ast.AST ("char_ast_tr", asts);
    55 
    56 
    56 fun char_ast_tr' [c1, c2] =
    57 fun char_ast_tr' [c1, c2] =
    63 fun mk_string [] = Ast.Constant @{const_syntax Nil}
    64 fun mk_string [] = Ast.Constant @{const_syntax Nil}
    64   | mk_string (c :: cs) =
    65   | mk_string (c :: cs) =
    65       Ast.Appl [Ast.Constant @{const_syntax Cons}, mk_char c, mk_string cs];
    66       Ast.Appl [Ast.Constant @{const_syntax Cons}, mk_char c, mk_string cs];
    66 
    67 
    67 fun string_ast_tr [Ast.Variable xstr] =
    68 fun string_ast_tr [Ast.Variable xstr] =
    68       (case Syntax.explode_xstr xstr of
    69       (case Lexicon.explode_xstr xstr of
    69         [] =>
    70         [] =>
    70           Ast.Appl
    71           Ast.Appl
    71             [Ast.Constant @{syntax_const "_constrain"},
    72             [Ast.Constant @{syntax_const "_constrain"},
    72               Ast.Constant @{const_syntax Nil}, Ast.Constant @{type_syntax string}]
    73               Ast.Constant @{const_syntax Nil}, Ast.Constant @{type_syntax string}]
    73       | cs => mk_string cs)
    74       | cs => mk_string cs)