src/Pure/Syntax/syntax_phases.ML
changeset 59795 d453c69596cc
parent 59790 85c572d089fc
child 60490 9b28f446d9c5
equal deleted inserted replaced
59792:f19f4afa49e2 59795:d453c69596cc
   363 fun parse_failed ctxt pos msg kind =
   363 fun parse_failed ctxt pos msg kind =
   364   cat_error msg ("Failed to parse " ^ kind ^
   364   cat_error msg ("Failed to parse " ^ kind ^
   365     Markup.markup_report (Context_Position.reported_text ctxt pos Markup.bad ""));
   365     Markup.markup_report (Context_Position.reported_text ctxt pos Markup.bad ""));
   366 
   366 
   367 fun parse_sort ctxt =
   367 fun parse_sort ctxt =
   368   Syntax.parse_token ctxt Term_XML.Decode.sort Markup.language_sort
   368   Syntax.parse_input ctxt Term_XML.Decode.sort Markup.language_sort
   369     (fn (syms, pos) =>
   369     (fn (syms, pos) =>
   370       parse_tree ctxt "sort" (syms, pos)
   370       parse_tree ctxt "sort" (syms, pos)
   371       |> uncurry (report_result ctxt pos)
   371       |> uncurry (report_result ctxt pos)
   372       |> decode_sort
   372       |> decode_sort
   373       |> Type.minimize_sort (Proof_Context.tsig_of ctxt)
   373       |> Type.minimize_sort (Proof_Context.tsig_of ctxt)
   374       handle ERROR msg => parse_failed ctxt pos msg "sort");
   374       handle ERROR msg => parse_failed ctxt pos msg "sort");
   375 
   375 
   376 fun parse_typ ctxt =
   376 fun parse_typ ctxt =
   377   Syntax.parse_token ctxt Term_XML.Decode.typ Markup.language_type
   377   Syntax.parse_input ctxt Term_XML.Decode.typ Markup.language_type
   378     (fn (syms, pos) =>
   378     (fn (syms, pos) =>
   379       parse_tree ctxt "type" (syms, pos)
   379       parse_tree ctxt "type" (syms, pos)
   380       |> uncurry (report_result ctxt pos)
   380       |> uncurry (report_result ctxt pos)
   381       |> decode_typ
   381       |> decode_typ
   382       handle ERROR msg => parse_failed ctxt pos msg "type");
   382       handle ERROR msg => parse_failed ctxt pos msg "type");
   387       if is_prop
   387       if is_prop
   388       then (Markup.language_prop, "prop", "prop", Type.constraint propT)
   388       then (Markup.language_prop, "prop", "prop", Type.constraint propT)
   389       else (Markup.language_term, "term", Config.get ctxt Syntax.root, I);
   389       else (Markup.language_term, "term", Config.get ctxt Syntax.root, I);
   390     val decode = constrain o Term_XML.Decode.term;
   390     val decode = constrain o Term_XML.Decode.term;
   391   in
   391   in
   392     Syntax.parse_token ctxt decode markup
   392     Syntax.parse_input ctxt decode markup
   393       (fn (syms, pos) =>
   393       (fn (syms, pos) =>
   394         let
   394         let
   395           val (ambig_msgs, results) = parse_tree ctxt root (syms, pos) ||> map (decode_term ctxt);
   395           val (ambig_msgs, results) = parse_tree ctxt root (syms, pos) ||> map (decode_term ctxt);
   396           val parsed_len = length (proper_results results);
   396           val parsed_len = length (proper_results results);
   397 
   397 
   461               SOME p => Ast.mk_appl (decode (p :: ps) ast) (map (decode ps) args)
   461               SOME p => Ast.mk_appl (decode (p :: ps) ast) (map (decode ps) args)
   462             | NONE => decode_appl ps asts)
   462             | NONE => decode_appl ps asts)
   463           else decode_appl ps asts
   463           else decode_appl ps asts
   464       | decode ps (Ast.Appl asts) = decode_appl ps asts;
   464       | decode ps (Ast.Appl asts) = decode_appl ps asts;
   465 
   465 
   466     val source = Syntax.read_token str;
   466     val source = Syntax.read_input str;
   467     val pos = Input.pos_of source;
   467     val pos = Input.pos_of source;
   468     val syms = Input.source_explode source;
   468     val syms = Input.source_explode source;
   469     val ast =
   469     val ast =
   470       parse_asts ctxt true root (syms, pos)
   470       parse_asts ctxt true root (syms, pos)
   471       |> uncurry (report_result ctxt pos)
   471       |> uncurry (report_result ctxt pos)