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

SCM Repository

[diderot] Annotation of /branches/charisee_dev/src/compiler/ein/printer.sml
ViewVC logotype

Annotation of /branches/charisee_dev/src/compiler/ein/printer.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2391 - (view) (download)
Original Path: branches/charisee/src/compiler/ein/printer.sml

1 : cchiw 2383
2 : cchiw 2387 (*printer Function returns String*)
3 : cchiw 2383 structure Printer = struct
4 :    
5 :     local
6 : jhr 2391 structure G = GenericEin
7 :     structure E = Ein
8 :     structure S = Specialize
9 :     structure R = Rewrite
10 :     in
11 : cchiw 2383
12 : jhr 2391 fun intList l = String.concatWith "," (List.map Int.toString l)
13 :    
14 :     fun printerE (Ein.EIN{params, index, body}) = let
15 :     fun printer2 term = (case term
16 :     of E.Tensor(id, mx) => (
17 :     case mx
18 :     of [] => ( " S"^Int.toString(id))
19 :     | [a] => ( " V"^Int.toString(id)^ "_"^Int.toString(a))
20 :     | [a,b]=> ("M"^Int.toString(id)^ "_"^ intList(mx))
21 :     | _ => ("T"^Int.toString(id)^ "_"^intList(mx))
22 :     (* end case *))
23 :     | E.Const(f)=> ("zero")
24 :     | E.Field(id, mx) => ( "F"^Int.toString(id)^"_"^intList(mx))
25 :     | E.Add(e)=> let
26 :     fun imp([])=""
27 :     | imp([a])=printer2(a)
28 :     | imp(a::es)=(printer2(a)^"+"^imp(es))
29 :     in ("("^imp(e)^")") end
30 :     | E.Sub(b,c)=>("("^printer2(b)^"- "^printer2(c)^ ")")
31 : cchiw 2383
32 : jhr 2391 | E.Prod(e)=>let
33 :     fun imp [] = ""
34 :     | imp [a] = printer2(a)
35 :     | imp (a::es) = printer2(a) ^ " "^ imp(es)
36 :     in "("^imp(e)^")" end
37 :     | E.Delta(i,j)=> (" Delta_"^Int.toString(i)^Int.toString(j))
38 :     | E.Epsilon(i,j,k) =>(" E_"^Int.toString(i)^Int.toString(j)^Int.toString(k) )
39 :     | E.Conv(i,j,k,l) => let
40 :     fun imp([])=""
41 :     | imp([(a,b)])=(" Delta_"^Int.toString(a)^Int.toString(b))
42 :     | imp((a,b)::es)=(" Delta_"^Int.toString(a)^Int.toString(b))^" "^imp(es)
43 :     in i^"*"^k^"^{"^imp(j)^"}_"^Int.toString(l) end
44 :     | E.Partial(e)=> ("d"^ Int.toString(length(e))^"/dx_"^intList(e))
45 :     | E.Probe(a,b)=> ( "("^printer2(a)^ ")"^"@"^"T"^Int.toString(b))
46 :     | E.Apply(a, b)=> (printer2(a)^ " " ^printer2(b) ^ " " )
47 :     | E.Sum (id,a)=> ( " Sigma:"^Int.toString(id)^ printer2(a) )
48 :     | _ =>("newbie")
49 :     (* end case *))
50 :     fun Index ((E.IX(dim))::i, count) = String.concat[
51 :     "(", Int.toString count, " DIM:", Int.toString dim, ")",
52 :     Index(i,count+1)
53 :     ]
54 :     | Index ((E.SX(dim))::i, count)=("} {Summation:("^Int.toString(count) ^
55 :     " DIM:"^Int.toString(dim)^")"^ Index(i,count+1))
56 :     | Index (_, count) = ""
57 : cchiw 2383 in
58 : cchiw 2387 ("\n<"^printer2(body)^">"^"_{"^Index(index,0)^"}")
59 :     end
60 : cchiw 2383
61 :    
62 : cchiw 2387 fun printerApp(R.App(e,l)) =let
63 :     fun argList([])=""
64 :     | argList([e])=e
65 :     |argList(e::es)= e^","^argList(es)
66 :     in printerE(e)^"["^argList(l)^"]" end
67 :     |printerApp(_)=""
68 : cchiw 2383
69 :    
70 : jhr 2391 end (* local *)
71 :     end

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