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

SCM Repository

[diderot] Diff of /branches/ein16/src/compiler/high-il/normalize-ein.sml
ViewVC logotype

Diff of /branches/ein16/src/compiler/high-il/normalize-ein.sml

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

revision 2498, Wed Oct 30 17:35:23 2013 UTC revision 2499, Mon Nov 4 16:10:36 2013 UTC
# Line 81  Line 81 
81    
82    
83  (*remove eps Index*)  (*remove eps Index*)
84  fun rmEpsIndex(_,_,[])=[]  fun rmEpsIndex(i,[],rest)=rest
85      | rmEpsIndex([],[],cs)=cs    | rmEpsIndex(i, (E.V c ,lb, ub)::es,rest)=
86      | rmEpsIndex([],m ,e1::cs)=[e1]@rmEpsIndex(m,[],cs)      if (i=c) then rest@es
87      | rmEpsIndex(i::ix,rest ,(E.V c)::cs)=      else rmEpsIndex(i, es, rest@[(E.V c, lb, ub)])
88          if(i=c) then rmEpsIndex(rest@ix,[],cs)  
         else rmEpsIndex(ix,rest@[i],(E.V c)::cs)  
89    
90  (*remove index variable from list*)  (*remove index variable from list*)
91  fun rmIndex(_,_,[])=[]  fun rmIndex(_,_,[])=[]
92      | rmIndex([],[],cs)=cs      | rmIndex([],[],cs)=cs
93      | rmIndex([],m ,e1::cs)=[e1]@rmIndex(m,[],cs)      | rmIndex([],m ,e1::cs)=[e1]@rmIndex(m,[],cs)
94      | rmIndex(i::ix,rest ,c::cs)=      | rmIndex(i::ix,rest ,(c,lb,ub)::cs)=
95          if(i=c) then rmIndex(rest@ix,[],cs)          if(i=c) then rmIndex(rest@ix,[],cs)
96          else rmIndex(ix,rest@[i],c::cs)          else rmIndex(ix,rest@[i],(c,lb,ub)::cs)
97    
98    
99    
100    
101  (* Transform eps to deltas*)  (* Transform eps to deltas*)
# Line 107  Line 108 
108    
109              (*remove index from original index list*)              (*remove index from original index list*)
110    
111              val s'= rmEpsIndex([i,s,t,u,v],[],count)              val s'= rmEpsIndex(i,count,[])
112              val s''=[E.V s, E.V t ,E.V u, E.V v]  
113              val deltas= E.Sub(              val deltas= E.Sub(
114                      E.Sum(s'',E.Prod([E.Delta(E.V s,E.V u), E.Delta(E.V t,E.V v)] @e3)),                      E.Prod([E.Delta(E.V s,E.V u), E.Delta(E.V t,E.V v)] @e3),
115                      E.Sum(s'',E.Prod([E.Delta(E.V s,E.V v), E.Delta(E.V t,E.V u)]@e3)))                      E.Prod([E.Delta(E.V s,E.V v), E.Delta(E.V t,E.V u)]@e3))
116    
117                  in (case (eps,es,s')                  in (case (eps,es,s')
118                  of ([],[],[]) =>(1,deltas)                  of ([],[],[]) =>(1,deltas)
# Line 346  Line 347 
347    
348                | E.Prod(E.Partial r1::E.Partial r2::p)=>                | E.Prod(E.Partial r1::E.Partial r2::p)=>
349                      (changed:=true;E.Prod([E.Partial(r1@r2)]@p))                      (changed:=true;E.Prod([E.Partial(r1@r2)]@p))
               | E.Prod [E.Partial _, _] =>body  
               | E.Prod (E.Partial p1::es)=> (let  
                     val (pre,post)=filter((List.map rewriteBody es),[],[])  
                     val x=E.Prod(pre@[prodPartial(post,p1)])  
                 in (changed:=true;x) end)  
350                | E.Prod(E.Sum(c1,E.Prod(E.Epsilon e1::es1))::E.Sum(c2,E.Prod(E.Epsilon e2::es2))::es)=>let                | E.Prod(E.Sum(c1,E.Prod(E.Epsilon e1::es1))::E.Sum(c2,E.Prod(E.Epsilon e2::es2))::es)=>let
351                    val (change,e,rest)=epsToDels(E.Sum(c1@c2, E.Prod([E.Epsilon e1, E.Epsilon e2]@es1@es2@es)))                    val (change,e,rest)=epsToDels(E.Sum(c1@c2, E.Prod([E.Epsilon e1, E.Epsilon e2]@es1@es2@es)))
352                  in (case (change,e, rest)                  in (case (change,e, rest)
# Line 365  Line 361 
361                          end                          end
362                      (*end case*))                      (*end case*))
363                  end                  end
364                  | E.Prod[e1,e2]=> body
365                | E.Prod(e::es)=>let                | E.Prod(e::es)=>let
366                      val e'=rewriteBody e                      val e'=rewriteBody e
367                      val e2=rewriteBody(E.Prod es)                      val e2=rewriteBody(E.Prod es)
# Line 458  Line 455 
455                      in exp' end                      in exp' end
456    
457    
458                  (*                  | E.Sum(c,e)=>E.Sum(c,rewriteBody e)
                     val exp'=(case exp  
                         of  E.Const c => E.Const c  
                         | E.Sum(c',E.Apply(d',e'))  => (let  
                             val s'=rewriteBody(E.Sum(c',e'))  
                             in (case s'  
                                 of E.Sum([],e'')=> rewriteBody (E.Apply(d',e''))  
                                 | E.Sum(c'',e'') => E.Sum(c'',rewriteBody(E.Apply(d',e'')))  
                                 | _ => E.Apply(d',s')  
                                 (*end case*))  
                             end)  
                         | _ =>exp  
                         (* end case *))  
   
   
                 in (case change of 1=>(changed:=true;exp') |_=>exp')  
                 end  
                 *)  
   
                 | E.Sum(c,e)=>(E.Sum(c,rewriteBody e))  
459    
460              (*Probe*)              (*Probe*)
461              | E.Probe(E.Sum(c,s),x)=>(changed:=true;E.Sum(c,E.Probe(s,x)))              | E.Probe(E.Sum(c,s),x)=>(changed:=true;E.Sum(c,E.Probe(s,x)))
# Line 552  Line 530 
530                  then (changed := false ;loop body')                  then (changed := false ;loop body')
531                  else body'                  else body'
532              end              end
533                    val z=print "hi"
534                    val u= print(Int.toString( length(params)));
535      val b = loop body      val b = loop body
536      in      in
537                  Ein.EIN{params=params, index=index, body=b}                  Ein.EIN{params=params, index=index, body=b}

Legend:
Removed from v.2498  
changed lines
  Added in v.2499

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