From: <jom...@us...> - 2014-09-22 17:56:28
|
Revision: 1807 http://sourceforge.net/p/jason/svn/1807 Author: jomifred Date: 2014-09-22 17:56:19 +0000 (Mon, 22 Sep 2014) Log Message: ----------- fix bug related to unique IDs for unnamed vars Modified Paths: -------------- trunk/lib/jacamo.jar trunk/src/jason/asSemantics/Intention.java trunk/src/jason/asSemantics/TransitionSystem.java trunk/src/jason/asSemantics/Unifier.java trunk/src/jason/asSyntax/Structure.java trunk/src/jason/asSyntax/UnnamedVar.java trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc trunk/src/jason/asSyntax/parser/as2j.java trunk/src/test/VarTermTest.java Modified: trunk/lib/jacamo.jar =================================================================== (Binary files differ) Modified: trunk/src/jason/asSemantics/Intention.java =================================================================== --- trunk/src/jason/asSemantics/Intention.java 2014-09-19 12:34:07 UTC (rev 1806) +++ trunk/src/jason/asSemantics/Intention.java 2014-09-22 17:56:19 UTC (rev 1807) @@ -198,7 +198,7 @@ for (IntendedMeans im: intendedMeans) { s.append(" " + im + "\n"); if (i++ > 40) { - s.append("..... to more "+ (size()-40) + " intended means!\n"); + s.append("... more "+ (size()-40) + " intended means!\n"); break; } } Modified: trunk/src/jason/asSemantics/TransitionSystem.java =================================================================== --- trunk/src/jason/asSemantics/TransitionSystem.java 2014-09-19 12:34:07 UTC (rev 1806) +++ trunk/src/jason/asSemantics/TransitionSystem.java 2014-09-22 17:56:19 UTC (rev 1807) @@ -717,7 +717,7 @@ im.unif = iu.next(); updateIntention(); } else { - String msg = "Constraint "+h+" was not satisfied ("+h.getSrcInfo()+")."; + String msg = "Constraint "+h+" was not satisfied ("+h.getSrcInfo()+") un="+u; generateGoalDeletion(conf.C.SI, JasonException.createBasicErrorAnnots(new Atom("constraint_failed"), msg)); logger.fine(msg); } Modified: trunk/src/jason/asSemantics/Unifier.java =================================================================== --- trunk/src/jason/asSemantics/Unifier.java 2014-09-19 12:34:07 UTC (rev 1806) +++ trunk/src/jason/asSemantics/Unifier.java 2014-09-22 17:56:19 UTC (rev 1807) @@ -364,7 +364,7 @@ Term vl = function.get(k).clone(); if (vl instanceof Literal) ((Literal)vl).makeVarsAnnon(); - Structure pair = ASSyntax.createStructure("map", new UnnamedVar("_"+UnnamedVar.getUniqueId()+k), vl); // the var must be changed to avoid cyclic references latter + Structure pair = ASSyntax.createStructure("map", UnnamedVar.create(k.toString()), vl); // the var must be changed to avoid cyclic references latter tail = tail.append(pair); } return lf; Modified: trunk/src/jason/asSyntax/Structure.java =================================================================== --- trunk/src/jason/asSyntax/Structure.java 2014-09-19 12:34:07 UTC (rev 1806) +++ trunk/src/jason/asSyntax/Structure.java 2014-09-22 17:56:19 UTC (rev 1807) @@ -355,7 +355,7 @@ // if the variable hasn't been renamed given the input unifier, then rename it. if (deref.equals(vt)) { // forget the name - UnnamedVar var = useShortUnnamedVars ? new UnnamedVar() : new UnnamedVar("_" + UnnamedVar.getUniqueId() + t); + UnnamedVar var = useShortUnnamedVars ? new UnnamedVar() : UnnamedVar.create(t.toString()); //var.setFromMakeVarAnnon(); // if deref has annotations then we need to replicate these in the new variable Modified: trunk/src/jason/asSyntax/UnnamedVar.java =================================================================== --- trunk/src/jason/asSyntax/UnnamedVar.java 2014-09-19 12:34:07 UTC (rev 1806) +++ trunk/src/jason/asSyntax/UnnamedVar.java 2014-09-22 17:56:19 UTC (rev 1807) @@ -23,6 +23,8 @@ package jason.asSyntax; +import java.util.concurrent.atomic.AtomicInteger; + /** * Represents an unnamed variable '_'. * @@ -32,56 +34,53 @@ private static final long serialVersionUID = 1L; - private static int varCont = 1; - private int myId; - //private boolean fromRename = false; + private static AtomicInteger varCont = new AtomicInteger(0); + public int myId; public UnnamedVar() { - super("_" + (varCont++)); - myId = varCont; + this(varCont.incrementAndGet()); } - public UnnamedVar(String name) { - super( name.length() == 1 ? "_" + (varCont++) : name); - myId = varCont; - } - public UnnamedVar(int id) { super("_" + id); myId = id; } - - public static int getUniqueId() { - return varCont++; + + // do not allow the creation of unnamed var by name since the myId attribute should be defined! + // this constructor is for internal use (see create below) + private UnnamedVar(String name) { + super(name); } - /* - public void setFromMakeVarAnnon() { - fromRename = true; + public static UnnamedVar create(String name) { + if (name.length() == 1) { // the case of "_" + return new UnnamedVar(); + } else { + int id = varCont.incrementAndGet(); + UnnamedVar v = new UnnamedVar("_"+id+name); + v.myId = id; + return v; + } } - - public boolean isFromMakeVarAnnon() { - return fromRename; + + public Term clone() { + UnnamedVar newv = new UnnamedVar(getFunctor()); + newv.myId = this.myId; + if (hasAnnot()) + newv.addAnnots(this.getAnnots().cloneLT()); + return newv; } - */ - public Term clone() { - /*if (hasValue()) { - return getValue().clone(); - } else {*/ - UnnamedVar newv = new UnnamedVar(getFunctor()); - newv.myId = this.myId; - //newv.fromRename = this.fromRename; - if (hasAnnot()) - newv.addAnnots(this.getAnnots().cloneLT()); - return newv; - //} + @Override + public boolean equals(Object t) { + if (t == null) return false; + if (t == this) return true; + if (t instanceof UnnamedVar) return ((UnnamedVar)t).myId == this.myId; + return false; } public int compareTo(Term t) { - /*if (hasValue()) { - return super.compareTo(t); - } else */if (t instanceof UnnamedVar) { + if (t instanceof UnnamedVar) { if (myId > ((UnnamedVar)t).myId) return 1; else if (myId < ((UnnamedVar)t).myId) @@ -97,6 +96,6 @@ @Override public boolean isUnnamedVar() { - return true; //!hasValue(); + return true; } } Modified: trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc =================================================================== --- trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2014-09-19 12:34:07 UTC (rev 1806) +++ trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2014-09-22 17:56:19 UTC (rev 1807) @@ -629,7 +629,7 @@ ( "," f=term_in_list() { last = last.append(f); } )* [ "|" ( K=<VAR> { last.setNext(new VarTerm(K.image)); } - | K=<UNNAMEDVAR> { last.setNext(new UnnamedVar(K.image)); } + | K=<UNNAMEDVAR> { last.setNext(UnnamedVar.create(K.image)); } | f=list() { last = last.concat((ListTerm)f); } ) ] @@ -818,7 +818,7 @@ VarTerm var(): { Token K; VarTerm v; ListTerm lt; } { ( K = <VAR> { v = new VarTerm(K.image); v.setSrcInfo(new SourceInfo(asSource, K.beginLine));} - | K = <UNNAMEDVAR> { v = new UnnamedVar(K.image); } + | K = <UNNAMEDVAR> { v = UnnamedVar.create(K.image); } ) [ lt = list() { v.setAnnots(lt); } Modified: trunk/src/jason/asSyntax/parser/as2j.java =================================================================== --- trunk/src/jason/asSyntax/parser/as2j.java 2014-09-19 12:34:07 UTC (rev 1806) +++ trunk/src/jason/asSyntax/parser/as2j.java 2014-09-22 17:56:19 UTC (rev 1807) @@ -1034,7 +1034,7 @@ break; case UNNAMEDVAR: K = jj_consume_token(UNNAMEDVAR); - last.setNext(new UnnamedVar(K.image)); + last.setNext(UnnamedVar.create(K.image)); break; case 48: f = list(); @@ -1482,7 +1482,7 @@ break; case UNNAMEDVAR: K = jj_consume_token(UNNAMEDVAR); - v = new UnnamedVar(K.image); + v = UnnamedVar.create(K.image); break; default: jj_la1[58] = jj_gen; Modified: trunk/src/test/VarTermTest.java =================================================================== --- trunk/src/test/VarTermTest.java 2014-09-19 12:34:07 UTC (rev 1806) +++ trunk/src/test/VarTermTest.java 2014-09-22 17:56:19 UTC (rev 1807) @@ -500,6 +500,12 @@ Collections.sort(l); //assertEquals("[B, F, _11, _6, _5]", l.toString()); // this order is VERY important for unification! assertEquals("[B, F, _5, _6, _11]", l.toString()); // this order is VERY important for unification! + + VarTerm v1 = new UnnamedVar(); + VarTerm v2 = new UnnamedVar(); + assertTrue(v1.clone().compareTo(v2.clone()) < 0); + assertTrue(v1.clone().compareTo(v1.clone()) == 0); + assertTrue(v2.clone().compareTo(v1.clone()) > 0); } public void testCopy() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |