173 val trans_pat = |
173 val trans_pat = |
174 Scan.optional (Parse.$$$ "(" |-- Parse.!!! (Parse.xname --| Parse.$$$ ")")) "logic" |
174 Scan.optional (Parse.$$$ "(" |-- Parse.!!! (Parse.xname --| Parse.$$$ ")")) "logic" |
175 -- Parse.string; |
175 -- Parse.string; |
176 |
176 |
177 fun trans_arrow toks = |
177 fun trans_arrow toks = |
178 ((Parse.$$$ "\\<rightharpoonup>" || Parse.$$$ "=>") >> K Syntax.ParseRule || |
178 ((Parse.$$$ "\\<rightharpoonup>" || Parse.$$$ "=>") >> K Syntax.Parse_Rule || |
179 (Parse.$$$ "\\<leftharpoondown>" || Parse.$$$ "<=") >> K Syntax.PrintRule || |
179 (Parse.$$$ "\\<leftharpoondown>" || Parse.$$$ "<=") >> K Syntax.Print_Rule || |
180 (Parse.$$$ "\\<rightleftharpoons>" || Parse.$$$ "==") >> K Syntax.ParsePrintRule) toks; |
180 (Parse.$$$ "\\<rightleftharpoons>" || Parse.$$$ "==") >> K Syntax.Parse_Print_Rule) toks; |
181 |
181 |
182 val trans_line = |
182 val trans_line = |
183 trans_pat -- Parse.!!! (trans_arrow -- trans_pat) |
183 trans_pat -- Parse.!!! (trans_arrow -- trans_pat) |
184 >> (fn (left, (arr, right)) => arr (left, right)); |
184 >> (fn (left, (arr, right)) => arr (left, right)); |
185 |
185 |
186 val _ = |
186 val _ = |
187 Outer_Syntax.command "translations" "declare syntax translation rules" Keyword.thy_decl |
187 Outer_Syntax.command "translations" "declare syntax translation rules" Keyword.thy_decl |
188 (Scan.repeat1 trans_line >> (Toplevel.theory o Sign.add_trrules)); |
188 (Scan.repeat1 trans_line >> (Toplevel.theory o Isar_Cmd.translations)); |
189 |
189 |
190 val _ = |
190 val _ = |
191 Outer_Syntax.command "no_translations" "remove syntax translation rules" Keyword.thy_decl |
191 Outer_Syntax.command "no_translations" "remove syntax translation rules" Keyword.thy_decl |
192 (Scan.repeat1 trans_line >> (Toplevel.theory o Sign.del_trrules)); |
192 (Scan.repeat1 trans_line >> (Toplevel.theory o Isar_Cmd.no_translations)); |
193 |
193 |
194 |
194 |
195 (* axioms and definitions *) |
195 (* axioms and definitions *) |
196 |
196 |
197 val _ = |
197 val _ = |