equal
deleted
inserted
replaced
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 |