src/Pure/Syntax/syntax.ML
changeset 42254 f427c9890c46
parent 42253 c539d3c9c023
child 42255 097c93dcd877
equal deleted inserted replaced
42253:c539d3c9c023 42254:f427c9890c46
   118   val is_keyword: syntax -> string -> bool
   118   val is_keyword: syntax -> string -> bool
   119   val tokenize: syntax -> bool -> Symbol_Pos.T list -> Lexicon.token list
   119   val tokenize: syntax -> bool -> Symbol_Pos.T list -> Lexicon.token list
   120   val parse: Proof.context -> syntax -> string -> Lexicon.token list -> Parser.parsetree list
   120   val parse: Proof.context -> syntax -> string -> Lexicon.token list -> Parser.parsetree list
   121   val parse_ast_translation: syntax -> string -> (Proof.context -> Ast.ast list -> Ast.ast) option
   121   val parse_ast_translation: syntax -> string -> (Proof.context -> Ast.ast list -> Ast.ast) option
   122   val parse_translation: syntax -> string -> (Proof.context -> term list -> term) option
   122   val parse_translation: syntax -> string -> (Proof.context -> term list -> term) option
   123   val print_translation: syntax -> string -> (Proof.context -> typ -> term list -> term) list
   123   val print_translation: syntax -> string ->
   124   val print_ast_translation: syntax -> string -> (Proof.context -> Ast.ast list -> Ast.ast) list
   124     Proof.context -> typ -> term list -> term  (*exception Match*)
       
   125   val print_ast_translation: syntax -> string ->
       
   126     Proof.context -> Ast.ast list -> Ast.ast  (*exception Match*)
   125   val token_translation: syntax -> string list ->
   127   val token_translation: syntax -> string list ->
   126     string -> (Proof.context -> string -> Pretty.T) option
   128     string -> (Proof.context -> string -> Pretty.T) option
   127   type mode
   129   type mode
   128   val mode_default: mode
   130   val mode_default: mode
   129   val mode_input: mode
   131   val mode_input: mode
   419   handle Symtab.DUP c => err_dup_trfun name c;
   421   handle Symtab.DUP c => err_dup_trfun name c;
   420 
   422 
   421 
   423 
   422 (* print (ast) translations *)
   424 (* print (ast) translations *)
   423 
   425 
   424 fun lookup_tr' tab c = map fst (Symtab.lookup_list tab c);
   426 fun apply_tr' tab c ctxt T args =
       
   427   let
       
   428     val fns = map fst (Symtab.lookup_list tab c);
       
   429     fun app_first [] = raise Match
       
   430       | app_first (f :: fs) = f ctxt T args handle Match => app_first fs;
       
   431   in app_first fns end;
       
   432 
       
   433 fun apply_ast_tr' tab c ctxt args =
       
   434   let
       
   435     val fns = map fst (Symtab.lookup_list tab c);
       
   436     fun app_first [] = raise Match
       
   437       | app_first (f :: fs) = f ctxt args handle Match => app_first fs;
       
   438   in app_first fns end;
   425 
   439 
   426 fun update_tr'tab trfuns = fold_rev (Symtab.update_list Syn_Ext.eq_trfun) trfuns;
   440 fun update_tr'tab trfuns = fold_rev (Symtab.update_list Syn_Ext.eq_trfun) trfuns;
   427 fun remove_tr'tab trfuns = fold (Symtab.remove_list Syn_Ext.eq_trfun) trfuns;
   441 fun remove_tr'tab trfuns = fold (Symtab.remove_list Syn_Ext.eq_trfun) trfuns;
   428 fun merge_tr'tabs tab1 tab2 = Symtab.merge_list Syn_Ext.eq_trfun (tab1, tab2);
   442 fun merge_tr'tabs tab1 tab2 = Symtab.merge_list Syn_Ext.eq_trfun (tab1, tab2);
   429 
   443 
   505 fun tokenize (Syntax ({lexicon, ...}, _)) = Lexicon.tokenize lexicon;
   519 fun tokenize (Syntax ({lexicon, ...}, _)) = Lexicon.tokenize lexicon;
   506 fun parse ctxt (Syntax ({gram, ...}, _)) = Parser.parse ctxt gram;
   520 fun parse ctxt (Syntax ({gram, ...}, _)) = Parser.parse ctxt gram;
   507 
   521 
   508 fun parse_ast_translation (Syntax ({parse_ast_trtab, ...}, _)) = lookup_tr parse_ast_trtab;
   522 fun parse_ast_translation (Syntax ({parse_ast_trtab, ...}, _)) = lookup_tr parse_ast_trtab;
   509 fun parse_translation (Syntax ({parse_trtab, ...}, _)) = lookup_tr parse_trtab;
   523 fun parse_translation (Syntax ({parse_trtab, ...}, _)) = lookup_tr parse_trtab;
   510 fun print_translation (Syntax ({print_trtab, ...}, _)) = lookup_tr' print_trtab;
   524 fun print_translation (Syntax ({print_trtab, ...}, _)) = apply_tr' print_trtab;
   511 fun print_ast_translation (Syntax ({print_ast_trtab, ...}, _)) = lookup_tr' print_ast_trtab;
   525 fun print_ast_translation (Syntax ({print_ast_trtab, ...}, _)) = apply_ast_tr' print_ast_trtab;
   512 fun token_translation (Syntax ({tokentrtab, ...}, _)) = lookup_tokentr tokentrtab;
   526 fun token_translation (Syntax ({tokentrtab, ...}, _)) = lookup_tokentr tokentrtab;
   513 
   527 
   514 type mode = string * bool;
   528 type mode = string * bool;
   515 val mode_default = ("", true);
   529 val mode_default = ("", true);
   516 val mode_input = (Print_Mode.input, true);
   530 val mode_input = (Print_Mode.input, true);