src/Pure/Isar/outer_lex.ML
changeset 27835 ff8b8513965a
parent 27814 05a50886dacb
child 27856 b28b2baada06
equal deleted inserted replaced
27834:04562d200f02 27835:ff8b8513965a
    51   val closure: token -> token
    51   val closure: token -> token
    52   val ident_or_symbolic: string -> bool
    52   val ident_or_symbolic: string -> bool
    53   val !!! : string -> (SymbolPos.T list -> 'a) -> SymbolPos.T list -> 'a
    53   val !!! : string -> (SymbolPos.T list -> 'a) -> SymbolPos.T list -> 'a
    54   val scan_quoted: SymbolPos.T list -> SymbolPos.T list * SymbolPos.T list
    54   val scan_quoted: SymbolPos.T list -> SymbolPos.T list * SymbolPos.T list
    55   val source_proper: (token, 'a) Source.source -> (token, (token, 'a) Source.source) Source.source
    55   val source_proper: (token, 'a) Source.source -> (token, (token, 'a) Source.source) Source.source
    56   val source': bool Option.option -> (unit -> Scan.lexicon * Scan.lexicon) ->
    56   val source': {do_recover: bool Option.option} -> (unit -> Scan.lexicon * Scan.lexicon) ->
    57     (SymbolPos.T, 'a) Source.source -> (token, (SymbolPos.T, 'a) Source.source) Source.source
    57     (SymbolPos.T, 'a) Source.source -> (token, (SymbolPos.T, 'a) Source.source) Source.source
    58   val source: bool Option.option -> (unit -> Scan.lexicon * Scan.lexicon) ->
    58   val source: {do_recover: bool Option.option} -> (unit -> Scan.lexicon * Scan.lexicon) ->
    59     Position.T -> (Symbol.symbol, 'a) Source.source -> (token,
    59     Position.T -> (Symbol.symbol, 'a) Source.source -> (token,
    60       (SymbolPos.T, Position.T * (Symbol.symbol, 'a) Source.source) Source.source) Source.source
    60       (SymbolPos.T, Position.T * (Symbol.symbol, 'a) Source.source) Source.source) Source.source
    61 end;
    61 end;
    62 
    62 
    63 structure OuterLex: OUTER_LEX =
    63 structure OuterLex: OUTER_LEX =
   387   Scan.many ((Symbol.is_regular andf (not o Symbol.is_blank)) o symbol)
   387   Scan.many ((Symbol.is_regular andf (not o Symbol.is_blank)) o symbol)
   388   >> (single o token (Error msg));
   388   >> (single o token (Error msg));
   389 
   389 
   390 in
   390 in
   391 
   391 
   392 fun source' do_recover get_lex =
   392 fun source' {do_recover} get_lex =
   393   Source.source SymbolPos.stopper (Scan.bulk (fn xs => scan (get_lex ()) xs))
   393   Source.source SymbolPos.stopper (Scan.bulk (fn xs => scan (get_lex ()) xs))
   394     (Option.map (rpair recover) do_recover);
   394     (Option.map (rpair recover) do_recover);
   395 
   395 
   396 fun source do_recover get_lex pos src =
   396 fun source do_recover get_lex pos src =
   397   SymbolPos.source pos src
   397   SymbolPos.source pos src