4 |
4 |
5 Abstract syntax trees, translation rules, matching and normalization of asts. |
5 Abstract syntax trees, translation rules, matching and normalization of asts. |
6 *) |
6 *) |
7 |
7 |
8 signature AST0 = |
8 signature AST0 = |
9 sig |
9 sig |
10 datatype ast = |
10 datatype ast = |
11 Constant of string | |
11 Constant of string | |
12 Variable of string | |
12 Variable of string | |
13 Appl of ast list |
13 Appl of ast list |
14 exception AST of string * ast list |
14 exception AST of string * ast list |
15 end; |
15 end; |
16 |
16 |
17 signature AST1 = |
17 signature AST1 = |
18 sig |
18 sig |
19 include AST0 |
19 include AST0 |
20 structure Pretty: PRETTY |
|
21 val mk_appl: ast -> ast list -> ast |
20 val mk_appl: ast -> ast list -> ast |
22 val str_of_ast: ast -> string |
21 val str_of_ast: ast -> string |
23 val pretty_ast: ast -> Pretty.T |
22 val pretty_ast: ast -> Pretty.T |
24 val pretty_rule: ast * ast -> Pretty.T |
23 val pretty_rule: ast * ast -> Pretty.T |
25 val pprint_ast: ast -> pprint_args -> unit |
24 val pprint_ast: ast -> pprint_args -> unit |
26 val trace_norm_ast: bool ref |
25 val trace_norm_ast: bool ref |
27 val stat_norm_ast: bool ref |
26 val stat_norm_ast: bool ref |
28 end; |
27 end; |
29 |
28 |
30 signature AST = |
29 signature AST = |
31 sig |
30 sig |
32 include AST1 |
31 include AST1 |
33 val raise_ast: string -> ast list -> 'a |
32 val raise_ast: string -> ast list -> 'a |
34 val head_of_rule: ast * ast -> string |
33 val head_of_rule: ast * ast -> string |
35 val rule_error: ast * ast -> string option |
34 val rule_error: ast * ast -> string option |
36 val fold_ast: string -> ast list -> ast |
35 val fold_ast: string -> ast list -> ast |
37 val fold_ast_p: string -> ast list * ast -> ast |
36 val fold_ast_p: string -> ast list * ast -> ast |
38 val unfold_ast: string -> ast -> ast list |
37 val unfold_ast: string -> ast -> ast list |
39 val unfold_ast_p: string -> ast -> ast list * ast |
38 val unfold_ast_p: string -> ast -> ast list * ast |
40 val normalize: bool -> bool -> (string -> (ast * ast) list) option -> ast -> ast |
39 val normalize: bool -> bool -> (string -> (ast * ast) list) option -> ast -> ast |
41 val normalize_ast: (string -> (ast * ast) list) option -> ast -> ast |
40 val normalize_ast: (string -> (ast * ast) list) option -> ast -> ast |
42 end; |
41 end; |
43 |
42 |
44 functor AstFun(Pretty: PRETTY): AST = |
43 structure Ast : AST = |
45 struct |
44 struct |
46 |
|
47 structure Pretty = Pretty; |
|
48 |
|
49 |
45 |
50 (** abstract syntax trees **) |
46 (** abstract syntax trees **) |
51 |
47 |
52 (*asts come in two flavours: |
48 (*asts come in two flavours: |
53 - ordinary asts representing terms and typs: Variables are (often) treated |
49 - ordinary asts representing terms and typs: Variables are (often) treated |