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

SCM Repository

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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2388 - (view) (download)

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

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