486 end; |
486 end; |
487 |
487 |
488 val parse_fixity = |
488 val parse_fixity = |
489 (@{keyword "infix"} >> K X) || (@{keyword "infixl"} >> K L) || (@{keyword "infixr"} >> K R) |
489 (@{keyword "infix"} >> K X) || (@{keyword "infixl"} >> K L) || (@{keyword "infixr"} >> K R) |
490 |
490 |
491 val parse_mixfix = |
491 fun parse_mixfix x = |
492 Parse.string >> read_mixfix |
492 (Parse.string >> read_mixfix |
493 || parse_fixity -- Parse.nat -- Parse.string |
493 || parse_fixity -- Parse.nat -- Parse.string |
494 >> (fn ((fixity, i), s) => read_infix (fixity, i) s); |
494 >> (fn ((fixity, i), s) => read_infix (fixity, i) s)) x; |
495 |
495 |
496 fun syntax_of_mixfix of_plain of_printer prep_arg (BR, [String s]) = of_plain s |
496 fun syntax_of_mixfix of_plain of_printer prep_arg (BR, [String s]) = of_plain s |
497 | syntax_of_mixfix of_plain of_printer prep_arg (fixity, mfx) = |
497 | syntax_of_mixfix of_plain of_printer prep_arg (fixity, mfx) = |
498 of_printer (printer_of_mixfix prep_arg (fixity, mfx)); |
498 of_printer (printer_of_mixfix prep_arg (fixity, mfx)); |
499 |
499 |
500 val parse_tyco_syntax = |
500 fun parse_tyco_syntax x = |
501 parse_mixfix >> syntax_of_mixfix (fn s => (0, (K o K o K o str) s)) I I; |
501 (parse_mixfix >> syntax_of_mixfix (fn s => (0, (K o K o K o str) s)) I I) x; |
502 |
502 |
503 val parse_const_syntax = |
503 val parse_const_syntax = |
504 parse_mixfix >> syntax_of_mixfix plain_const_syntax simple_const_syntax fst; |
504 parse_mixfix >> syntax_of_mixfix plain_const_syntax simple_const_syntax fst; |
505 |
505 |
506 end; (*struct*) |
506 end; (*struct*) |