Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Diff of /trunk/src/ast/ast-pp.sml
ViewVC logotype

Diff of /trunk/src/ast/ast-pp.sml

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 95, Thu May 27 17:22:20 2010 UTC revision 96, Thu May 27 17:57:31 2010 UTC
# Line 2  Line 2 
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
# Line 11  Line 13 
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    
# Line 24  Line 27 
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) => (
# Line 55  Line 71 
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
# Line 142  Line 158 
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();
# Line 164  Line 180 
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())

Legend:
Removed from v.95  
changed lines
  Added in v.96

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0