From: yeom Date: Wed, 27 Apr 2011 21:30:06 +0000 (+0000) Subject: extends the location hierarchy definition grammar. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=fc2e10671ff26bec674f697d45d70465b2bfe820;p=IRC.git extends the location hierarchy definition grammar. while working on annotating ssjava class library, realize the need to have a way to keep only one location(with top and bottom) in the local hierarchy. --- diff --git a/Robust/src/IR/Tree/BuildIR.java b/Robust/src/IR/Tree/BuildIR.java index 91370d91..6aca57d4 100644 --- a/Robust/src/IR/Tree/BuildIR.java +++ b/Robust/src/IR/Tree/BuildIR.java @@ -638,12 +638,17 @@ public class BuildIR { String spinLoc=loc.getChildren().elementAt(0).getLabel(); spinLocSet.add(spinLoc); } else { - String lowerLoc=loc.getChildren().elementAt(0).getLabel(); - String higherLoc= loc.getChildren().elementAt(1).getLabel(); - locOrder.put(higherLoc, lowerLoc); - if (locOrder.isIntroducingCycle(higherLoc)) { - throw new Error("Error: the order relation " + lowerLoc + " < " + higherLoc - + " introduces a cycle."); + if(loc.getChildren().size()==1){ + String locIentifier=loc.getChildren().elementAt(0).getLabel(); + locOrder.put(locIentifier); + }else{ + String lowerLoc=loc.getChildren().elementAt(0).getLabel(); + String higherLoc= loc.getChildren().elementAt(1).getLabel(); + locOrder.put(higherLoc, lowerLoc); + if (locOrder.isIntroducingCycle(higherLoc)) { + throw new Error("Error: the order relation " + lowerLoc + " < " + higherLoc + + " introduces a cycle."); + } } } } diff --git a/Robust/src/Parse/java14.cup b/Robust/src/Parse/java14.cup index ab4a13f7..d37ae7f4 100644 --- a/Robust/src/Parse/java14.cup +++ b/Robust/src/Parse/java14.cup @@ -1322,6 +1322,11 @@ location_order ::= pn.addChild(loc); RESULT=pn; :} + | IDENTIFIER:loc {: + ParseNode pn=new ParseNode("location_order",parser.lexer.line_num); + pn.addChild(loc); + RESULT=pn; + :} ; // 19.9) Interfaces diff --git a/Robust/src/Util/Lattice.java b/Robust/src/Util/Lattice.java index de9c98b3..cb8da73f 100644 --- a/Robust/src/Util/Lattice.java +++ b/Robust/src/Util/Lattice.java @@ -34,6 +34,20 @@ public class Lattice { return table.keySet(); } + public boolean put(T key) { + if (table.containsKey(key)) { + return false; + } else { + // new key, need to be connected with top/bottom + size++; + table.get(top).add(key); + Set neightborSet = new HashSet(); + neightborSet.add(bottom); + table.put(key, neightborSet); + return true; + } + } + public boolean put(T key, T value) { Set s; @@ -84,7 +98,7 @@ public class Lattice { do { oldReachableSize = reachableSet.size(); Set nextLevelNeighbors = new HashSet(); - for (Iterator iterator = neighborSet.iterator(); iterator.hasNext(); ) { + for (Iterator iterator = neighborSet.iterator(); iterator.hasNext();) { T element = iterator.next(); Set neighbors = get(element); if (neighbors != null) { @@ -137,7 +151,7 @@ public class Lattice { return true; } else { boolean reachable = false; - for (Iterator iterator = neighborSet.iterator(); iterator.hasNext(); ) { + for (Iterator iterator = neighborSet.iterator(); iterator.hasNext();) { T neighbor = iterator.next(); reachable = reachable || isGreaterThan(neighbor, b); } @@ -150,7 +164,7 @@ public class Lattice { Set lowerSet = new HashSet(); // get lower set of input locations - for (Iterator iterator = inputSet.iterator(); iterator.hasNext(); ) { + for (Iterator iterator = inputSet.iterator(); iterator.hasNext();) { T element = iterator.next(); lowerSet.addAll(getLowerSet(element, new HashSet())); lowerSet.add(element); @@ -158,10 +172,10 @@ public class Lattice { // an element of lower bound should be lower than every input set Set toberemoved = new HashSet(); - for (Iterator inputIterator = inputSet.iterator(); inputIterator.hasNext(); ) { + for (Iterator inputIterator = inputSet.iterator(); inputIterator.hasNext();) { T inputElement = inputIterator.next(); - for (Iterator iterator = lowerSet.iterator(); iterator.hasNext(); ) { + for (Iterator iterator = lowerSet.iterator(); iterator.hasNext();) { T lowerElement = (T) iterator.next(); if (!inputElement.equals(lowerElement)) { if (!isGreaterThan(inputElement, lowerElement)) { @@ -174,10 +188,10 @@ public class Lattice { // calculate the greatest element of lower set // find an element A, where every lower bound B of lowerSet, B iterator = lowerSet.iterator(); iterator.hasNext(); ) { + for (Iterator iterator = lowerSet.iterator(); iterator.hasNext();) { T lowerElement = iterator.next(); boolean isGreaterThanAll = true; - for (Iterator iterator2 = lowerSet.iterator(); iterator2.hasNext(); ) { + for (Iterator iterator2 = lowerSet.iterator(); iterator2.hasNext();) { T e = iterator2.next(); if (!lowerElement.equals(e)) { if (!isGreaterThan(lowerElement, e)) { @@ -198,7 +212,7 @@ public class Lattice { Set neighborSet = get(element); if (neighborSet != null) { lowerSet.addAll(neighborSet); - for (Iterator iterator = neighborSet.iterator(); iterator.hasNext(); ) { + for (Iterator iterator = neighborSet.iterator(); iterator.hasNext();) { T neighbor = iterator.next(); lowerSet = getLowerSet(neighbor, lowerSet); }