src/HOL/Tools/string_syntax.ML
changeset 55108 0b7a0c1fdf7e
parent 55015 e33c5bd729ff
child 58822 90a5e981af3e
--- a/src/HOL/Tools/string_syntax.ML	Mon Jan 20 20:38:51 2014 +0100
+++ b/src/HOL/Tools/string_syntax.ML	Wed Jan 22 15:10:33 2014 +0100
@@ -38,24 +38,24 @@
 val specials = raw_explode "\\\"`'";
 
 fun dest_chr c1 c2 =
-  let val c = chr (dest_nib c1 * 16 + dest_nib c2) in
-    if not (member (op =) specials c) andalso Symbol.is_ascii c andalso Symbol.is_printable c
-    then c
-    else if c = "\n" then "\<newline>"
+  let val s = chr (dest_nib c1 * 16 + dest_nib c2) in
+    if not (member (op =) specials s) andalso Symbol.is_ascii s andalso Symbol.is_printable s
+    then s
+    else if s = "\n" then "\<newline>"
     else raise Match
   end;
 
 fun dest_char (Ast.Appl [Ast.Constant @{const_syntax Char}, c1, c2]) = dest_chr c1 c2
   | dest_char _ = raise Match;
 
-fun syntax_string cs =
+fun syntax_string ss =
   Ast.Appl [Ast.Constant @{syntax_const "_inner_string"},
-    Ast.Variable (Lexicon.implode_str cs)];
+    Ast.Variable (Lexicon.implode_str ss)];
 
 
 fun char_ast_tr [Ast.Variable str] =
-      (case Lexicon.explode_str str of
-        [c] => mk_char c
+      (case Lexicon.explode_str (str, Position.none) of
+        [(s, _)] => mk_char s
       | _ => error ("Single character expected: " ^ str))
   | char_ast_tr [Ast.Appl [Ast.Constant @{syntax_const "_constrain"}, ast1, ast2]] =
       Ast.Appl [Ast.Constant @{syntax_const "_constrain"}, char_ast_tr [ast1], ast2]
@@ -69,16 +69,16 @@
 (* string *)
 
 fun mk_string [] = Ast.Constant @{const_syntax Nil}
-  | mk_string (c :: cs) =
-      Ast.Appl [Ast.Constant @{const_syntax Cons}, mk_char c, mk_string cs];
+  | mk_string (s :: ss) =
+      Ast.Appl [Ast.Constant @{const_syntax Cons}, mk_char s, mk_string ss];
 
 fun string_ast_tr [Ast.Variable str] =
-      (case Lexicon.explode_str str of
+      (case Lexicon.explode_str (str, Position.none) of
         [] =>
           Ast.Appl
             [Ast.Constant @{syntax_const "_constrain"},
               Ast.Constant @{const_syntax Nil}, Ast.Constant @{type_syntax string}]
-      | cs => mk_string cs)
+      | ss => mk_string (map Symbol_Pos.symbol ss))
   | string_ast_tr [Ast.Appl [Ast.Constant @{syntax_const "_constrain"}, ast1, ast2]] =
       Ast.Appl [Ast.Constant @{syntax_const "_constrain"}, string_ast_tr [ast1], ast2]
   | string_ast_tr asts = raise Ast.AST ("string_tr", asts);