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

SCM Repository

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

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

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

revision 2460, Wed Oct 9 19:09:26 2013 UTC revision 2463, Fri Oct 11 03:18:53 2013 UTC
# Line 4  Line 4 
4      local      local
5    
6      structure E = Ein      structure E = Ein
7      structure P=Printer  (*    structure P=Printer
8      structure O =OrderEin      structure O =OrderEin*)
9      in      in
10    
11    
# Line 67  Line 67 
67          fun createDeltas(i,s,t,u,v, e3)= let          fun createDeltas(i,s,t,u,v, e3)= let
68    
69              (*remove index from original index list*)              (*remove index from original index list*)
             (*currrent, left, sumIndex*)  
70    
71              val s'= rmEpsIndex([i,s,t,u,v],[],count)              val s'= rmEpsIndex([i,s,t,u,v],[],count)
72              val s''=[E.V s, E.V t ,E.V u, E.V v]              val s''=[E.V s, E.V t ,E.V u, E.V v]
# Line 336  Line 335 
335                      end)                      end)
336                  in (changed:=true;prod es) end)                  in (changed:=true;prod es) end)
337    
338                  | E.Prod(E.Sum(c1,E.Prod(E.Epsilon e1::es1))::E.Sum(c2,E.Prod(E.Epsilon e2::es2))::es)=>let
339                      val (change,e,rest)=epsToDels(E.Sum(c1@c2, E.Prod([E.Epsilon e1, E.Epsilon e2]@es1@es2@es)))
340                      in(case (change,e, rest)
341                        of (1,[e1],_)=> e1
342                        | _=>body)
343    
344                    end
345                | E.Prod(e::es)=>let                | E.Prod(e::es)=>let
346                      val e'=rewriteBody e                      val e'=rewriteBody e
347                      val e2=rewriteBody(E.Prod es)                      val e2=rewriteBody(E.Prod es)
# Line 382  Line 388 
388                              )                              )
389                          |_=>body)                          |_=>body)
390                     end                     end
391    
392                  | E.Sum(c1,E.Prod(E.Epsilon eps1::E.Sum(c2,E.Prod(E.Epsilon eps2::s2))::ps))=>let
393                        val (i, e, rest)=epsToDels(E.Sum(c1@c2, E.Prod([E.Epsilon eps1, E.Epsilon eps2]@ s2@ps)))
394                      in (case (i,e,rest)
395                    of (1,[e1],_) =>(changed:=true; e1)
396                        |_ => E.Sum(c1,rewriteBody( E.Prod(E.Epsilon eps1::E.Sum(c2,E.Prod(E.Epsilon eps2::s2))::ps)))
397                        (* end case*))
398                      end
399    
400                | E.Sum(c, E.Prod(E.Delta d::es))=>let                | E.Sum(c, E.Prod(E.Delta d::es))=>let
401                      val (change,a)=reduceDelta(body)                      val (change,a)=reduceDelta(body)
402                      val (change',body')=(case a                      val (change',body')=(case a
# Line 416  Line 431 
431    
432        fun loop body = let        fun loop body = let
433              val body' = rewriteBody body              val body' = rewriteBody body
434    
435              in              in
436                if !changed                if !changed
437                     then (changed := false; loop body')                  then (changed := false;(*print(P.printbody body');*) print "\n => \n" ;loop body')
438                  else body'                  else body'
439              end              end
440      val b = loop body      val b = loop body
# Line 428  Line 444 
444  end  end
445    
446    
447    
448  end (* local *)  end (* local *)

Legend:
Removed from v.2460  
changed lines
  Added in v.2463

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