2 |
* |
* |
3 |
* COPYRIGHT (c) 2010 The Diderot Project (http://diderot.cs.uchicago.edu) |
* COPYRIGHT (c) 2010 The Diderot Project (http://diderot.cs.uchicago.edu) |
4 |
* All rights reserved. |
* All rights reserved. |
5 |
|
* |
6 |
|
* Pretty printing for the AST representation. |
7 |
*) |
*) |
8 |
|
|
9 |
structure ASTPP : sig |
structure ASTPP : sig |
13 |
end = struct |
end = struct |
14 |
|
|
15 |
structure PP = TextIOPP |
structure PP = TextIOPP |
16 |
|
structure TU = TypeUtil |
17 |
|
|
18 |
val indent = PP.Abs 2 |
val indent = PP.Abs 2 |
19 |
|
|
27 |
string left; pp list |
string left; pp list |
28 |
end |
end |
29 |
|
|
30 |
|
(* print type arguments; we use "#" to denote differentiation arguments, "$" to denote |
31 |
|
* shape arguments, and "%" to denote dimension arguments. |
32 |
|
*) |
33 |
|
fun ppTyArgs (ppStrm, mvs) = let |
34 |
|
val string = PP.string ppStrm |
35 |
|
fun ppTyArg (_, mv) = (case mv |
36 |
|
of Types.TYPE tv => string(TU.toString(TU.resolve tv)) |
37 |
|
| Types.DIFF dv => string("#"^TU.diffToString(TU.resolveDiff dv)) |
38 |
|
| Types.SHAPE sv => string("$"^TU.shapeToString(TU.resolveShape sv)) |
39 |
|
| Types.DIM dv => string("%"^TU.dimToString(TU.resolveDim dv)) |
40 |
|
(* end case *)) |
41 |
|
in |
42 |
|
ppList ppTyArg ("<", ";", ">") (ppStrm, mvs) |
43 |
|
end |
44 |
|
|
45 |
fun ppExp (ppStrm, e) = let |
fun ppExp (ppStrm, e) = let |
46 |
fun sp () = PP.space ppStrm 1 |
fun sp () = PP.space ppStrm 1 |
47 |
val string = PP.string ppStrm |
val string = PP.string ppStrm |
48 |
fun var x = string(Var.nameOf x) |
fun var x = string(Var.nameOf x) |
49 |
fun pp e = (case e |
fun pp e = (case e |
50 |
of AST.E_Var(x, [], _) => var x |
of AST.E_Var(x, [], _) => var x |
51 |
(* FIXME: print type args *) |
| AST.E_Var(x, mvs, ty) => (var x; ppTyArgs (ppStrm, mvs)) |
|
| AST.E_Var(x, mvs, ty) => var x |
|
52 |
| AST.E_Lit lit => string (Literal.toString lit) |
| AST.E_Lit lit => string (Literal.toString lit) |
53 |
| AST.E_Tuple es => ppArgs (ppStrm, es) |
| AST.E_Tuple es => ppArgs (ppStrm, es) |
54 |
| AST.E_Apply(f, [], args, _) => (var f; sp(); ppArgs (ppStrm, args)) |
| AST.E_Apply(f, [], args, _) => (var f; sp(); ppArgs (ppStrm, args)) |
55 |
| AST.E_Apply(f, mvs, args, _) => ( |
| AST.E_Apply(f, mvs, args, _) => ( |
56 |
(* FIXME: print type args *) |
var f; ppTyArgs (ppStrm, mvs); sp(); ppArgs (ppStrm, args)) |
|
var f; sp(); ppArgs (ppStrm, args)) |
|
57 |
| AST.E_Cons es => ( |
| AST.E_Cons es => ( |
58 |
ppList ppExp ("[", ",", "]") (ppStrm, es)) |
ppList ppExp ("[", ",", "]") (ppStrm, es)) |
59 |
| AST.E_Cond(e1, e2, e3) => ( |
| AST.E_Cond(e1, e2, e3) => ( |
71 |
fun var x = string(Var.nameOf x) |
fun var x = string(Var.nameOf x) |
72 |
in |
in |
73 |
PP.openHBox ppStrm; |
PP.openHBox ppStrm; |
74 |
string(TypeUtil.toString(#2(Var.typeOf x))); sp(); var x; |
string(TU.toString(#2(Var.typeOf x))); sp(); var x; |
75 |
sp(); string "="; sp(); ppExp(ppStrm, e); string ";"; |
sp(); string "="; sp(); ppExp(ppStrm, e); string ";"; |
76 |
PP.closeBox ppStrm |
PP.closeBox ppStrm |
77 |
end |
end |
158 |
in |
in |
159 |
PP.openHBox ppStrm; |
PP.openHBox ppStrm; |
160 |
string "actor"; sp(); string(Atom.toString name); sp(); |
string "actor"; sp(); string(Atom.toString name); sp(); |
161 |
ppList (fn (_, x) => (string(TypeUtil.toString(#2(Var.typeOf x))); sp(); var x)) |
ppList (fn (_, x) => (string(TU.toString(#2(Var.typeOf x))); sp(); var x)) |
162 |
("(", ",", ")") (ppStrm, params); |
("(", ",", ")") (ppStrm, params); |
163 |
PP.closeBox ppStrm; |
PP.closeBox ppStrm; |
164 |
nl(); |
nl(); |
180 |
fn AST.D_Input(x, NONE) => ( |
fn AST.D_Input(x, NONE) => ( |
181 |
PP.openHBox ppStrm; |
PP.openHBox ppStrm; |
182 |
string "input"; sp(); |
string "input"; sp(); |
183 |
string(TypeUtil.toString(#2(Var.typeOf x))); sp(); var x; string ";"; |
string(TU.toString(#2(Var.typeOf x))); sp(); var x; string ";"; |
184 |
PP.closeBox ppStrm; |
PP.closeBox ppStrm; |
185 |
nl()) |
nl()) |
186 |
| AST.D_Input(x, SOME e) => ( |
| AST.D_Input(x, SOME e) => ( |
187 |
PP.openHBox ppStrm; |
PP.openHBox ppStrm; |
188 |
string "input"; sp(); |
string "input"; sp(); |
189 |
string(TypeUtil.toString(#2(Var.typeOf x))); sp(); var x; |
string(TU.toString(#2(Var.typeOf x))); sp(); var x; |
190 |
sp(); string "="; sp(); ppExp(ppStrm, e); string ";"; |
sp(); string "="; sp(); ppExp(ppStrm, e); string ";"; |
191 |
PP.closeBox ppStrm; |
PP.closeBox ppStrm; |
192 |
nl()) |
nl()) |