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

SCM Repository

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

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

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

revision 2383, Thu Jun 13 01:57:34 2013 UTC revision 2387, Sun Jun 16 00:18:49 2013 UTC
# Line 1  Line 1 
1    
2    (*printer Function returns String*)
3  structure Printer = struct  structure Printer = struct
4    
5      local      local
# Line 10  Line 10 
10    
11          in          in
12    
         fun printPairs([])=   print ""  
         | printPairs([e]) =(   let  
                         val (a,b)=e in (print" Delta_";print(Int.toString(a));print(Int.toString(b))) end )  
                  | printPairs(e1::en)= ( printPairs([e1]);  (let val q = (List.app (fn x=>  printPairs([x])) en) in q end)  
                  )  
   
   
     fun printInt(l)=        print(Int.toString(l))  
   
    fun printerG(GenericEin.EIN{params, index, body})=  
    let  
13    
14          fun printer2 term = (case term      fun intList([])=""
15                 of G.Tensor(id, mx) => (          |intList(e::es)= Int.toString(e)^ intList(es)
                     case mx  
                      of [] => (print "S"; print(Int.toString id))  
                       | [a] => (print "T"; print(Int.toString id); print "_"; print(Int.toString a))  
                       | _ => (print "T"; print(Int.toString id); print "_"; List.app printInt mx; print "")  
                     (* end case *))  
                 | G.Field(id, mx) => (print "F";print(Int.toString(id)))  
                 | G.Add([b,c])=>(print("(");printer2(b); print("+");printer2(c); print(")"))  
                 | G.Add([b,c,d])=> (print("(");printer2(b);print("+"); printer2(c); print("+"); printer2(d); print(")"))  
                 | G.Add(_)=>(print("Need to add more terms in the Add"))  
                 | G.Sub(b,c)=>(printer2(b); print("-");printer2(c))  
                 | G.Prod([b,c])=>(print "(";printer2(b); print("*");printer2(c);print(")"))  
                 | G.Prod([b,c,d])=> (print"(";printer2(b);print("*"); printer2(c); print("*"); printer2(d);print (")"))  
                 | G.Prod(_)=>(print("Need to add more terms in the product"))  
                 | G.Delta(i,j)=> ( printPairs([(i,j)]))  
                 | G.Epsilon(i,j,k) =>( print "E_";print(Int.toString(i)); print(Int.toString(j));print(Int.toString(k)))  
                 | G.Conv(i,j,k,l) => (case length(j)  
                         of 0=>( print i; print " * "; print k; print "_"; print(Int.toString(l)))  
                         | _=> (print i; print " * "; print k; print "_";print(Int.toString(l));print("^(");printPairs(j);print ")"  )  
                         (* end case *))  
                 | G.Partial([])=> (print "Error no list here")  
                 | G.Partial([a])=>(print "d/dx_" ; print(Int.toString(a)))  
                 | G.Partial(mx)=>(print "d^"; print(Int.toString(length(mx)))  ;print "/dx_" ;List.map printInt mx;print(""))  
                 | G.Probe(a,b)=> ( print "("; printer2(a); print ")"; print("@"); print("T"); print(Int.toString(b)))  
                 | G.Apply(a, b)=> ( print "Apply "; printer2(a); print " to " ; printer2(b) ; print ")" )  
                 | G.Sum(id, e)=> (print"Sigma "; print(Int.toString(id)); printer2(e))  
                 |_=>print("newbie")  
                 (*end case*))  
                 in  
                 (print"\n<";printer2(body);print">"; index)  
                 end  
16    
         fun printerE(Ein.EIN{params, index, body})=  
    let  
17    
18    
19            fun printerE(Ein.EIN{params, index, body})= let
20          fun printer2 term = (case term          fun printer2 term = (case term
21              of E.Tensor(id, mx) => (              of E.Tensor(id, mx) => (
22                  case mx                  case mx
23                  of [] => (print " S"; print(Int.toString id))                  of [] => ( " S"^Int.toString(id))
24                  | [a] => (print " V"; print(Int.toString id); print "_"; print(Int.toString a))                  | [a] => ( " V"^Int.toString(id)^ "_"^Int.toString(a))
25                  | [a,b]=> (print " M";print(Int.toString id); print "_"; List.app printInt mx)                  | [a,b]=> ("M"^Int.toString(id)^ "_"^ intList(mx))
26                  | _ => (print " T"; print(Int.toString id); print "_"; List.app printInt mx; print "")                  | _ =>  ("T"^Int.toString(id)^ "_"^intList(mx))
27                  (* end case *))                  (* end case *))
28              | E.Const(f)=> print("zero")              | E.Const(f)=> ("zero")
29              | E.Field(id, mx) => (print "F";print(Int.toString(id));print("_"); List.app printInt mx )              | E.Field(id, mx) => ( "F"^Int.toString(id)^"_"^intList(mx))
30              | E.Add([b,c])=>(print("(");printer2(b); print("+");printer2(c); print(")"))              | E.Add(e)=> let
31              | E.Add([b,c,d])=> (print("(");printer2(b);print("+\n"); printer2(c); print("+\n"); printer2(d); print(")"))                  fun imp([])=""
32              | E.Add(_)=>(print("Need to add more terms in the Add"))                  | imp([a])=printer2(a)
33              | E.Sub(b,c)=>(print"(";printer2(b); print(")\n -( ");printer2(c); print ")")                  | imp(a::es)=(printer2(a)^"+"^imp(es))
34                          | E.Prod([a])=> printer2(a)                  in ("("^imp(e)^")") end
35              | E.Prod([E.Partial(a), E.Partial(b)]) =>(printer2(E.Partial(a));print(" "); printer2(E.Partial(b)))              | E.Sub(b,c)=>("("^printer2(b)^")\n -( "^printer2(c)^ ")")
36              | E.Prod([E.Partial(a), E.Partial(b), c])=> (printer2(E.Partial(a));print(" ");  printer2(E.Partial(b)); print(" ");  printer2(c))  
37              | E.Prod(e)=>(print "("; List.map printer2(e);   print")")              | E.Prod(e)=>let
38              | E.Delta(i,j)=> ( printPairs([(i,j)]))                  fun imp([])=""
39              | E.Epsilon(i,j,k) =>( print " E_";print(Int.toString(i)); print(Int.toString(j));print(Int.toString(k));print" " )                  | imp([a])=printer2(a)
40              | E.Conv(i,j,k,l) => (case length(j)                  | imp(a::es)=printer2(a)^" "^imp(es)
41                  of 0=>( print i; print " * "; print k; print "_"; print(Int.toString(l)))                  in "("^imp(e)^")" end
42                  | _=> (print i; print " * "; print k; print "_";print(Int.toString(l));print("^(");printPairs(j);print ")"  )              | E.Delta(i,j)=> (" Delta_"^Int.toString(i)^Int.toString(j))
43                  (* end case *))              | E.Epsilon(i,j,k) =>(" E_"^Int.toString(i)^Int.toString(j)^Int.toString(k) )
44              | E.Partial([])=> (print "Error no list here")              | E.Conv(i,j,k,l) => let
45              | E.Partial([a])=>(print "d/dx_" ; print(Int.toString(a)))                  fun imp([])=""
46              | E.Partial(mx)=>(print "d^"; print(Int.toString(length(mx)))  ;print "/dx_" ;List.map printInt mx;print(""))                  | imp([(a,b)])=(" Delta_"^Int.toString(a)^Int.toString(b))
47              | E.Probe(a,b)=> ( print "("; printer2(a); print ")"; print("@"); print("T"); print(Int.toString(b)))                  | imp((a,b)::es)=(" Delta_"^Int.toString(a)^Int.toString(b))^" "^imp(es)
48              | E.Apply(a, b)=> ( print "  "; printer2(a); print " " ; printer2(b) ;print " " )                  in i^"*"^k^"^{"^imp(j)^"}_"^Int.toString(l) end
49              | E.Sum (id,a)=> (print " Sigma:"; print(Int.toString(id));printer2 a )              | E.Partial(e)=> ("d"^ Int.toString(length(e))^"/dx_"^intList(e))
50              |_=>print("newbie")              | E.Probe(a,b)=> ( "("^printer2(a)^ ")"^"@"^"T"^Int.toString(b))
51                  (*end case *))              | E.Apply(a, b)=> (printer2(a)^ " " ^printer2(b) ^ " " )
52                | E.Sum (id,a)=> ( " Sigma:"^Int.toString(id)^ printer2(a) )
53              fun printIndex ((E.IX(dim))::i, count)=(print("(");              |_=>("newbie")
54                      print(Int.toString(count));              (*end case *))
55                      print(" DIM:");print(Int.toString(dim));print(") ");printIndex(i,count+1))              fun Index ((E.IX(dim))::i, count)=("("^Int.toString(count)^
56                  |printIndex ((E.SX(dim))::i, count)=                      " DIM:"^Int.toString(dim)^")"^ Index(i,count+1))
57              (print("} {Summation:(");print(Int.toString(count));                  |Index ((E.SX(dim))::i, count)=("} {Summation:("^Int.toString(count) ^
58                          print(" DIM:");print(Int.toString(dim)); print(")");                      " DIM:"^Int.toString(dim)^")"^ Index(i,count+1))
59                          printIndex(i,count+1))                  | Index(_, count)= ("")
                 | printIndex(_, count)= print(" ")  
60              in              in
61              (print"\n<";printer2(body);print">"; print("_{");printIndex(index,0);print("}"); index)                  ("\n<"^printer2(body)^">"^"_{"^Index(index,0)^"}")
   
62  end  end
63    
64    
65  fun re e2 = (case e2          fun printerApp(R.App(e,l)) =let
66    of R.App(e, l) => printerE(e)              fun argList([])=""
67    )                | argList([e])=e
68                  |argList(e::es)= e^","^argList(es)
69                in printerE(e)^"["^argList(l)^"]" end
70            |printerApp(_)=""
71    
72    
73  end  end

Legend:
Removed from v.2383  
changed lines
  Added in v.2387

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