77 val closure_src: src -> src |
77 val closure_src: src -> src |
78 val pretty_value: Proof.context -> T -> Pretty.T |
78 val pretty_value: Proof.context -> T -> Pretty.T |
79 val pretty_src: Proof.context -> src -> Pretty.T |
79 val pretty_src: Proof.context -> src -> Pretty.T |
80 val ident_or_symbolic: string -> bool |
80 val ident_or_symbolic: string -> bool |
81 val source_proper: (T, 'a) Source.source -> (T, (T, 'a) Source.source) Source.source |
81 val source_proper: (T, 'a) Source.source -> (T, (T, 'a) Source.source) Source.source |
82 val source': {do_recover: bool} -> (unit -> Scan.lexicon * Scan.lexicon) -> |
82 val source: (unit -> Scan.lexicon * Scan.lexicon) -> |
83 (Symbol_Pos.T, 'a) Source.source -> (T, (Symbol_Pos.T, 'a) Source.source) Source.source |
83 Position.T -> (Symbol.symbol, 'a) Source.source -> (T, |
84 val source: {do_recover: bool} -> (unit -> Scan.lexicon * Scan.lexicon) -> |
84 (Symbol_Pos.T, Position.T * (Symbol.symbol, 'a) Source.source) Source.source) Source.source |
|
85 val source_strict: (unit -> Scan.lexicon * Scan.lexicon) -> |
85 Position.T -> (Symbol.symbol, 'a) Source.source -> (T, |
86 Position.T -> (Symbol.symbol, 'a) Source.source -> (T, |
86 (Symbol_Pos.T, Position.T * (Symbol.symbol, 'a) Source.source) Source.source) Source.source |
87 (Symbol_Pos.T, Position.T * (Symbol.symbol, 'a) Source.source) Source.source) Source.source |
87 type 'a parser = T list -> 'a * T list |
88 type 'a parser = T list -> 'a * T list |
88 type 'a context_parser = Context.generic * T list -> 'a * (Context.generic * T list) |
89 type 'a context_parser = Context.generic * T list -> 'a * (Context.generic * T list) |
89 val read: Scan.lexicon -> 'a parser -> Symbol_Pos.T list * Position.T -> 'a list |
90 val read: Scan.lexicon -> 'a parser -> Symbol_Pos.T list * Position.T -> 'a list |
558 Scan.one (Symbol.not_eof o Symbol_Pos.symbol) >> single) |
559 Scan.one (Symbol.not_eof o Symbol_Pos.symbol) >> single) |
559 >> (single o token (Error msg)); |
560 >> (single o token (Error msg)); |
560 |
561 |
561 in |
562 in |
562 |
563 |
563 fun source' {do_recover} get_lex = |
564 fun source' strict get_lex = |
564 Source.source Symbol_Pos.stopper (Scan.bulk (fn xs => scan (get_lex ()) xs)) |
565 let |
565 (if do_recover then SOME recover else NONE); |
566 val scan_strict = Scan.bulk (fn xs => scan (get_lex ()) xs); |
566 |
567 val scan = if strict then scan_strict else Scan.recover scan_strict recover; |
567 fun source do_recover get_lex pos src = |
568 in Source.source Symbol_Pos.stopper scan end; |
568 Symbol_Pos.source pos src |
569 |
569 |> source' do_recover get_lex; |
570 fun source get_lex pos src = Symbol_Pos.source pos src |> source' false get_lex; |
|
571 fun source_strict get_lex pos src = Symbol_Pos.source pos src |> source' true get_lex; |
570 |
572 |
571 end; |
573 end; |
572 |
574 |
573 |
575 |
574 |
576 |
580 |
582 |
581 (* read source *) |
583 (* read source *) |
582 |
584 |
583 fun read lex scan (syms, pos) = |
585 fun read lex scan (syms, pos) = |
584 Source.of_list syms |
586 Source.of_list syms |
585 |> source' {do_recover = false} (K (lex, Scan.empty_lexicon)) |
587 |> source' true (K (lex, Scan.empty_lexicon)) |
586 |> source_proper |
588 |> source_proper |
587 |> Source.source stopper (Scan.error (Scan.bulk scan)) NONE |
589 |> Source.source stopper (Scan.error (Scan.bulk scan)) |
588 |> Source.exhaust; |
590 |> Source.exhaust; |
589 |
591 |
590 fun read_antiq lex scan (syms, pos) = |
592 fun read_antiq lex scan (syms, pos) = |
591 let |
593 let |
592 fun err msg = |
594 fun err msg = |