src/Pure/Syntax/syntax.ML
changeset 69002 f0d4b1db0ea0
parent 67514 6877af8bc18d
child 69003 a015f1d3ba0c
equal deleted inserted replaced
69001:f108b3b67ada 69002:f0d4b1db0ea0
    94   val empty_syntax: syntax
    94   val empty_syntax: syntax
    95   val merge_syntax: syntax * syntax -> syntax
    95   val merge_syntax: syntax * syntax -> syntax
    96   val print_gram: syntax -> unit
    96   val print_gram: syntax -> unit
    97   val print_trans: syntax -> unit
    97   val print_trans: syntax -> unit
    98   val print_syntax: syntax -> unit
    98   val print_syntax: syntax -> unit
    99   val guess_infix: syntax -> string -> mixfix option
       
   100   datatype 'a trrule =
    99   datatype 'a trrule =
   101     Parse_Rule of 'a * 'a |
   100     Parse_Rule of 'a * 'a |
   102     Print_Rule of 'a * 'a |
   101     Print_Rule of 'a * 'a |
   103     Parse_Print_Rule of 'a * 'a
   102     Parse_Print_Rule of 'a * 'a
   104   val map_trrule: ('a -> 'b) -> 'a trrule -> 'b trrule
   103   val map_trrule: ('a -> 'b) -> 'a trrule -> 'b trrule
   606 fun print_syntax syn = Pretty.writeln_chunks (pretty_gram syn @ pretty_trans syn);
   605 fun print_syntax syn = Pretty.writeln_chunks (pretty_gram syn @ pretty_trans syn);
   607 
   606 
   608 end;
   607 end;
   609 
   608 
   610 
   609 
   611 (* reconstructing infixes -- educated guessing *)
       
   612 
       
   613 fun guess_infix (Syntax ({gram, ...}, _)) c =
       
   614   (case Parser.guess_infix_lr (Lazy.force gram) c of
       
   615     SOME (s, l, r, j) => SOME
       
   616      (if l then Infixl (Input.string s, j, Position.no_range)
       
   617       else if r then Infixr (Input.string s, j, Position.no_range)
       
   618       else Infix (Input.string s, j, Position.no_range))
       
   619   | NONE => NONE);
       
   620 
       
   621 
       
   622 
   610 
   623 (** prepare translation rules **)
   611 (** prepare translation rules **)
   624 
   612 
   625 (* rules *)
   613 (* rules *)
   626 
   614