src/Pure/Syntax/syntax.ML
changeset 14687 e089757b952a
parent 14648 0e67b385a6df
child 14798 702cb4859cab
equal deleted inserted replaced
14686:708c613370ab 14687:e089757b952a
    35   datatype 'a trrule =
    35   datatype 'a trrule =
    36     ParseRule of 'a * 'a |
    36     ParseRule of 'a * 'a |
    37     PrintRule of 'a * 'a |
    37     PrintRule of 'a * 'a |
    38     ParsePrintRule of 'a * 'a
    38     ParsePrintRule of 'a * 'a
    39   type syntax
    39   type syntax
       
    40   val is_keyword: syntax -> string -> bool
    40   val extend_log_types: string list -> syntax -> syntax
    41   val extend_log_types: string list -> syntax -> syntax
    41   val extend_type_gram: (string * int * mixfix) list -> syntax -> syntax
    42   val extend_type_gram: (string * int * mixfix) list -> syntax -> syntax
    42   val extend_const_gram: string * bool -> (string * typ * mixfix) list -> syntax -> syntax
    43   val extend_const_gram: string * bool -> (string * typ * mixfix) list -> syntax -> syntax
    43   val extend_consts: string list -> syntax -> syntax
    44   val extend_consts: string list -> syntax -> syntax
    44   val extend_trfuns:
    45   val extend_trfuns:
   176     print_ruletab: ruletab,
   177     print_ruletab: ruletab,
   177     print_ast_trtab: ((Ast.ast list -> Ast.ast) * stamp) list Symtab.table,
   178     print_ast_trtab: ((Ast.ast list -> Ast.ast) * stamp) list Symtab.table,
   178     tokentrtab: (string * (string * ((string -> string * real) * stamp)) list) list,
   179     tokentrtab: (string * (string * ((string -> string * real) * stamp)) list) list,
   179     prtabs: Printer.prtabs}
   180     prtabs: Printer.prtabs}
   180 
   181 
       
   182 fun is_keyword (Syntax {lexicon, ...}) = Scan.is_literal lexicon o Symbol.explode;
       
   183 
   181 
   184 
   182 (* empty_syntax *)
   185 (* empty_syntax *)
   183 
   186 
   184 val empty_syntax =
   187 val empty_syntax =
   185   Syntax {
   188   Syntax {
   357 
   360 
   358     fun show_pt pt =
   361     fun show_pt pt =
   359       warning (Pretty.string_of (Ast.pretty_ast (SynTrans.pt_to_ast (K None) pt)));
   362       warning (Pretty.string_of (Ast.pretty_ast (SynTrans.pt_to_ast (K None) pt)));
   360   in
   363   in
   361     if length pts > ! ambiguity_level then
   364     if length pts > ! ambiguity_level then
   362 	if ! ambiguity_is_error then
   365         if ! ambiguity_is_error then
   363 	    error ("Ambiguous input " ^ quote str)
   366             error ("Ambiguous input " ^ quote str)
   364 	else
   367         else
   365 	    (warning ("Ambiguous input " ^ quote str);
   368             (warning ("Ambiguous input " ^ quote str);
   366 	     warning "produces the following parse trees:";
   369              warning "produces the following parse trees:";
   367 	     seq show_pt pts)
   370              seq show_pt pts)
   368     else ();
   371     else ();
   369     map (SynTrans.pt_to_ast (lookup_tr parse_ast_trtab)) pts
   372     map (SynTrans.pt_to_ast (lookup_tr parse_ast_trtab)) pts
   370   end;
   373   end;
   371 
   374 
   372 
   375