Checking in code to perform safety checks on repair dependency graph.
[repair.git] / Repair / RepairCompiler / MCC / IR / LogicStatement.java
index 43fb985118580afedc3db675b03fbfe9a9f287b0..58710048a6ad9ea491a92486d995782d3f00f540 100755 (executable)
@@ -7,7 +7,43 @@ public class LogicStatement {
     public static final Operation AND = new Operation("AND");
     public static final Operation OR = new Operation("OR");
     public static final Operation NOT = new Operation("NOT");
+
+    public String name() {
+       if (op==NOT)
+           return "!"+left.name();
+       String name=left.name();
+       name+=" "+op.toString()+" ";
+       if (right!=null)
+           name+=right.name();
+       return name;
+    }
+
+    public Set getInversedRelations() {
+        if (left == null) {
+            throw new IRException();
+        }
+        Set set = left.getInversedRelations();
+        if (right != null) {
+            set.addAll(right.getInversedRelations());
+        }
+        return set;
+    }
     
+    public DNFConstraint constructDNF() {
+       if (op==AND) {
+           DNFConstraint leftd=left.constructDNF();
+           DNFConstraint rightd=right.constructDNF();
+           return leftd.and(rightd);
+       } else if (op==OR) {
+           DNFConstraint leftd=left.constructDNF();
+           DNFConstraint rightd=right.constructDNF();
+           return leftd.or(rightd);
+       } else if (op==NOT) {
+           DNFConstraint leftd=left.constructDNF();
+           return leftd.not();
+       } else throw new Error();
+    }
+
     public static class Operation {
         private final String name;
         private Operation(String opname) { name = opname; }