src/Pure/Syntax/lexicon.ML
changeset 58410 6d46ad54a2ab
parent 55962 fbd0e768bc8f
child 58421 37cbbd8eb460
equal deleted inserted replaced
58409:24096e89c131 58410:6d46ad54a2ab
    96 val scan_id = Symbol_Pos.scan_ident;
    96 val scan_id = Symbol_Pos.scan_ident;
    97 val scan_longid = scan_id @@@ (Scan.repeat1 ($$$ "." @@@ scan_id) >> flat);
    97 val scan_longid = scan_id @@@ (Scan.repeat1 ($$$ "." @@@ scan_id) >> flat);
    98 val scan_tid = $$$ "'" @@@ scan_id;
    98 val scan_tid = $$$ "'" @@@ scan_id;
    99 
    99 
   100 val scan_nat = Scan.many1 (Symbol.is_digit o Symbol_Pos.symbol);
   100 val scan_nat = Scan.many1 (Symbol.is_digit o Symbol_Pos.symbol);
       
   101 val scan_float = scan_nat @@@ $$$ "." @@@ scan_nat;
   101 val scan_int = $$$ "-" @@@ scan_nat || scan_nat;
   102 val scan_int = $$$ "-" @@@ scan_nat || scan_nat;
   102 val scan_natdot = scan_nat @@@ $$$ "." @@@ scan_nat;
       
   103 val scan_float = $$$ "-" @@@ scan_natdot || scan_natdot;
       
   104 val scan_hex = $$$ "0" @@@ $$$ "x" @@@ Scan.many1 (Symbol.is_ascii_hex o Symbol_Pos.symbol);
   103 val scan_hex = $$$ "0" @@@ $$$ "x" @@@ Scan.many1 (Symbol.is_ascii_hex o Symbol_Pos.symbol);
   105 val scan_bin = $$$ "0" @@@ $$$ "b" @@@ Scan.many1 (fn (s, _) => s = "0" orelse s = "1");
   104 val scan_bin = $$$ "0" @@@ $$$ "b" @@@ Scan.many1 (fn (s, _) => s = "0" orelse s = "1");
   106 
   105 
   107 val scan_id_nat = scan_id @@@ Scan.optional ($$$ "." @@@ scan_nat) [];
   106 val scan_id_nat = scan_id @@@ Scan.optional ($$$ "." @@@ scan_nat) [];
   108 val scan_var = $$$ "?" @@@ scan_id_nat;
   107 val scan_var = $$$ "?" @@@ scan_id_nat;
   262   let
   261   let
   263     val scan_xid =
   262     val scan_xid =
   264       (if xids then $$$ "_" @@@ scan_id || scan_id else scan_id) ||
   263       (if xids then $$$ "_" @@@ scan_id || scan_id else scan_id) ||
   265       $$$ "_" @@@ $$$ "_";
   264       $$$ "_" @@@ $$$ "_";
   266 
   265 
   267     val scan_num = scan_hex || scan_bin || scan_int;
   266     val scan_num_unsigned = scan_hex || scan_bin || scan_nat;
       
   267     val scan_num_signed = scan_hex || scan_bin || scan_int;
   268 
   268 
   269     val scan_val =
   269     val scan_val =
   270       scan_tvar >> token TVarSy ||
   270       scan_tvar >> token TVarSy ||
   271       scan_var >> token VarSy ||
   271       scan_var >> token VarSy ||
   272       scan_tid >> token TFreeSy ||
   272       scan_tid >> token TFreeSy ||
   273       scan_float >> token FloatSy ||
   273       scan_float >> token FloatSy ||
   274       scan_num >> token NumSy ||
   274       scan_num_unsigned >> token NumSy ||
   275       $$$ "#" @@@ scan_num >> token XNumSy ||
   275       $$$ "#" @@@ scan_num_signed >> token XNumSy ||
   276       scan_longid >> token LongIdentSy ||
   276       scan_longid >> token LongIdentSy ||
   277       scan_xid >> token IdentSy;
   277       scan_xid >> token IdentSy;
   278 
   278 
   279     val scan_lit = Scan.literal lex >> token Literal;
   279     val scan_lit = Scan.literal lex >> token Literal;
   280 
   280