00001 package edu.ksu.cis.bandera.abstraction;
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 import edu.ksu.cis.bandera.abstraction.typeinference.*;
00037 import edu.ksu.cis.bandera.specification.nnf.*;
00038 import java.util.*;
00039 import ca.mcgill.sable.soot.*;
00040 import ca.mcgill.sable.soot.jimple.*;
00041 import ca.mcgill.sable.soot.grimp.*;
00042 public class SpecificationAbstractor {
00043 private Hashtable parameterTable;
00044 private String ltlFormula;
00045
00046
00047
00048
00049
00050
00051 public void abstractLTL(CoercionManager cm, TypeTable typeTable, String ltlForm, Hashtable parameterTable) {
00052 ltlFormula = ltlForm;
00053 this.parameterTable = parameterTable;
00054 if (typeTable.size() == 0) return;
00055
00056 ltlFormula = NNFTransformer.transformLTL(ltlFormula);
00057 for (Enumeration e = parameterTable.keys(); e.hasMoreElements();) {
00058 String p = (String) e.nextElement();
00059 if ("a".equals(p)) continue;
00060 Value pExp = (Value) parameterTable.get(p);
00061 String nP = "!" + p;
00062 String notP = "not_" + p;
00063 if (ltlFormula.indexOf(nP) >= 0) {
00064 parameterTable.put(notP, PredicateAbstractor.abs(cm, typeTable, PredicateTransformer.negate(pExp)));
00065 int idx;
00066 while((idx = ltlFormula.indexOf("!" + p)) >= 0) {
00067 ltlFormula = ltlFormula.substring(0, idx) + notP + ltlFormula.substring(idx + nP.length());
00068 }
00069 }
00070 parameterTable.put(p, PredicateAbstractor.abs(cm, typeTable, PredicateTransformer.pushComplement(pExp)));
00071 }
00072 }
00073
00074
00075
00076
00077 public java.lang.String getLtlFormula() {
00078 return ltlFormula;
00079 }
00080
00081
00082
00083
00084 public java.util.Hashtable getParameterTable() {
00085 return parameterTable;
00086 }
00087 }