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 4409, Fri Aug 12 17:46:21 2016 UTC revision 4410, Fri Aug 12 18:28:32 2016 UTC
# Line 175  Line 175 
175                  end*)  prod2(e1, e2,[])                  end*)  prod2(e1, e2,[])
176          (*************Product EPS **************)          (*************Product EPS **************)
177          | E.Opn(E.Prod,(E.G(E.Epsilon e1)::ps))=> let          | E.Opn(E.Prod,(E.G(E.Epsilon e1)::ps))=> let
178    
179              val E.G(E.Epsilon(i,j,k))=E.G(E.Epsilon e1)              val E.G(E.Epsilon(i,j,k))=E.G(E.Epsilon e1)
180              val eps1=E.G(E.Epsilon(i,j,k))              val eps1=E.G(E.Epsilon(i,j,k))
181              val p1=List.hd(ps)              val p1=List.hd(ps)
# Line 204  Line 205 
205                      (*end case*))                      (*end case*))
206                  (*end case*))                  (*end case*))
207              end              end
208          | E.Opn(E.Prod,E.Sum(c1,e1)::E.Sum(c2,e2)::es)=>(case (e1,e2,es)          | E.Opn(E.Prod,(s1 as E.Sum(c1,e1))::( s2 as E.Sum(c2,e2))::es)=>(case (e1,e2,es)
209              of (E.Opn(E.Prod,E.G(E.Epsilon e1)::es1),E.Opn(E.Prod,E.G(E.Epsilon e2)::es2),_) =>              of (E.Opn(E.Prod,(e1 as E.G(E.Epsilon _))::es1),E.Opn(E.Prod, (e2 as E.G(E.Epsilon _))::es2),_) =>
210                    (case G.epsToDels2(e1 :: e2 :: es1 @ es2)
211                        (* Changed to Deltas*)
212                        of (SOME(e, sx), NONE, rest) => let
213                            val inner = E.Opn(E.Prod,(e::rest))
214                            val inner_sum  = E.Sum(c1@c2@sx,inner)
215                            val prod =  E.Opn(E.Prod, inner_sum::es)
216                            in
217                                ( prod)
218                            end
219                        | (SOME _ , _ , _) => raise Fail "not possible"
220                        | (NONE, NONE, rest) => raise Fail "not possible"
221                        | (NONE, _, _) => let
222                            val eA = rewrite s1
223                            val eB = rewrite (prod2 (s2 ,List.hd(es), List.tl(es)))
224                            in
225                                prod2 (eA, eB, [])
226                            end
227                            (* end case *))
228                        | (_, _, []) => prod2(rewrite(E.Sum(c1, e1)), rewrite(E.Sum(c2, e2)),[])
229                        | _ => let
230                            val e' = rewrite (E.Sum(c1, e1))
231                            val e2 = rewrite (E.Opn(E.Prod, E.Sum(c2, e2) :: es))
232                            in
233                                case e2
234                                    of E.Opn(E.Prod, p1::p') => prod2 (e', p1, p')
235                                    | _ => prod2(e', e2,[])
236                                (* end case *)
237                            end
238    
239    
240    (*
241                  (case G.epsToDels([E.G(E.Epsilon e1), E.G(E.Epsilon e2)]@es1@es2@es)                  (case G.epsToDels([E.G(E.Epsilon e1), E.G(E.Epsilon e2)]@es1@es2@es)
242                      of (1,e,sx,_,_)=> (changed:=true; E.Sum(c1@c2@sx,e))                      of (1,e,sx,_,_)=> (changed:=true; E.Sum(c1@c2@sx,e))
243                      | (_,_,_,_,_)=>                      | (_,_,_,_,_)=>
# Line 215  Line 247 
247                          in prod2(eA, eB, es) end                          in prod2(eA, eB, es) end
248    
249                      (*end case*))                      (*end case*))
250                  | _  => prod2(E.Sum(c1,e1),E.Sum(c2,e2),es)                  | _  => prod2(E.Sum(c1,e1),E.Sum(c2,e2),es)*)
251    
252              (*end case*))              (*end case*))
253          | E.Opn(E.Prod,E.G(E.Delta d)::es) => let          | E.Opn(E.Prod,E.G(E.Delta d)::es) => let
254              val (pre',eps, dels,post)= filterGreek(E.G(E.Delta d)::es)              val (pre',eps, dels,post)= filterGreek(E.G(E.Delta d)::es)
# Line 246  Line 279 
279    
280    
281      fun loop(body ,count) = let      fun loop(body ,count) = let
         val _= (concat["\n N =>",Int.toString(count)])  
282          val body' = rewrite body          val body' = rewrite body
283            (* val _ = print(String.concat["\n\n\t No.",Int.toString(count),"=>", P.printbody(body')]) *)
284          val _=(EqualEin.boolToString(EqualEin.isBodyEq(body,body')))          val _=(EqualEin.boolToString(EqualEin.isBodyEq(body,body')))
285          in          in
286              if !changed              if !changed
287              then  (changed := false ;loop(body',count+1))              then  (changed := false ;loop(body',count+1))
288              else (body',count)              else (body',count)
289          end          end
290        (* val _= print(concat["\n Normalize******  =\n\t",P.printbody(body)]) *)
291      val (b,count) = loop(body,0)      val (b,count) = loop(body,0)
292    
293      in      in

Legend:
Removed from v.4409  
changed lines
  Added in v.4410

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