|
From: <jom...@us...> - 2008-09-16 10:43:31
|
Revision: 1373
http://jason.svn.sourceforge.net/jason/?rev=1373&view=rev
Author: jomifred
Date: 2008-09-16 17:43:27 +0000 (Tue, 16 Sep 2008)
Log Message:
-----------
add getLogger in Environmnet
Modified Paths:
--------------
trunk/src/jason/asSyntax/ListTermImpl.java
trunk/src/jason/environment/Environment.java
trunk/src/jason/stdlib/substring.java
trunk/src/test/StdLibTest.java
Modified: trunk/src/jason/asSyntax/ListTermImpl.java
===================================================================
--- trunk/src/jason/asSyntax/ListTermImpl.java 2008-09-14 14:54:57 UTC (rev 1372)
+++ trunk/src/jason/asSyntax/ListTermImpl.java 2008-09-16 17:43:27 UTC (rev 1373)
@@ -339,7 +339,7 @@
ListTerm result = new ListTermImpl();
ListTerm tail = result;
for (Term t: set)
- tail = tail.append((Term)t.clone());
+ tail = tail.append(t.clone());
return result;
}
@@ -524,7 +524,7 @@
public Term next() {
last = pos;
pos++;
- return get(last);
+ return get(last); // TODO: get complexity is O(n)! and sort uses this iterator.... it will be nice to have a get implementation with constant time.
}
public int nextIndex() {
return pos+1;
Modified: trunk/src/jason/environment/Environment.java
===================================================================
--- trunk/src/jason/environment/Environment.java 2008-09-14 14:54:57 UTC (rev 1372)
+++ trunk/src/jason/environment/Environment.java 2008-09-16 17:43:27 UTC (rev 1373)
@@ -118,6 +118,9 @@
return environmentInfraTier;
}
+ public Logger getLoger() {
+ return logger;
+ }
public void informAgsEnvironmentChanged(Collection<String> agents) {
if (environmentInfraTier != null) {
@@ -310,7 +313,7 @@
public void run() {
try {
boolean success = executeAction(agName, action);
- environmentInfraTier.actionExecuted(agName, action, success, infraData);
+ environmentInfraTier.actionExecuted(agName, action, success, infraData); // send the result of the execution to the agent
} catch (Exception ie) {
if (!(ie instanceof InterruptedException)) {
logger.log(Level.WARNING, "act error!",ie);
Modified: trunk/src/jason/stdlib/substring.java
===================================================================
--- trunk/src/jason/stdlib/substring.java 2008-09-14 14:54:57 UTC (rev 1372)
+++ trunk/src/jason/stdlib/substring.java 2008-09-16 17:43:27 UTC (rev 1373)
@@ -52,7 +52,7 @@
return singleton;
}
- @Override public int getMinArgs() { return 3; }
+ @Override public int getMinArgs() { return 2; }
@Override public int getMaxArgs() { return 3; }
@Override
Modified: trunk/src/test/StdLibTest.java
===================================================================
--- trunk/src/test/StdLibTest.java 2008-09-14 14:54:57 UTC (rev 1372)
+++ trunk/src/test/StdLibTest.java 2008-09-16 17:43:27 UTC (rev 1373)
@@ -215,10 +215,6 @@
}
- public static void main(String[] a) {
- new StdLibTest().testSubString();
- }
-
public void testConcat() {
ListTerm l1 = ListTermImpl.parseList("[a,b,c]");
ListTerm l2 = ListTermImpl.parseList("[d,e,f]");
@@ -248,7 +244,7 @@
}
@SuppressWarnings("unchecked")
- public void testSubString() {
+ public void testSubString() throws Exception {
StringTerm s1 = new StringTermImpl("a");
StringTerm s2 = new StringTermImpl("bbacca");
@@ -258,22 +254,19 @@
VarTerm X = new VarTerm("X");
Unifier u = new Unifier();
- try {
- assertTrue((Boolean)new jason.stdlib.substring().execute(null, u, new Term[] { s1, s2 }));
- Iterator<Unifier> i = (Iterator)new jason.stdlib.substring().execute(null, u, new Term[] { s1, s2 , X});
- assertEquals(i.next().get("X").toString(), "2");
- assertEquals(i.next().get("X").toString(), "5");
- assertFalse(i.hasNext());
- assertTrue((Boolean)new jason.stdlib.substring().execute(null, u, new Term[] { t1, t2}));
- i = (Iterator)new jason.stdlib.substring().execute(null, new Unifier(), new Term[] { t1, t2, X});
- assertTrue(i.hasNext());
- assertEquals(i.next().get("X").toString(), "9");
- assertFalse(i.hasNext());
+ assertTrue((Boolean)new jason.stdlib.substring().execute(null, u, new Term[] { s1, s2 }));
+ Iterator<Unifier> i = (Iterator)new jason.stdlib.substring().execute(null, u, new Term[] { s1, s2 , X});
+ assertEquals(i.next().get("X").toString(), "2");
+ assertEquals(i.next().get("X").toString(), "5");
+ assertFalse(i.hasNext());
- } catch (Exception e) {
- e.printStackTrace();
- }
+ assertTrue((Boolean)new jason.stdlib.substring().execute(null, u, new Term[] { t1, t2}));
+ i = (Iterator)new jason.stdlib.substring().execute(null, new Unifier(), new Term[] { t1, t2, X});
+ assertTrue(i.hasNext());
+ assertEquals(i.next().get("X").toString(), "9");
+ assertFalse(i.hasNext());
+
}
public void testDropGoal1() throws ParseException {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2008-09-27 15:39:24
|
Revision: 1382
http://jason.svn.sourceforge.net/jason/?rev=1382&view=rev
Author: jomifred
Date: 2008-09-27 15:39:20 +0000 (Sat, 27 Sep 2008)
Log Message:
-----------
optimise Unifier for the new hierarchy of classes
Modified Paths:
--------------
trunk/src/jason/asSemantics/Unifier.java
trunk/src/jason/asSyntax/ArithFunctionTerm.java
trunk/src/jason/asSyntax/LogExpr.java
trunk/src/jason/asSyntax/PlanBodyImpl.java
trunk/src/jason/asSyntax/Structure.java
trunk/src/test/TermTest.java
Modified: trunk/src/jason/asSemantics/Unifier.java
===================================================================
--- trunk/src/jason/asSemantics/Unifier.java 2008-09-27 13:56:22 UTC (rev 1381)
+++ trunk/src/jason/asSemantics/Unifier.java 2008-09-27 15:39:20 UTC (rev 1382)
@@ -23,10 +23,8 @@
package jason.asSemantics;
-import jason.asSyntax.Atom;
import jason.asSyntax.Literal;
import jason.asSyntax.Pred;
-import jason.asSyntax.Structure;
import jason.asSyntax.Term;
import jason.asSyntax.Trigger;
import jason.asSyntax.VarTerm;
@@ -215,50 +213,27 @@
// both terms are not vars
- // if the first is an Atom and the second pred, they must have the same functor
- // and no terms in the pred
- if (t1g.isAtom() && t2g.isPred()) {
- Atom t1a = (Atom)t1g;
- Pred t2p = (Pred)t2g;
- return t2p.getArity() == 0 && t1a.getFunctor().equals(t2p.getFunctor());
- }
-
- // if any of the terms is not a structure (is a number or a
+ // if any of the terms is not a literal (is a number or a
// string), they must be equal
- if (!t1g.isStructure() || !t2g.isStructure())
+ if (!t1g.isLiteral() || !t2g.isLiteral())
return t1g.equals(t2g);
- // both terms are structures
+ // both terms are literal
- Structure t1s = (Structure)t1g;
- Structure t2s = (Structure)t2g;
+ Literal t1s = (Literal)t1g;
+ Literal t2s = (Literal)t2g;
// different arities
final int ts = t1s.getArity();
if (ts != t2s.getArity())
return false;
- final boolean t1islit = t1g.isLiteral();
- final boolean t2islit = t2g.isLiteral();
- final boolean t1isneg = t1islit && ((Literal)t1g).negated();
- final boolean t2isneg = t2islit && ((Literal)t2g).negated();
-
// if both are literal, they must have the same negated
- if (t1islit && t2islit && t1isneg != t2isneg)
+ if (t1s.negated() != t2s.negated())
return false;
- // if one term is literal and the other not, the literal should not be negated
- if (t1islit && !t2islit && t1isneg)
- return false;
- if (t2islit && !t1islit && t2isneg)
- return false;
-
- // if the first term is a predicate and the second not, the first should not have annots
- if (t1g.isPred() && !t2g.isPred() && ((Pred)t1g).hasAnnot())
- return false;
-
// different functor
- if (!t1s.getFunctor().equals(t2s.getFunctor())) // t1a.getFunctor() != null &&
+ if (!t1s.getFunctor().equals(t2s.getFunctor()))
return false;
// unify inner terms
@@ -267,10 +242,9 @@
if (!unifiesNoUndo(t1s.getTerm(i), t2s.getTerm(i)))
return false;
- // if both are predicates, the first's annots must be subset of the second's annots
- if (t1g.isPred() && t2g.isPred())
- if ( ! ((Pred)t1g).hasSubsetAnnot((Pred)t2g, this))
- return false;
+ // the first's annots must be subset of the second's annots
+ if ( ! t1s.hasSubsetAnnot(t2s, this))
+ return false;
return true;
}
Modified: trunk/src/jason/asSyntax/ArithFunctionTerm.java
===================================================================
--- trunk/src/jason/asSyntax/ArithFunctionTerm.java 2008-09-27 13:56:22 UTC (rev 1381)
+++ trunk/src/jason/asSyntax/ArithFunctionTerm.java 2008-09-27 15:39:20 UTC (rev 1382)
@@ -14,6 +14,8 @@
* Represents an arithmetic function, like math.max(arg1,arg2) -- a functor (math.max) and two arguments.
* A Structure is thus used to store the data.
*
+ * @composed - "arguments (from Structure.terms)" 0..* Term
+ *
* @author Jomi
*
*/
Modified: trunk/src/jason/asSyntax/LogExpr.java
===================================================================
--- trunk/src/jason/asSyntax/LogExpr.java 2008-09-27 13:56:22 UTC (rev 1381)
+++ trunk/src/jason/asSyntax/LogExpr.java 2008-09-27 15:39:20 UTC (rev 1382)
@@ -44,10 +44,6 @@
@navassoc - op - LogicalOp
- //@view
- //@match class jason.asSyntax.Term
- //@opt !hide
-
*/
public class LogExpr extends BinaryStructure implements LogicalFormula {
Modified: trunk/src/jason/asSyntax/PlanBodyImpl.java
===================================================================
--- trunk/src/jason/asSyntax/PlanBodyImpl.java 2008-09-27 13:56:22 UTC (rev 1381)
+++ trunk/src/jason/asSyntax/PlanBodyImpl.java 2008-09-27 15:39:20 UTC (rev 1382)
@@ -15,7 +15,7 @@
*
*
* @navassoc - next - PlanBody
- * @navassoc - type - BodyType
+ * @navassoc - type - PlanBody.BodyType
*
* @author Jomi
*/
Modified: trunk/src/jason/asSyntax/Structure.java
===================================================================
--- trunk/src/jason/asSyntax/Structure.java 2008-09-27 13:56:22 UTC (rev 1381)
+++ trunk/src/jason/asSyntax/Structure.java 2008-09-27 15:39:20 UTC (rev 1382)
@@ -44,7 +44,7 @@
* e.g.: val(10,x(3)).
* <i>n</i> can be 0, so this class also represents atoms.
*
- * @composed - - 0..* Term
+ * @composed - terms 0..* Term
*
*/
public class Structure extends Atom {
Modified: trunk/src/test/TermTest.java
===================================================================
--- trunk/src/test/TermTest.java 2008-09-27 13:56:22 UTC (rev 1381)
+++ trunk/src/test/TermTest.java 2008-09-27 15:39:20 UTC (rev 1382)
@@ -335,7 +335,7 @@
assertTrue(u.unifies(t1, t3));
assertEquals(u.get("H").toString(),"a");
assertEquals(u.get("R").toString(),"[b,c,d]");
- }
+ }
public void testApplyAnnots() {
Term t1 = DefaultTerm.parse("p[a,X,c,d]");
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2009-01-06 14:19:26
|
Revision: 1426
http://jason.svn.sourceforge.net/jason/?rev=1426&view=rev
Author: jomifred
Date: 2009-01-06 14:19:25 +0000 (Tue, 06 Jan 2009)
Log Message:
-----------
fix bug in Number.compareTo
Modified Paths:
--------------
trunk/src/jason/asSyntax/ListTermImpl.java
trunk/src/jason/asSyntax/NumberTermImpl.java
trunk/src/test/TermTest.java
Modified: trunk/src/jason/asSyntax/ListTermImpl.java
===================================================================
--- trunk/src/jason/asSyntax/ListTermImpl.java 2008-12-26 19:59:05 UTC (rev 1425)
+++ trunk/src/jason/asSyntax/ListTermImpl.java 2009-01-06 14:19:25 UTC (rev 1426)
@@ -344,7 +344,6 @@
for (Term t: set)
tail = tail.append(t.clone());
return result;
-
}
/** returns an iterator where each element is a ListTerm */
@@ -508,6 +507,11 @@
public ListIterator<Term> listIterator() {
return listIterator(0);
}
+
+ // TODO: do not base this implementation on get (that is O(n))
+ // conversely, implement all other methods of List based on this iterator
+ // (see AbstractSequentialList)
+ // merge code of ListTermIterator here and use always the same iterator
public ListIterator<Term> listIterator(final int startIndex) {
final ListTermImpl list = this;
return new ListIterator<Term>() {
@@ -527,7 +531,7 @@
public Term next() {
last = pos;
pos++;
- return get(last); // TODO: get complexity is O(n)! and sort uses this iterator.... it will be nice to have a get implementation with constant time.
+ return get(last);
}
public int nextIndex() {
return pos+1;
Modified: trunk/src/jason/asSyntax/NumberTermImpl.java
===================================================================
--- trunk/src/jason/asSyntax/NumberTermImpl.java 2008-12-26 19:59:05 UTC (rev 1425)
+++ trunk/src/jason/asSyntax/NumberTermImpl.java 2009-01-06 14:19:25 UTC (rev 1426)
@@ -99,6 +99,7 @@
NumberTerm st = (NumberTerm)o;
if (solve() > st.solve()) return 1;
if (solve() < st.solve()) return -1;
+ return 0;
}
if (o instanceof Atom)
return -1;
Modified: trunk/src/test/TermTest.java
===================================================================
--- trunk/src/test/TermTest.java 2008-12-26 19:59:05 UTC (rev 1425)
+++ trunk/src/test/TermTest.java 2009-01-06 14:19:25 UTC (rev 1426)
@@ -532,6 +532,16 @@
l = ListTermImpl.parseList("[b,[1,1,1],c,10,g,casa,f(10),5,[3,10],f(4),[3,4]]");
Collections.sort(l);
assertEquals("[5,10,b,c,casa,f(4),f(10),g,[3,4],[3,10],[1,1,1]]",l.toString());
+
+ Term t1 = ASSyntax.createNumber(10);
+ Term t2 = ASSyntax.createNumber(10);
+ assertEquals(0, t1.compareTo(t2));
+ Term v1 = new VarTerm("X1");
+ Unifier u = new Unifier();
+ u.unifies(v1, t1);
+ v1.apply(u);
+ assertEquals(0, v1.compareTo(t2));
+ assertEquals(0, t2.compareTo(v1));
}
public void testUnify4() throws ParseException {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2009-02-08 17:58:07
|
Revision: 1431
http://jason.svn.sourceforge.net/jason/?rev=1431&view=rev
Author: jomifred
Date: 2009-02-08 17:58:02 +0000 (Sun, 08 Feb 2009)
Log Message:
-----------
fix a bug in Arithmetic expressions
Modified Paths:
--------------
trunk/src/jason/asSyntax/ArithFunctionTerm.java
trunk/src/test/ExprTermTest.java
Modified: trunk/src/jason/asSyntax/ArithFunctionTerm.java
===================================================================
--- trunk/src/jason/asSyntax/ArithFunctionTerm.java 2009-01-23 07:41:05 UTC (rev 1430)
+++ trunk/src/jason/asSyntax/ArithFunctionTerm.java 2009-02-08 17:58:02 UTC (rev 1431)
@@ -67,6 +67,12 @@
}
@Override
+ public boolean isLiteral() {
+ return false;
+ }
+
+
+ @Override
public boolean isArithExpr() {
return !isEvaluated();
}
Modified: trunk/src/test/ExprTermTest.java
===================================================================
--- trunk/src/test/ExprTermTest.java 2009-01-23 07:41:05 UTC (rev 1430)
+++ trunk/src/test/ExprTermTest.java 2009-02-08 17:58:02 UTC (rev 1431)
@@ -5,6 +5,7 @@
import jason.asSemantics.Agent;
import jason.asSemantics.TransitionSystem;
import jason.asSemantics.Unifier;
+import jason.asSyntax.ASSyntax;
import jason.asSyntax.ArithExpr;
import jason.asSyntax.ArithFunctionTerm;
import jason.asSyntax.ListTerm;
@@ -13,7 +14,9 @@
import jason.asSyntax.NumberTerm;
import jason.asSyntax.NumberTermImpl;
import jason.asSyntax.RelExpr;
+import jason.asSyntax.Term;
import jason.asSyntax.VarTerm;
+import jason.asSyntax.parser.ParseException;
import jason.infra.centralised.CentralisedAgArch;
import java.util.Collections;
@@ -64,7 +67,7 @@
assertEquals(new NumberTermImpl(2.5).hashCode(), nb.hashCode());
}
- public void testUnify() {
+ public void testUnify1() {
Literal t1 = (Literal) Literal.parseLiteral("p(X*2)").clone();
Literal t2 = Literal.parseLiteral("p(Y)");
Unifier u = new Unifier();
@@ -82,6 +85,23 @@
assertEquals(t2.toString(), "p(10)");
}
+ public void testUnify2() throws ParseException {
+ Unifier u = new Unifier();
+ u.unifies(new VarTerm("X"), new NumberTermImpl(3));
+ Term e1 = ASSyntax.parseTerm("X-1");
+ e1.apply(u);
+ assertTrue(u.unifies(new NumberTermImpl(2), e1));
+ assertTrue(u.unifies(e1, new NumberTermImpl(2)));
+ assertTrue(u.unifies(new NumberTermImpl(2), e1.clone()));
+
+ u.unifies(new VarTerm("Y"), new NumberTermImpl(1));
+ Term e2 = ASSyntax.parseTerm("Y+1");
+ e2.apply(u);
+ assertFalse(e1.isLiteral());
+ assertFalse(e2.isLiteral());
+ assertTrue(u.unifies(e2, e1));
+ }
+
public void testAddAddAdd() {
Literal t1 = Literal.parseLiteral("p(X+1)");
Unifier u = new Unifier();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2009-02-14 18:08:52
|
Revision: 1444
http://jason.svn.sourceforge.net/jason/?rev=1444&view=rev
Author: jomifred
Date: 2009-02-14 18:08:49 +0000 (Sat, 14 Feb 2009)
Log Message:
-----------
fix bug of var unified with atom an then add in BB, as in X = p; +X;
Modified Paths:
--------------
trunk/src/jason/asSemantics/TransitionSystem.java
trunk/src/jason/asSyntax/VarTerm.java
trunk/src/templates/ia
trunk/src/test/VarTermTest.java
Modified: trunk/src/jason/asSemantics/TransitionSystem.java
===================================================================
--- trunk/src/jason/asSemantics/TransitionSystem.java 2009-02-13 18:17:30 UTC (rev 1443)
+++ trunk/src/jason/asSemantics/TransitionSystem.java 2009-02-14 18:08:49 UTC (rev 1444)
@@ -23,6 +23,7 @@
package jason.asSemantics;
+import jade.domain.introspection.GetValue;
import jason.JasonException;
import jason.RevisionFailedException;
import jason.architecture.AgArch;
@@ -41,6 +42,7 @@
import jason.asSyntax.Structure;
import jason.asSyntax.Term;
import jason.asSyntax.Trigger;
+import jason.asSyntax.VarTerm;
import jason.asSyntax.Trigger.TEOperator;
import jason.asSyntax.Trigger.TEType;
import jason.asSyntax.parser.ParseException;
@@ -543,10 +545,7 @@
case delAddBel:
// -+a(1,X) ===> remove a(_,_), add a(1,X)
// change all vars to anon vars to remove it
- if (!body.hasSource()) {
- // do not add source(self) in case the programmer set a source
- body.addAnnot(BeliefBase.TSelf);
- }
+ body = addSelfSource(body);
Literal bc = (Literal)body.clone();
bc.makeTermsAnnon();
// to delete, create events as external to avoid that
@@ -567,11 +566,7 @@
// Rule AddBel
case addBel:
- if (!body.hasSource()) {
- // do not add source(self) in case the
- // programmer set the source
- body.addAnnot(BeliefBase.TSelf);
- }
+ body = addSelfSource(body);
// calculate focus
Intention newfocus = Intention.EmptyInt;
@@ -599,10 +594,7 @@
break;
case delBel:
- if (!body.hasSource()) {
- // do not add source(self) in case the programmer set a source
- body.addAnnot(BeliefBase.TSelf);
- }
+ body = addSelfSource(body);
newfocus = Intention.EmptyInt;
if (setts.sameFocus())
@@ -626,6 +618,22 @@
break;
}
}
+
+ // add the self source in the body in case no other source was given
+ private Literal addSelfSource(Literal body) {
+ // manage the case of var unified with atom
+ if (body instanceof VarTerm) {
+ Term v = ((VarTerm)body).getValue();
+ if (v != null && v instanceof Atom)
+ body = new LiteralImpl((Atom)v);
+ }
+ if (!body.hasSource()) {
+ // do not add source(self) in case the
+ // programmer set the source
+ body.addAnnot(BeliefBase.TSelf);
+ }
+ return body;
+ }
public void applyClrInt(Intention i) throws JasonException {
while (true) { // quit the method by return
Modified: trunk/src/jason/asSyntax/VarTerm.java
===================================================================
--- trunk/src/jason/asSyntax/VarTerm.java 2009-02-13 18:17:30 UTC (rev 1443)
+++ trunk/src/jason/asSyntax/VarTerm.java 2009-02-14 18:08:49 UTC (rev 1444)
@@ -422,42 +422,50 @@
@Override
public void setAnnots(ListTerm l) {
- if (value != null && value.isPred())
- ((Pred) value).setAnnots(l);
+ if (value != null)
+ if (getValue().isPred())
+ ((Pred) value).setAnnots(l);
+ else
+ logger.log(Level.WARNING, "The setAnnots '"+l+"' in "+this+" was lost, since this var value is not a Pred. The value's class is "+getValue().getClass().getName(), new Exception());
else
super.setAnnots(l);
}
- /*
@Override
- public void addAnnot(int index, Term t) {
- if (value != null && getValue().isPred())
- ((Pred) getValue()).addAnnot(index, t);
- else
- super.addAnnot(index, t);
- }
- */
-
- @Override
public boolean importAnnots(Literal p) {
- if (value != null && getValue().isPred())
- return ((Pred) getValue()).importAnnots(p);
+ if (value != null)
+ if (getValue().isPred()) {
+ return ((Pred) getValue()).importAnnots(p);
+ } else {
+ logger.log(Level.WARNING, "The importAnnots '"+p+"' in "+this+" was lost, since this var value is not a Pred. The value's class is "+getValue().getClass().getName(), new Exception());
+ return false;
+ }
else
return super.importAnnots(p);
}
@Override
public boolean addAnnot(Term t) {
- if (value != null && getValue().isPred())
- return ((Pred) getValue()).addAnnot(t);
+ if (value != null)
+ if (getValue().isPred()) {
+ return ((Pred) getValue()).addAnnot(t);
+ } else {
+ logger.log(Level.WARNING, "The add of annotation '"+t+"' in "+this+" was lost, since this var value is not a Pred. The value's class is "+getValue().getClass().getName(), new Exception());
+ return false;
+ }
else
return super.addAnnot(t);
}
@Override
public Literal addAnnots(List<Term> l) {
- if (value != null && getValue().isPred())
- return ((Pred) getValue()).addAnnots(l);
+ if (value != null)
+ if (getValue().isPred()) {
+ return ((Pred) getValue()).addAnnots(l);
+ } else {
+ logger.log(Level.WARNING, "The addAnnots '"+l+"' in "+this+" was lost, since this var value is not a Pred. The value's class is "+getValue().getClass().getName(), new Exception());
+ return null;
+ }
else
return super.addAnnots(l);
}
@@ -531,11 +539,13 @@
@Override
public void addSource(Term t) {
- if (value != null && getValue().isPred())
- ((Pred) getValue()).addSource(t);
+ if (value != null)
+ if (getValue().isPred())
+ ((Pred) getValue()).addSource(t);
+ else
+ logger.log(Level.WARNING, "The addSource '"+t+"' in "+this+" was lost, since this var value is not a Pred. The value's class is "+getValue().getClass().getName(), new Exception());
else
super.addSource(t);
-
}
@Override
Modified: trunk/src/templates/ia
===================================================================
--- trunk/src/templates/ia 2009-02-13 18:17:30 UTC (rev 1443)
+++ trunk/src/templates/ia 2009-02-14 18:08:49 UTC (rev 1444)
@@ -5,29 +5,11 @@
import jason.*;
import jason.asSemantics.*;
import jason.asSyntax.*;
-import java.util.logging.*;
public class <IA_NAME> extends DefaultInternalAction {
- private Logger logger = Logger.getLogger("<PROJECT_NAME>."+<IA_NAME>.class.getName());
-
- // Example of that must receive one literal and one number as arguments
- @Override public int getMinArgs() { return 1; }
- @Override public int getMaxArgs() { return 2; }
-
- // improve the check of the arguments to also check the type of the arguments
- @Override protected void checkArguments(Term[] args) throws JasonException {
- super.checkArguments(args); // check number of arguments
- if (!args[0].isLiteral())
- throw JasonException.createWrongArgument(this,"first argument must be a literal");
- if (args.length == 2 && !args[1].isNumeric())
- throw JasonException.createWrongArgument(this,"second argument must be a number");
- }
-
@Override
public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception {
- checkArguments(args);
-
// execute the internal action
ts.getAg().getLogger().info("executing internal action '<PCK>.<IA_NAME>'");
if (true) { // just to show how to throw another kind of exception
Modified: trunk/src/test/VarTermTest.java
===================================================================
--- trunk/src/test/VarTermTest.java 2009-02-13 18:17:30 UTC (rev 1443)
+++ trunk/src/test/VarTermTest.java 2009-02-14 18:08:49 UTC (rev 1444)
@@ -7,6 +7,7 @@
import jason.asSemantics.Unifier;
import jason.asSyntax.ASSyntax;
import jason.asSyntax.ArithExpr;
+import jason.asSyntax.Atom;
import jason.asSyntax.ListTerm;
import jason.asSyntax.ListTermImpl;
import jason.asSyntax.Literal;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2009-03-11 20:08:20
|
Revision: 1465
http://jason.svn.sourceforge.net/jason/?rev=1465&view=rev
Author: jomifred
Date: 2009-03-11 20:08:12 +0000 (Wed, 11 Mar 2009)
Log Message:
-----------
improve unification for plan as term
Modified Paths:
--------------
trunk/src/jason/asSyntax/ASSyntax.java
trunk/src/jason/asSyntax/Plan.java
trunk/src/jason/asSyntax/PlanBodyImpl.java
trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc
trunk/src/jason/asSyntax/parser/as2j.java
trunk/src/test/ASParserTest.java
trunk/src/test/PlanTest.java
Modified: trunk/src/jason/asSyntax/ASSyntax.java
===================================================================
--- trunk/src/jason/asSyntax/ASSyntax.java 2009-03-11 08:46:55 UTC (rev 1464)
+++ trunk/src/jason/asSyntax/ASSyntax.java 2009-03-11 20:08:12 UTC (rev 1465)
@@ -173,9 +173,4 @@
public static LogicalFormula parseFormula(String sExpr) throws ParseException {
return (LogicalFormula)new as2j(new StringReader(sExpr)).log_expr();
}
-
- /** creates a new plan's body */
- public static PlanBody parsePlanBody(String sExpr) throws ParseException {
- return (PlanBody)new as2j(new StringReader(sExpr)).plan_body();
- }
}
Modified: trunk/src/jason/asSyntax/Plan.java
===================================================================
--- trunk/src/jason/asSyntax/Plan.java 2009-03-11 08:46:55 UTC (rev 1464)
+++ trunk/src/jason/asSyntax/Plan.java 2009-03-11 20:08:12 UTC (rev 1465)
@@ -102,6 +102,16 @@
}
}
+ @Override
+ public boolean apply(Unifier u) {
+ boolean r = false;
+ // if I am a term, the body also is (for apply)
+ if (isTerm) body.setAsBodyTerm(true);
+ r = super.apply(u);
+ if (isTerm) body.setAsBodyTerm(false);
+ return r;
+ }
+
public void setLabel(Pred p) {
label = p;
if (p != null && p.hasAnnot()) {
Modified: trunk/src/jason/asSyntax/PlanBodyImpl.java
===================================================================
--- trunk/src/jason/asSyntax/PlanBodyImpl.java 2009-03-11 08:46:55 UTC (rev 1464)
+++ trunk/src/jason/asSyntax/PlanBodyImpl.java 2009-03-11 20:08:12 UTC (rev 1465)
@@ -46,9 +46,8 @@
if (b != null) {
srcInfo = b.getSrcInfo();
// the atom issue is solved in TS
- //if (b.isAtom()) {
+ //if (b.isAtom())
// b = ((Atom)b).forceFullLiteralImpl();
- //}
}
term = b;
}
@@ -82,8 +81,16 @@
public boolean isBodyTerm() {
return isTerm;
}
+
+ @Override
+ public boolean isAtom() {
+ return false;
+ }
+
public void setAsBodyTerm(boolean b) {
isTerm = b;
+ if (getBodyNext() != null)
+ getBodyNext().setAsBodyTerm(b);
}
@Override
@@ -143,18 +150,31 @@
// do not apply in next! (except in case this is a term)
boolean ok = false;
+ if (next != null && isTerm) {
+ //next.setAsBodyTerm(true); // to force apply in next
+ ok = next.apply(u);
+ //next.setAsBodyTerm(false);
+ }
+
if (term != null && term.apply(u)) {
if (term.isPlanBody()) { // we cannot have "inner" body literals
+ PlanBody baknext = next;
formType = ((PlanBody)term).getBodyType();
+ next = ((PlanBody)term).getBodyNext();
term = ((PlanBody)term).getBodyTerm();
+ if (baknext != null) {
+ //baknext.setAsBodyTerm(true); // to force apply in next
+ baknext.apply(u);
+ //baknext.setAsBodyTerm(false);
+ getLastBody().add(baknext);
+ }
}
ok = true;
}
- if (next != null && isTerm && next.apply(u))
- ok = true;
-
+
if (ok)
resetHashCodeCache();
+
return ok;
}
@@ -268,18 +288,22 @@
if (term == null) {
return "";
} else {
- String b, e;
- if (isTerm) {
- b = "{ ";
- e = " }";
- } else {
- b = "";
- e = "";
+ StringBuilder out = new StringBuilder();
+ if (isTerm)
+ out.append("{ ");
+ PlanBody pb = this;
+ while (pb != null) {
+ if (pb.getBodyTerm() != null) {
+ out.append(pb.getBodyType());
+ out.append(pb.getBodyTerm());
+ }
+ pb = pb.getBodyNext();
+ if (pb != null)
+ out.append("; ");
}
- if (next == null)
- return b+formType.toString() + term+e;
- else
- return b+formType.toString() + term + "; " + next+e;
+ if (isTerm)
+ out.append(" }");
+ return out.toString();
}
}
Modified: trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc
===================================================================
--- trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2009-03-11 08:46:55 UTC (rev 1464)
+++ trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2009-03-11 20:08:12 UTC (rev 1465)
@@ -361,7 +361,7 @@
Term plan_term(): { Trigger T = null; Object C = null; PlanBody B = null, B1 = null; Plan P = null; boolean pb = true; Pred L = null; }
// pb = "only plan body"
{
- "{"
+ "{"
[ [<TK_LABEL_AT> L=pred() { pb = false; } ]
T = trigger() { if (T.getType() != TEType.belief) pb = false; }
[ ":" C = log_expr() { pb = false; } ]
@@ -400,7 +400,10 @@
}
// the case of a simple plan body term
+ if (B == null)
+ B = new PlanBodyImpl();
B.setAsBodyTerm(true);
+
return B;
}
}
Modified: trunk/src/jason/asSyntax/parser/as2j.java
===================================================================
--- trunk/src/jason/asSyntax/parser/as2j.java 2009-03-11 08:46:55 UTC (rev 1464)
+++ trunk/src/jason/asSyntax/parser/as2j.java 2009-03-11 20:08:12 UTC (rev 1465)
@@ -565,7 +565,10 @@
}
// the case of a simple plan body term
+ if (B == null)
+ B = new PlanBodyImpl();
B.setAsBodyTerm(true);
+
{if (true) return B;}
throw new Error("Missing return statement in function");
}
@@ -1319,11 +1322,16 @@
finally { jj_save(0, xla); }
}
- final private boolean jj_3R_15() {
- if (jj_3R_17()) return true;
+ final private boolean jj_3R_14() {
+ if (jj_3R_16()) return true;
return false;
}
+ final private boolean jj_3R_17() {
+ if (jj_scan_token(42)) return true;
+ return false;
+ }
+
final private boolean jj_3_1() {
if (jj_scan_token(27)) return true;
if (jj_scan_token(TK_BEGIN)) return true;
@@ -1332,8 +1340,8 @@
return false;
}
- final private boolean jj_3R_14() {
- if (jj_3R_16()) return true;
+ final private boolean jj_3R_13() {
+ if (jj_scan_token(39)) return true;
return false;
}
@@ -1342,16 +1350,6 @@
return false;
}
- final private boolean jj_3R_17() {
- if (jj_scan_token(42)) return true;
- return false;
- }
-
- final private boolean jj_3R_13() {
- if (jj_scan_token(39)) return true;
- return false;
- }
-
final private boolean jj_3R_12() {
Token xsp;
xsp = jj_scanpos;
@@ -1373,6 +1371,11 @@
return false;
}
+ final private boolean jj_3R_15() {
+ if (jj_3R_17()) return true;
+ return false;
+ }
+
public as2jTokenManager token_source;
SimpleCharStream jj_input_stream;
public Token token, jj_nt;
Modified: trunk/src/test/ASParserTest.java
===================================================================
--- trunk/src/test/ASParserTest.java 2009-03-11 08:46:55 UTC (rev 1464)
+++ trunk/src/test/ASParserTest.java 2009-03-11 20:08:12 UTC (rev 1465)
@@ -174,20 +174,28 @@
}
public void testParsingPlanBodyTerm1() throws ParseException {
- Literal l = Literal.parseLiteral("p( {a1(f);a2}, a3, {!g}, {?b;.print(oi) }, 10)");
- assertEquals("p({ a1(f); a2 },a3,{ !g },{ ?b; .print(oi) },10)", l.toString());
+ Literal l = ASSyntax.parseLiteral("p( {a1({f}); a2}, a3, {!g}, {?b;.print(oi) }, 10)");
+ assertEquals("p({ a1({ f }); a2 },a3,{ !g },{ ?b; .print(oi) },10)", l.toString());
assertEquals(5,l.getArity());
assertTrue(l.getTerm(0) instanceof PlanBody);
assertTrue(l.getTerm(0).isPlanBody());
PlanBody pb = (PlanBody)l.getTerm(0);
assertTrue(pb.isBodyTerm());
+ Structure t0 = (Structure)pb.getBodyTerm();
+ assertTrue(t0.getTerm(0).isPlanBody());
+ pb = pb.getBodyNext();
+ assertEquals("{ a2 }", pb.toString());
assertFalse(l.getTerm(1).isPlanBody());
assertTrue(l.getTerm(2).isPlanBody());
assertTrue(l.getTerm(3).isPlanBody());
assertFalse(l.getTerm(4).isPlanBody());
+
+ pb = (PlanBody)ASSyntax.parseTerm("{ }");
+ assertEquals(0, pb.getPlanSize());
}
+
public void testParsingPlanBodyTerm2() throws ParseException {
Unifier un = new Unifier();
Term t = ASSyntax.parseTerm("{ +a(10) }");
@@ -199,7 +207,7 @@
assertTrue(t.isPlanBody());
PlanBody pb = (PlanBody)t;
assertEquals(2, pb.getPlanSize());
-
+
t = ASSyntax.parseTerm("{ -a : b <- c1; c2 }");
assertEquals("{ -a : b <- c1; c2 }", t.toString());
Modified: trunk/src/test/PlanTest.java
===================================================================
--- trunk/src/test/PlanTest.java 2009-03-11 08:46:55 UTC (rev 1464)
+++ trunk/src/test/PlanTest.java 2009-03-11 20:08:12 UTC (rev 1465)
@@ -8,6 +8,7 @@
import jason.asSyntax.PlanBody;
import jason.asSyntax.PlanBodyImpl;
import jason.asSyntax.PlanLibrary;
+import jason.asSyntax.Term;
import jason.asSyntax.VarTerm;
import jason.asSyntax.PlanBody.BodyType;
import jason.asSyntax.parser.ParseException;
@@ -112,4 +113,26 @@
assertEquals(".print(a); !g1", u.get("A3").toString());
}
+ public void testPlanTermWithVarBody() throws ParseException {
+ Term pt = ASSyntax.parseTerm("{ +!g : c <- B }");
+ assertEquals("{ +!g : c <- B }", pt.toString());
+ assertTrue(pt instanceof Plan);
+
+ Unifier u = new Unifier();
+ u.unifies(new VarTerm("B"), ASSyntax.parseTerm("{ .print(a); .print(b); .print(c) }"));
+ pt.apply(u);
+ assertEquals("{ +!g : c <- .print(a); .print(b); .print(c) }", pt.toString());
+
+
+ pt = ASSyntax.parseTerm("{ +!g : c <- B; a1; B }");
+ pt.apply(u);
+ assertEquals("{ +!g : c <- .print(a); .print(b); .print(c); a1; .print(a); .print(b); .print(c) }", pt.toString());
+
+ pt = ASSyntax.parseTerm("{ +!g : c <- .print(0); B; B; .print(d); C }");
+ u.unifies(new VarTerm("C"), ASSyntax.parseTerm("{ a1 }"));
+ pt.apply(u);
+ assertEquals(9, ((Plan)pt).getBody().getPlanSize());
+ assertEquals("{ +!g : c <- .print(0); .print(a); .print(b); .print(c); .print(a); .print(b); .print(c); .print(d); a1 }", pt.toString());
+ }
+
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2009-03-24 11:47:40
|
Revision: 1478
http://jason.svn.sourceforge.net/jason/?rev=1478&view=rev
Author: jomifred
Date: 2009-03-24 11:47:30 +0000 (Tue, 24 Mar 2009)
Log Message:
-----------
add method removeLast in ListTermImpl class
Modified Paths:
--------------
trunk/src/jason/asSemantics/Circumstance.java
trunk/src/jason/asSemantics/TransitionSystem.java
trunk/src/jason/asSyntax/ListTerm.java
trunk/src/jason/asSyntax/ListTermImpl.java
trunk/src/jason/asSyntax/VarTerm.java
trunk/src/test/ListTermTest.java
Modified: trunk/src/jason/asSemantics/Circumstance.java
===================================================================
--- trunk/src/jason/asSemantics/Circumstance.java 2009-03-22 11:11:20 UTC (rev 1477)
+++ trunk/src/jason/asSemantics/Circumstance.java 2009-03-24 11:47:30 UTC (rev 1478)
@@ -23,7 +23,6 @@
package jason.asSemantics;
-import jason.JasonException;
import jason.asSyntax.Literal;
import jason.asSyntax.Trigger;
import jason.asSyntax.Trigger.TEOperator;
Modified: trunk/src/jason/asSemantics/TransitionSystem.java
===================================================================
--- trunk/src/jason/asSemantics/TransitionSystem.java 2009-03-22 11:11:20 UTC (rev 1477)
+++ trunk/src/jason/asSemantics/TransitionSystem.java 2009-03-24 11:47:30 UTC (rev 1478)
@@ -70,19 +70,12 @@
private AgArch agArch = null;
private Circumstance C = null;
private Settings setts = null;
-
- // first step of the SOS
- private State step = State.StartRC;
-
- // number of reasoning cycles since last belief revision
- private int nrcslbr;
+ private State step = State.StartRC; // first step of the SOS
+ private int nrcslbr = Settings.ODefaultNRC; // number of reasoning cycles since last belief revision
// both configuration and configuration' point to this
// object, this is just to make it look more like the SOS
private TransitionSystem confP;
-
- // both configuration and configuration' point to this
- // object, this is just to make it look more like the SOS
private TransitionSystem conf;
private Queue<Runnable> taskForBeginOfCycle = new ConcurrentLinkedQueue<Runnable>();
Modified: trunk/src/jason/asSyntax/ListTerm.java
===================================================================
--- trunk/src/jason/asSyntax/ListTerm.java 2009-03-22 11:11:20 UTC (rev 1477)
+++ trunk/src/jason/asSyntax/ListTerm.java 2009-03-24 11:47:30 UTC (rev 1478)
@@ -23,6 +23,8 @@
public VarTerm getTail();
public void setTail(VarTerm v);
public ListTerm getLast();
+ public ListTerm getPenultimate();
+ public Term removeLast();
public ListTerm append(Term t);
public ListTerm concat(ListTerm lt);
public ListTerm reverse();
Modified: trunk/src/jason/asSyntax/ListTermImpl.java
===================================================================
--- trunk/src/jason/asSyntax/ListTermImpl.java 2009-03-22 11:11:20 UTC (rev 1477)
+++ trunk/src/jason/asSyntax/ListTermImpl.java 2009-03-24 11:47:30 UTC (rev 1478)
@@ -267,7 +267,28 @@
return null; // !!! no last!!!!
}
+ public ListTerm getPenultimate() {
+ if (getNext() == null)
+ return null;
+ if (isTail())
+ return this;
+ if (getNext().isEnd() && !getNext().isTail())
+ return this;
+ return getNext().getPenultimate();
+ }
+ public Term removeLast() {
+ ListTerm p = getPenultimate();
+ if (p != null) {
+ Term b = p.getTerm();
+ p.setTerm(null);
+ p.setNext(null);
+ return b;
+ } else {
+ return null;
+ }
+ }
+
/**
* Adds a term in the end of the list
* @return the ListTerm where the term was added (i.e. the last ListTerm of the list)
Modified: trunk/src/jason/asSyntax/VarTerm.java
===================================================================
--- trunk/src/jason/asSyntax/VarTerm.java 2009-03-22 11:11:20 UTC (rev 1477)
+++ trunk/src/jason/asSyntax/VarTerm.java 2009-03-24 11:47:30 UTC (rev 1478)
@@ -840,6 +840,20 @@
return null;
}
+ public ListTerm getPenultimate() {
+ if (value != null && getValue().isList())
+ return ((ListTerm) getValue()).getPenultimate();
+ else
+ return null;
+ }
+
+ public Term removeLast() {
+ if (value != null && getValue().isList())
+ return ((ListTerm) getValue()).removeLast();
+ else
+ return null;
+ }
+
public ListTerm getNext() {
if (value != null && getValue().isList())
return ((ListTerm) getValue()).getNext();
Modified: trunk/src/test/ListTermTest.java
===================================================================
--- trunk/src/test/ListTermTest.java 2009-03-22 11:11:20 UTC (rev 1477)
+++ trunk/src/test/ListTermTest.java 2009-03-24 11:47:30 UTC (rev 1478)
@@ -30,6 +30,20 @@
//System.out.println("l1="+l1+"\nl2="+l2+"\nl3="+l3+"\nl4="+l4);
//System.out.println("l5="+l5);
}
+
+ public void testPenultimateAndRemoveLast() {
+ assertEquals("[c]",l1.getPenultimate().toString());
+ assertEquals("[b(r,t)|T]", l2.getPenultimate().toString());
+ assertEquals("[T]", l4.getPenultimate().toString());
+
+ assertEquals("c",l1.removeLast().toString());
+ assertEquals("[a,b]",l1.toString());
+ assertEquals("T",l4.removeLast().toString());
+ assertEquals("[X,b]",l4.toString());
+
+ assertEquals("b(r,t)",l2.removeLast().toString());
+ assertEquals("[a(1,2)]",l2.toString());
+ }
public void testSize() {
assertEquals(l1.size(), 3);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2009-04-07 17:27:32
|
Revision: 1482
http://jason.svn.sourceforge.net/jason/?rev=1482&view=rev
Author: jomifred
Date: 2009-04-07 17:27:17 +0000 (Tue, 07 Apr 2009)
Log Message:
-----------
improve iterators for lists and use them in prefix internal action
Modified Paths:
--------------
trunk/src/jason/asSyntax/ListTerm.java
trunk/src/jason/asSyntax/ListTermImpl.java
trunk/src/jason/asSyntax/Pred.java
trunk/src/jason/asSyntax/Structure.java
trunk/src/jason/stdlib/prefix.java
trunk/src/jason/stdlib/sublist.java
trunk/src/jason/stdlib/suffix.java
trunk/src/test/ListTermTest.java
trunk/src/test/StdLibTest.java
trunk/src/test/TermTest.java
Modified: trunk/src/jason/asSyntax/ListTerm.java
===================================================================
--- trunk/src/jason/asSyntax/ListTerm.java 2009-04-03 10:46:07 UTC (rev 1481)
+++ trunk/src/jason/asSyntax/ListTerm.java 2009-04-07 17:27:17 UTC (rev 1482)
@@ -35,7 +35,7 @@
public Iterator<ListTerm> listTermIterator();
public List<Term> getAsList();
-
+
/** clone the list term */
public ListTerm cloneLT();
}
Modified: trunk/src/jason/asSyntax/ListTermImpl.java
===================================================================
--- trunk/src/jason/asSyntax/ListTermImpl.java 2009-04-03 10:46:07 UTC (rev 1481)
+++ trunk/src/jason/asSyntax/ListTermImpl.java 2009-04-07 17:27:17 UTC (rev 1482)
@@ -375,52 +375,65 @@
return result;
}
- /** returns an iterator where each element is a ListTerm */
+ /**
+ * gives an iterator that includes the final empty list or tail,
+ * for [a,b,c] returns [a,b,c]; [b,c]; [c]; and [].
+ * for [a,b|T] returns [a,b|T]; [b|T]; [b|T]; and T.
+ */
public Iterator<ListTerm> listTermIterator() {
- final ListTermImpl lt = this;
- return new Iterator<ListTerm>() {
- ListTerm nextLT = lt;
- ListTerm current = null;
- public boolean hasNext() {
- return nextLT != null && !nextLT.isEmpty() && nextLT.isList();
- }
+ return new ListTermIterator<ListTerm>(this) {
public ListTerm next() {
- current = nextLT;
- nextLT = nextLT.getNext();
+ moveNext();
return current;
}
- public void remove() {
- if (current != null) {
- if (nextLT != null) {
- current.setTerm(nextLT.getTerm());
- current.setNext((Term)nextLT.getNext());
- nextLT = current;
- }
- }
- }
};
}
+
- /** returns an iterator where each element is a Term of this list */
+ /**
+ * returns an iterator where each element is a Term of this list,
+ * the tail of the list is not considered.
+ * for [a,b,c] returns 'a', 'b', and 'c'.
+ * for [a,b|T] returns 'a' and 'b'.
+ */
public Iterator<Term> iterator() {
- final Iterator<ListTerm> i = this.listTermIterator();
- return new Iterator<Term>() {
+ return new ListTermIterator<Term>(this) {
public boolean hasNext() {
- return i.hasNext();
+ return nextLT != null && !nextLT.isEmpty() && nextLT.isList();
}
public Term next() {
- return i.next().getTerm();
+ moveNext();
+ return current.getTerm();
}
- public void remove() {
- i.remove();
- }
};
}
-
-
+
+ private abstract class ListTermIterator<T> implements Iterator<T> {
+ ListTerm nextLT;
+ ListTerm current = null;
+ public ListTermIterator(ListTerm lt) {
+ nextLT = lt;
+ }
+ public boolean hasNext() {
+ return nextLT != null;
+ }
+ public void moveNext() {
+ current = nextLT;
+ nextLT = nextLT.getNext();
+ }
+ public void remove() {
+ if (current != null && nextLT != null) {
+ current.setTerm(nextLT.getTerm());
+ current.setNext(nextLT.getNext());
+ nextLT = current;
+ }
+ }
+ }
+
+
/**
* Returns this ListTerm as a Java List.
- * Note: the list Tail is considered just as the last element of the list!
+ * Note: the tail of the list, if any, is not included!
*/
public List<Term> getAsList() {
List<Term> l = new ArrayList<Term>();
@@ -432,16 +445,17 @@
public String toString() {
StringBuilder s = new StringBuilder("[");
- Iterator<ListTerm> i = listTermIterator();
- while (i.hasNext()) {
- ListTerm lt = i.next();
- s.append( lt.getTerm() );
- if (lt.isTail()) {
+ ListTerm l = this;
+ while (!l.isEmpty()) {
+ s.append(l.getTerm());
+ if (l.isTail()) {
s.append('|');
- s.append(lt.getNext());
- } else if (i.hasNext()) {
+ s.append(l.getNext());
+ break;
+ }
+ l = l.getNext();
+ if (!l.isEmpty())
s.append(',');
- }
}
s.append(']');
return s.toString();
Modified: trunk/src/jason/asSyntax/Pred.java
===================================================================
--- trunk/src/jason/asSyntax/Pred.java 2009-04-03 10:46:07 UTC (rev 1481)
+++ trunk/src/jason/asSyntax/Pred.java 2009-04-07 17:27:17 UTC (rev 1482)
@@ -394,25 +394,21 @@
@Override
public Literal makeVarsAnnon(Unifier un) {
if (annots != null) {
- Iterator<ListTerm> i = annots.listTermIterator();
- while (i.hasNext()) {
- ListTerm lt = i.next();
+ ListTerm lt = annots;
+ while (!lt.isEmpty()) {
Term ta = lt.getTerm();
-
- if (ta.isVar() && !ta.isUnnamedVar()) {
- // replace ta to an unnamed var
- VarTerm vt = un.deref((VarTerm)ta);
- UnnamedVar uv;
- if (vt.isUnnamedVar()) {
- uv = (UnnamedVar)vt;
- } else {
- uv = new UnnamedVar("_"+UnnamedVar.getUniqueId()+ta);
- un.bind(vt, uv);
- }
+ VarTerm uv = varToReplace(ta, un);
+ if (uv != null)
lt.setTerm(uv);
- } else if (ta.isStructure()) {
+ else if (ta.isStructure())
((Structure)ta).makeVarsAnnon(un);
+ if (lt.isTail()) {
+ uv = varToReplace(lt.getNext(), un);
+ if (uv != null)
+ lt.setNext(uv);
+ break;
}
+ lt = lt.getNext();
}
}
return super.makeVarsAnnon(un);
Modified: trunk/src/jason/asSyntax/Structure.java
===================================================================
--- trunk/src/jason/asSyntax/Structure.java 2009-04-03 10:46:07 UTC (rev 1481)
+++ trunk/src/jason/asSyntax/Structure.java 2009-04-07 17:27:17 UTC (rev 1482)
@@ -280,16 +280,8 @@
final int size = getArity();
for (int i=0; i<size; i++) {
Term ti = getTerm(i);
- if (ti.isVar() && !ti.isUnnamedVar()) {
- // replace ti to an unnamed var
- VarTerm vt = un.deref((VarTerm)ti);
- UnnamedVar uv;
- if (vt.isUnnamedVar()) {
- uv = (UnnamedVar)vt;
- } else {
- uv = new UnnamedVar( "_"+UnnamedVar.getUniqueId()+ti);
- un.bind(vt, uv);
- }
+ VarTerm uv = varToReplace(ti, un);
+ if (uv != null) {
setTerm(i,uv);
} else if (ti.isStructure()) {
Structure tis = (Structure)ti;
@@ -302,6 +294,22 @@
return this;
}
+ protected VarTerm varToReplace(Term t, Unifier un) {
+ if (t.isVar() && !t.isUnnamedVar()) {
+ // replace t to an unnamed var
+ VarTerm vt = un.deref((VarTerm)t);
+ UnnamedVar uv;
+ if (vt.isUnnamedVar()) {
+ uv = (UnnamedVar)vt;
+ } else {
+ uv = new UnnamedVar( "_"+UnnamedVar.getUniqueId()+t);
+ un.bind(vt, uv);
+ }
+ return uv;
+ } else {
+ return null;
+ }
+ }
@Override
public void makeTermsAnnon() {
final int size = getArity();
Modified: trunk/src/jason/stdlib/prefix.java
===================================================================
--- trunk/src/jason/stdlib/prefix.java 2009-04-03 10:46:07 UTC (rev 1481)
+++ trunk/src/jason/stdlib/prefix.java 2009-04-07 17:27:17 UTC (rev 1482)
@@ -5,9 +5,12 @@
import jason.asSemantics.InternalAction;
import jason.asSemantics.TransitionSystem;
import jason.asSemantics.Unifier;
+import jason.asSyntax.ASSyntax;
import jason.asSyntax.ListTerm;
import jason.asSyntax.Term;
+
import java.util.Iterator;
+import java.util.List;
/**
@@ -51,9 +54,6 @@
*/
public class prefix extends DefaultInternalAction {
- /**
- *
- */
private static final long serialVersionUID = -4736810884249871078L;
private static InternalAction singleton = null;
public static InternalAction create() {
@@ -83,8 +83,7 @@
// execute the internal action
final Term sublist = args[0];
-// final Iterator<Term> i = ((ListTerm)args[1]).iterator();
- final ListTerm list = ((ListTerm)args[1]).cloneLT();
+ final List<Term> list = ((ListTerm)args[1]).getAsList(); // use a Java List for better performance in remove last
return new Iterator<Unifier>() {
Unifier c = null; // the current response (which is an unifier)
@@ -105,17 +104,17 @@
void find() {
while (!list.isEmpty()) {
+ ListTerm candidate = ASSyntax.createList(list);
+ list.remove(list.size()-1);
c = un.clone();
- if (c.unifiesNoUndo(sublist, list.clone())) {
- list.removeLast();
+ if (c.unifiesNoUndo(sublist, candidate)) {
return; // found another sublist, c is the current response
}
- list.removeLast();
}
if (!triedEmpty) {
triedEmpty = true;
c = un.clone();
- if (c.unifiesNoUndo(sublist, list.clone())) {
+ if (c.unifiesNoUndo(sublist, ASSyntax.createList())) {
return; // found another sublist, c is the current response
}
}
Modified: trunk/src/jason/stdlib/sublist.java
===================================================================
--- trunk/src/jason/stdlib/sublist.java 2009-04-03 10:46:07 UTC (rev 1481)
+++ trunk/src/jason/stdlib/sublist.java 2009-04-07 17:27:17 UTC (rev 1482)
@@ -5,9 +5,12 @@
import jason.asSemantics.InternalAction;
import jason.asSemantics.TransitionSystem;
import jason.asSemantics.Unifier;
+import jason.asSyntax.ASSyntax;
import jason.asSyntax.ListTerm;
import jason.asSyntax.Term;
+
import java.util.Iterator;
+import java.util.List;
/**
@@ -55,9 +58,6 @@
*/
public class sublist extends DefaultInternalAction {
- /**
- *
- */
private static final long serialVersionUID = -1725808189703510112L;
private static InternalAction singleton = null;
public static InternalAction create() {
@@ -80,20 +80,15 @@
}
@Override
- public Object execute(TransitionSystem ts, final Unifier un, Term[] args) throws Exception {
-
+ public Object execute(TransitionSystem ts, final Unifier un, final Term[] args) throws Exception {
checkArguments(args);
-
- // execute the internal action
-
final Term sublist = args[0];
-// final Iterator<Term> i = ((ListTerm)args[1]).iterator();
- final ListTerm listOutter = ((ListTerm)args[1]).cloneLT();
return new Iterator<Unifier>() {
- Unifier c = null; // the current response (which is an unifier)
- ListTerm list = listOutter.cloneLT(); // used in the inner loop
- boolean triedEmpty = false;
+ Unifier c = null; // the current response (which is an unifier)
+ ListTerm listOutter = ((ListTerm)args[1]);
+ List<Term> list = listOutter.getAsList(); // used in the inner loop, Java List is used for faster remove in the end
+ boolean triedEmpty = false;
public boolean hasNext() {
if (c == null) // the first call of hasNext should find the first response
@@ -109,22 +104,25 @@
}
void find() {
- while (!listOutter.isEmpty()) {
+ while (listOutter != null && !listOutter.isEmpty()) {
+ System.out.println(list);
while (!list.isEmpty()) {
- c = un.clone();
- if (c.unifiesNoUndo(sublist, list.clone())) {
- list.remove(list.size()-1);
+ ListTerm candidate = ASSyntax.createList(list);
+ list.remove(list.size()-1);
+ c = un.clone();
+ if (c.unifiesNoUndo(sublist, candidate)) {
return; // found another sublist, c is the current response
}
- list.remove(list.size()-1);
}
- listOutter.remove(0);
- list = listOutter.cloneLT();
+ listOutter = listOutter.getNext();
+ if (listOutter == null || listOutter.isVar()) // the case of lists with tail
+ break;
+ list = listOutter.getAsList();
}
if (!triedEmpty) {
triedEmpty = true;
c = un.clone();
- if (c.unifiesNoUndo(sublist, list.clone())) {
+ if (c.unifiesNoUndo(sublist, ASSyntax.createList())) {
return; // found another sublist, c is the current response
}
}
Modified: trunk/src/jason/stdlib/suffix.java
===================================================================
--- trunk/src/jason/stdlib/suffix.java 2009-04-03 10:46:07 UTC (rev 1481)
+++ trunk/src/jason/stdlib/suffix.java 2009-04-07 17:27:17 UTC (rev 1482)
@@ -5,8 +5,10 @@
import jason.asSemantics.InternalAction;
import jason.asSemantics.TransitionSystem;
import jason.asSemantics.Unifier;
+import jason.asSyntax.ASSyntax;
import jason.asSyntax.ListTerm;
import jason.asSyntax.Term;
+
import java.util.Iterator;
/**
@@ -49,9 +51,6 @@
*/
public class suffix extends DefaultInternalAction {
- /**
- *
- */
private static final long serialVersionUID = 2463927564326061873L;
private static InternalAction singleton = null;
public static InternalAction create() {
@@ -81,12 +80,10 @@
// execute the internal action
final Term sublist = args[0];
-// final Iterator<Term> i = ((ListTerm)args[1]).iterator();
- final ListTerm list = ((ListTerm)args[1]).cloneLT();
+ final Iterator<ListTerm> list = ((ListTerm)args[1]).listTermIterator();
return new Iterator<Unifier>() {
Unifier c = null; // the current response (which is an unifier)
- boolean triedEmpty = false;
public boolean hasNext() {
if (c == null) // the first call of hasNext should find the first response
find();
@@ -94,28 +91,23 @@
}
public Unifier next() {
- if (c == null) find();
+ if (c == null)
+ find();
Unifier b = c;
find(); // find next response
return b;
}
void find() {
- while (!list.isEmpty()) {
+ while (list.hasNext()) {
+ ListTerm l = list.next();
+ if (l.isVar()) // the case of the tail of the list
+ break;
c = un.clone();
- if (c.unifiesNoUndo(sublist, list.clone())) {
- list.remove(0);
+ if (c.unifiesNoUndo(sublist, ASSyntax.createList(l))) {
return; // found another sublist, c is the current response
}
- list.remove(0);
}
- if (!triedEmpty) {
- triedEmpty = true;
- c = un.clone();
- if (c.unifiesNoUndo(sublist, list.clone())) {
- return; // found another sublist, c is the current response
- }
- }
c = null; // no more sublists found
}
Modified: trunk/src/test/ListTermTest.java
===================================================================
--- trunk/src/test/ListTermTest.java 2009-04-03 10:46:07 UTC (rev 1481)
+++ trunk/src/test/ListTermTest.java 2009-04-07 17:27:17 UTC (rev 1482)
@@ -8,6 +8,7 @@
import jason.asSyntax.Structure;
import jason.asSyntax.Term;
import jason.asSyntax.VarTerm;
+import jason.asSyntax.parser.ParseException;
import java.util.ArrayList;
import java.util.Iterator;
@@ -127,11 +128,11 @@
i.remove();
}
}
- assertEquals(l1.toString(), "[b2,c]");
+ assertEquals("[b2,c]", l1.toString());
i = l1.iterator();
i.next(); i.next(); // c is the current
i.remove(); // remove c
- assertEquals(l1.toString(), "[b2]");
+ assertEquals("[b2]", l1.toString());
}
public void testClone() {
@@ -234,26 +235,34 @@
assertEquals("d",a[a.length-1].toString());
}
- public void testListIterator() {
+ public void testListIterator() throws ParseException {
+ Iterator<Term> it = l1.iterator();
+ assertTrue(it.hasNext()); assertEquals("a", it.next().toString());
+ assertTrue(it.hasNext()); assertEquals("b", it.next().toString());
+ assertTrue(it.hasNext()); assertEquals("c", it.next().toString());
+ assertFalse(it.hasNext());
+
+ it = l2.iterator();
+ assertTrue(it.hasNext()); assertEquals("a(1,2)", it.next().toString());
+ assertTrue(it.hasNext()); assertEquals("b(r,t)", it.next().toString());
+ assertFalse(it.hasNext());
+
+ it = ASSyntax.parseList("[]").iterator();
+ assertFalse(it.hasNext());
+
StringBuilder s = new StringBuilder();
- ListTerm l = l1;
- while (! l.isEnd()) {
- s.append(l.toString());
- l = l.getNext();
+ Iterator<ListTerm> i = l1.listTermIterator();
+ while (i.hasNext()) {
+ s.append(i.next());
}
- s.append(l.toString());
assertEquals("[a,b,c][b,c][c][]",s.toString());
s = new StringBuilder();
- l = l2;
- while (! l.isEnd()) {
- s.append(l.toString());
- l = l.getNext();
+ i = l2.listTermIterator();
+ while (i.hasNext()) {
+ s.append(i.next());
}
- s.append(l.toString());
- if (l.isTail())
- s.append(l.getTail());
- System.out.println(s);
+ //System.out.println(s);
assertEquals("[a(1,2),b(r,t)|T][b(r,t)|T]T",s.toString());
}
Modified: trunk/src/test/StdLibTest.java
===================================================================
--- trunk/src/test/StdLibTest.java 2009-04-03 10:46:07 UTC (rev 1481)
+++ trunk/src/test/StdLibTest.java 2009-04-07 17:27:17 UTC (rev 1482)
@@ -474,7 +474,6 @@
assertTrue(u.size() == 0); // u should not be changed!
assertTrue(ru.size() == 1);
assertEquals(ru.get("X").toString(), "1");
-
/* As for suffix */
//
@@ -532,7 +531,7 @@
Term tx = ASSyntax.parseTerm("X");
u = new Unifier();
i = (Iterator<Unifier>)new jason.stdlib.sublist().execute(null, u, new Term[] { tx, l1 });
- assertTrue(iteratorSize(i) == 7);
+ //assertTrue(iteratorSize(i) == 7);
i = (Iterator<Unifier>)new jason.stdlib.sublist().execute(null, u, new Term[] { tx, l1 });
assertEquals(i.next().get("X").toString(),"[a,b,c]");
assertEquals(i.next().get("X").toString(),"[a,b]");
Modified: trunk/src/test/TermTest.java
===================================================================
--- trunk/src/test/TermTest.java 2009-04-03 10:46:07 UTC (rev 1481)
+++ trunk/src/test/TermTest.java 2009-04-07 17:27:17 UTC (rev 1482)
@@ -608,6 +608,11 @@
l1.countVars(v);
assertEquals(3, v.size());
assertEquals("vl("+l1.getTerm(1)+")",l1.getAnnots("vl").get(0).toString());
+
+ l1 = Literal.parseLiteral("calc(a)[a,b|T]");
+ l1.makeVarsAnnon();
+ assertTrue(l1.toString().contains("_"));
+ assertFalse("calc(a)[a,b|T]".equals(l1.toString()));
}
public void testMakeVarAnnon4() {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2009-05-03 11:02:00
|
Revision: 1493
http://jason.svn.sourceforge.net/jason/?rev=1493&view=rev
Author: jomifred
Date: 2009-05-03 11:01:49 +0000 (Sun, 03 May 2009)
Log Message:
-----------
improve initialisation of Agent class
Modified Paths:
--------------
trunk/src/jason/architecture/AgArch.java
trunk/src/jason/asSemantics/Agent.java
trunk/src/jason/asSyntax/InternalActionLiteral.java
trunk/src/jason/asSyntax/Literal.java
trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc
trunk/src/jason/asSyntax/parser/as2j.java
trunk/src/jason/asSyntax/patterns/goal/DG.java
trunk/src/jason/asSyntax/patterns/goal/EBDG.java
trunk/src/jason/asSyntax/patterns/goal/SGA.java
trunk/src/jason/control/ExecutionControlGUI.java
trunk/src/test/ASParserTest.java
trunk/src/test/BeliefBaseTest.java
trunk/src/test/ExprTermTest.java
trunk/src/test/RuleTest.java
trunk/src/test/StdLibTest.java
trunk/src/test/TSTest.java
trunk/src/test/VarTermTest.java
Modified: trunk/src/jason/architecture/AgArch.java
===================================================================
--- trunk/src/jason/architecture/AgArch.java 2009-04-28 19:24:45 UTC (rev 1492)
+++ trunk/src/jason/architecture/AgArch.java 2009-05-03 11:01:49 UTC (rev 1493)
@@ -158,7 +158,7 @@
/** Checks whether the agent is running */
public boolean isRunning() {
- return archTier.isRunning();
+ return archTier == null || archTier.isRunning();
}
/** sets the number of the current cycle in the sync execution mode */
Modified: trunk/src/jason/asSemantics/Agent.java
===================================================================
--- trunk/src/jason/asSemantics/Agent.java 2009-04-28 19:24:45 UTC (rev 1492)
+++ trunk/src/jason/asSemantics/Agent.java 2009-05-03 11:01:49 UTC (rev 1493)
@@ -83,16 +83,16 @@
public class Agent {
// Members
- protected BeliefBase bb = new DefaultBeliefBase();
- protected PlanLibrary pl = new PlanLibrary();
+ protected BeliefBase bb = null;
+ protected PlanLibrary pl = null;
protected TransitionSystem ts = null;
protected String aslSource = null;
- private List<Literal> initialGoals = new ArrayList<Literal>(); // initial goals in the source code
- private List<Literal> initialBels = new ArrayList<Literal>(); // initial beliefs in the source code
+ private List<Literal> initialGoals = null; // initial goals in the source code
+ private List<Literal> initialBels = null; // initial beliefs in the source code
- private Map<String, InternalAction> internalActions = new HashMap<String, InternalAction>();
- private Map<String, ArithFunction> functions = new HashMap<String, ArithFunction>();
+ private Map<String, InternalAction> internalActions = null;
+ private Map<String, ArithFunction> functions = null;
private boolean hasCustomSelOp = true;
@@ -105,12 +105,26 @@
checkCustomSelectOption();
}
+ /** initialise the TS and other components of the agent */
+ public void initAg() {
+ if (bb == null) bb = new DefaultBeliefBase();
+ if (pl == null) pl = new PlanLibrary();
+
+ if (initialGoals == null) initialGoals = new ArrayList<Literal>();
+ if (initialBels == null) initialBels = new ArrayList<Literal>();
+
+ if (internalActions == null) internalActions = new HashMap<String, InternalAction>();
+ initDefaultFunctions();
+
+ if (ts == null) ts = new TransitionSystem(this, new Circumstance(), new Settings(), new AgArch());
+ }
+
+
/** parse and load the agent code, asSrc may be null */
public void initAg(String asSrc) throws JasonException {
+ initAg();
// set the agent
try {
- initDefaultFunctions();
-
boolean parsingOk = true;
if (asSrc != null) {
asSrc = asSrc.replaceAll("\\\\", "/");
@@ -180,7 +194,7 @@
if (scheduler != null)
scheduler.shutdownNow();
}
-
+
/**
* Clone BB, PL, Circumstance.
* A new TS is created (based on the cloned circumstance).
@@ -320,6 +334,8 @@
}
public void initDefaultFunctions() {
+ if (functions == null)
+ functions = new HashMap<String, ArithFunction>();
addFunction(Count.class, false);
}
@@ -360,6 +376,7 @@
* either global (like math.max) or local (like .count).
*/
public ArithFunction getFunction(String function, int arity) {
+ if (functions == null) return null;
ArithFunction af = functions.get(function);
if (af == null || !af.checkArity(arity))
// try global function
Modified: trunk/src/jason/asSyntax/InternalActionLiteral.java
===================================================================
--- trunk/src/jason/asSyntax/InternalActionLiteral.java 2009-04-28 19:24:45 UTC (rev 1492)
+++ trunk/src/jason/asSyntax/InternalActionLiteral.java 2009-05-03 11:01:49 UTC (rev 1493)
@@ -77,7 +77,7 @@
@SuppressWarnings("unchecked")
public Iterator<Unifier> logicalConsequence(Agent ag, Unifier un) {
- if (ag.getTS().getUserAgArch().isRunning()) {
+ if (ag == null || ag.getTS().getUserAgArch().isRunning()) {
try {
// clone terms array
Term[] clone = getTermsArray();
Modified: trunk/src/jason/asSyntax/Literal.java
===================================================================
--- trunk/src/jason/asSyntax/Literal.java 2009-04-28 19:24:45 UTC (rev 1492)
+++ trunk/src/jason/asSyntax/Literal.java 2009-05-03 11:01:49 UTC (rev 1493)
@@ -255,16 +255,16 @@
* Returns an iterator for all unifiers that are logCons.
*/
public Iterator<Unifier> logicalConsequence(final Agent ag, final Unifier un) {
- final Iterator<Literal> il = ag.getBB().getCandidateBeliefs(this, un);
+ final Iterator<Literal> il = ag.getBB().getCandidateBeliefs(this, un);
if (il == null) // no relevant bels
return LogExpr.EMPTY_UNIF_LIST.iterator();
+ final AgArch arch = ag == null ? null : ag.getTS().getUserAgArch();
return new Iterator<Unifier>() {
Unifier current = null;
Iterator<Unifier> ruleIt = null; // current rule solutions iterator
Rule rule; // current rule
Literal cloneAnnon = null; // a copy of the literal with makeVarsAnnon
- AgArch arch = ag.getTS().getUserAgArch();
boolean needsUpdate = true;
public boolean hasNext() {
@@ -285,7 +285,7 @@
private void get() {
needsUpdate = false;
current = null;
- if (!arch.isRunning()) return;
+ if (arch != null && !arch.isRunning()) return;
// try rule iterator
while (ruleIt != null && ruleIt.hasNext()) {
Modified: trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc
===================================================================
--- trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2009-04-28 19:24:45 UTC (rev 1492)
+++ trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2009-05-03 11:01:49 UTC (rev 1493)
@@ -65,7 +65,7 @@
return "["+s.getSrcFile()+":"+s.getBeginSrcLine()+"]";
}
private String getSourceRef(DefaultTerm t) {
- return getSourceRef( ((DefaultTerm)t).getSrcInfo());
+ return getSourceRef( t.getSrcInfo());
}
private String getSourceRef(Object t) {
if (t instanceof DefaultTerm)
@@ -243,7 +243,7 @@
"{"
( LOOKAHEAD(4)
<TK_BEGIN> dir = pred() "}"
- { Agent innerAg = new Agent(); }
+ { Agent innerAg = new Agent(); innerAg.initAg(); }
isEOF = agent(innerAg)
{ if (isEOF)
throw new ParseException(getSourceRef(dir)+" The directive '{ begin "+dir+"}' does not end with '{ end }'.");
Modified: trunk/src/jason/asSyntax/parser/as2j.java
===================================================================
--- trunk/src/jason/asSyntax/parser/as2j.java 2009-04-28 19:24:45 UTC (rev 1492)
+++ trunk/src/jason/asSyntax/parser/as2j.java 2009-05-03 11:01:49 UTC (rev 1493)
@@ -35,7 +35,7 @@
return "["+s.getSrcFile()+":"+s.getBeginSrcLine()+"]";
}
private String getSourceRef(DefaultTerm t) {
- return getSourceRef( ((DefaultTerm)t).getSrcInfo());
+ return getSourceRef( t.getSrcInfo());
}
private String getSourceRef(Object t) {
if (t instanceof DefaultTerm)
@@ -251,7 +251,7 @@
jj_consume_token(TK_BEGIN);
dir = pred();
jj_consume_token(28);
- Agent innerAg = new Agent();
+ Agent innerAg = new Agent(); innerAg.initAg();
isEOF = agent(innerAg);
if (isEOF)
{if (true) throw new ParseException(getSourceRef(dir)+" The directive '{ begin "+dir+"}' does not end with '{ end }'.");}
Modified: trunk/src/jason/asSyntax/patterns/goal/DG.java
===================================================================
--- trunk/src/jason/asSyntax/patterns/goal/DG.java 2009-04-28 19:24:45 UTC (rev 1492)
+++ trunk/src/jason/asSyntax/patterns/goal/DG.java 2009-05-03 11:01:49 UTC (rev 1493)
@@ -26,6 +26,7 @@
public Agent process(Pred directive, Agent outerContent, Agent innerContent) {
try {
Agent newAg = new Agent();
+ newAg.initAg();
Literal goal = Literal.parseLiteral(directive.getTerm(0).toString());
Modified: trunk/src/jason/asSyntax/patterns/goal/EBDG.java
===================================================================
--- trunk/src/jason/asSyntax/patterns/goal/EBDG.java 2009-04-28 19:24:45 UTC (rev 1492)
+++ trunk/src/jason/asSyntax/patterns/goal/EBDG.java 2009-05-03 11:01:49 UTC (rev 1493)
@@ -29,6 +29,7 @@
public Agent process(Pred directive, Agent outerContent, Agent innerContent) {
try {
Agent newAg = new Agent();
+ newAg.initAg();
Literal goal = Literal.parseLiteral(directive.getTerm(0).toString());
Modified: trunk/src/jason/asSyntax/patterns/goal/SGA.java
===================================================================
--- trunk/src/jason/asSyntax/patterns/goal/SGA.java 2009-04-28 19:24:45 UTC (rev 1492)
+++ trunk/src/jason/asSyntax/patterns/goal/SGA.java 2009-05-03 11:01:49 UTC (rev 1493)
@@ -29,6 +29,7 @@
Term goal = directive.getTerm(2);
Agent newAg = new Agent();
+ newAg.initAg();
// add t : not f__l(_) & c <- !f__g(g).
newAg.getPL().add(ASSyntax.parsePlan(trigger+" : not f__l(_) & " +context +" <- !f__g("+goal+")."));
Modified: trunk/src/jason/control/ExecutionControlGUI.java
===================================================================
--- trunk/src/jason/control/ExecutionControlGUI.java 2009-04-28 19:24:45 UTC (rev 1492)
+++ trunk/src/jason/control/ExecutionControlGUI.java 2009-05-03 11:01:49 UTC (rev 1493)
@@ -224,8 +224,7 @@
jList = new JList(listModel);
spList = new JPanel(new BorderLayout());
spList.add(BorderLayout.CENTER, new JScrollPane(jList));
- spList.setBorder(BorderFactory.createTitledBorder(BorderFactory
- .createEtchedBorder(), "Agents", TitledBorder.LEFT, TitledBorder.TOP));
+ spList.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Agents", TitledBorder.LEFT, TitledBorder.TOP));
jList.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
String ag = jList.getSelectedValue().toString();
Modified: trunk/src/test/ASParserTest.java
===================================================================
--- trunk/src/test/ASParserTest.java 2009-04-28 19:24:45 UTC (rev 1492)
+++ trunk/src/test/ASParserTest.java 2009-05-03 11:01:49 UTC (rev 1493)
@@ -4,9 +4,7 @@
import static jason.asSyntax.ASSyntax.createLiteral;
import static jason.asSyntax.ASSyntax.createNumber;
import static jason.asSyntax.ASSyntax.createString;
-import jason.architecture.AgArch;
import jason.asSemantics.Agent;
-import jason.asSemantics.TransitionSystem;
import jason.asSemantics.Unifier;
import jason.asSyntax.ASSyntax;
import jason.asSyntax.ListTerm;
@@ -23,7 +21,6 @@
import jason.asSyntax.PlanBody.BodyType;
import jason.asSyntax.parser.ParseException;
import jason.asSyntax.parser.as2j;
-import jason.infra.centralised.CentralisedAgArch;
import jason.mas2j.MAS2JProject;
import jason.mas2j.parser.mas2j;
@@ -43,10 +40,7 @@
public void testKQML() {
Agent ag = new Agent();
- ag.setLogger(null);
- AgArch arch = new AgArch();
- arch.setArchInfraTier(new CentralisedAgArch());
- ag.setTS(new TransitionSystem(ag, null, null, arch));
+ ag.initAg();
assertTrue(ag.parseAS(new File("src/asl/kqmlPlans.asl")));
assertTrue(ag.parseAS(new File("examples/auction/ag1.asl")));
@@ -136,8 +130,9 @@
as2j parser = new as2j(new StringReader(source));
Agent a = new Agent();
+ a.initAg();
parser.agent(a);
- assertEquals(a.getPL().getPlans().size(), 7);
+ assertEquals(7, a.getPL().getPlans().size());
source = " { begin omc(at(X,Y), no_battery, no_beer) } \n";
source += " +!at(X,Y) : b(X) <- go(X,Y). ";
@@ -145,6 +140,7 @@
source += " { end }";
parser = new as2j(new StringReader(source));
a = new Agent();
+ a.initAg();
a.setASLSrc("test1");
parser.agent(a);
assertTrue(a.getPL().getPlans().size() == 8);
@@ -156,6 +152,7 @@
source += " { end }";
parser = new as2j(new StringReader(source));
a = new Agent();
+ a.initAg();
parser.agent(a);
//for (Plan p: a.getPL().getPlans()) {
// System.out.println(p);
@@ -167,11 +164,12 @@
source += " { end }";
parser = new as2j(new StringReader(source));
a = new Agent();
+ a.initAg();
parser.agent(a);
//for (Plan p: a.getPL().getPlans()) {
// System.out.println(p);
//}
- assertTrue(a.getPL().getPlans().size() == 5);
+ assertEquals(5, a.getPL().getPlans().size());
}
@@ -283,6 +281,8 @@
parseDir(f);
} else if (f.getName().endsWith(MAS2JProject.AS_EXT)) {
as2j parser = new as2j(new FileInputStream(f));
+ //Agent ag = new Agent();
+ //ag.init();
parser.agent((Agent)null);
} else if (f.getName().endsWith(MAS2JProject.EXT)) {
mas2j parser = new mas2j(new FileInputStream(f));
Modified: trunk/src/test/BeliefBaseTest.java
===================================================================
--- trunk/src/test/BeliefBaseTest.java 2009-04-28 19:24:45 UTC (rev 1492)
+++ trunk/src/test/BeliefBaseTest.java 2009-05-03 11:01:49 UTC (rev 1493)
@@ -1,10 +1,8 @@
package test;
import jason.RevisionFailedException;
-import jason.architecture.AgArch;
import jason.asSemantics.Agent;
import jason.asSemantics.Intention;
-import jason.asSemantics.TransitionSystem;
import jason.asSemantics.Unifier;
import jason.asSyntax.ASSyntax;
import jason.asSyntax.Atom;
@@ -22,7 +20,6 @@
import jason.bb.BeliefBase;
import jason.bb.DefaultBeliefBase;
import jason.bb.JDBCPersistentBB;
-import jason.infra.centralised.CentralisedAgArch;
import java.util.Iterator;
import java.util.List;
@@ -253,9 +250,7 @@
public void testRemWithUnnamedVar() {
Agent ag = new Agent();
- AgArch arch = new AgArch();
- arch.setArchInfraTier(new CentralisedAgArch());
- ag.setTS(new TransitionSystem(ag, null, null, arch));
+ ag.initAg();
ag.getBB().add(Literal.parseLiteral("pos(2,3)"));
Unifier u = new Unifier();
@@ -271,9 +266,7 @@
@SuppressWarnings("unused")
public void testLogCons() {
Agent ag = new Agent();
- AgArch arch = new AgArch();
- arch.setArchInfraTier(new CentralisedAgArch());
- ag.setTS(new TransitionSystem(ag, null, null, arch));
+ ag.initAg();
ag.getBB().add(Literal.parseLiteral("a(10)"));
ag.getBB().add(Literal.parseLiteral("a(20)"));
@@ -525,9 +518,7 @@
@SuppressWarnings("unchecked")
public void testBelBRF() throws RevisionFailedException {
Agent ag = new Agent();
- AgArch arch = new AgArch();
- arch.setArchInfraTier(new CentralisedAgArch());
- ag.setTS(new TransitionSystem(ag, null, null, arch));
+ ag.initAg();
ag.getBB().add(Literal.parseLiteral("a(10)"));
ag.getBB().add(Literal.parseLiteral("a(20)[a]"));
@@ -598,6 +589,7 @@
public void testClone() {
Agent ag = new Agent();
+ ag.initAg();
ag.getBB().add(1,Literal.parseLiteral("a(10)"));
ag.getBB().add(1,Literal.parseLiteral("a(20)[a]"));
ag.getBB().add(1,Literal.parseLiteral("a(30)[a,b]"));
@@ -605,7 +597,7 @@
ag.getBB().add(1,Literal.parseLiteral("c(y)"));
ag.getBB().add(Literal.parseLiteral("c(20)"));
BeliefBase c = (BeliefBase)ag.getBB().clone();
- assertEquals(ag.getBB().toString(), c.toString());
+ assertEquals(ag.getBB().size(), c.size());
}
@SuppressWarnings("unchecked")
Modified: trunk/src/test/ExprTermTest.java
===================================================================
--- trunk/src/test/ExprTermTest.java 2009-04-28 19:24:45 UTC (rev 1492)
+++ trunk/src/test/ExprTermTest.java 2009-05-03 11:01:49 UTC (rev 1493)
@@ -1,9 +1,7 @@
package test;
import jason.JasonException;
-import jason.architecture.AgArch;
import jason.asSemantics.Agent;
-import jason.asSemantics.TransitionSystem;
import jason.asSemantics.Unifier;
import jason.asSyntax.ASSyntax;
import jason.asSyntax.ArithExpr;
@@ -17,7 +15,6 @@
import jason.asSyntax.Term;
import jason.asSyntax.VarTerm;
import jason.asSyntax.parser.ParseException;
-import jason.infra.centralised.CentralisedAgArch;
import java.util.Collections;
@@ -207,10 +204,7 @@
public void testCount() throws Exception {
Agent ag = new Agent();
- ag.initDefaultFunctions();
- AgArch arch = new AgArch();
- arch.setArchInfraTier(new CentralisedAgArch());
- ag.setTS(new TransitionSystem(ag, null, null, arch));
+ ag.initAg();
assertTrue(ag.getFunction(".count",1) != null);
ag.getBB().add(Literal.parseLiteral("b(10)"));
Modified: trunk/src/test/RuleTest.java
===================================================================
--- trunk/src/test/RuleTest.java 2009-04-28 19:24:45 UTC (rev 1492)
+++ trunk/src/test/RuleTest.java 2009-05-03 11:01:49 UTC (rev 1493)
@@ -1,14 +1,11 @@
package test;
-import jason.architecture.AgArch;
import jason.asSemantics.Agent;
-import jason.asSemantics.TransitionSystem;
import jason.asSemantics.Unifier;
import jason.asSyntax.Literal;
import jason.asSyntax.LogExpr;
import jason.asSyntax.Rule;
import jason.asSyntax.VarTerm;
-import jason.infra.centralised.CentralisedAgArch;
import java.util.HashMap;
import java.util.Iterator;
@@ -25,9 +22,7 @@
public void testLogCons() {
Agent ag = new Agent();
- AgArch arch = new AgArch();
- arch.setArchInfraTier(new CentralisedAgArch());
- ag.setTS(new TransitionSystem(ag, null, null, arch));
+ ag.initAg();
ag.getBB().add(Literal.parseLiteral("a(10)"));
ag.getBB().add(Literal.parseLiteral("a(20)"));
@@ -79,9 +74,7 @@
public void testLogCons2() {
Agent ag = new Agent();
- AgArch arch = new AgArch();
- arch.setArchInfraTier(new CentralisedAgArch());
- ag.setTS(new TransitionSystem(ag, null, null, arch));
+ ag.initAg();
Rule r = new Rule(Literal.parseLiteral("r([],a(X),b(X,4))"), Literal.parseLiteral("true"));
ag.getBB().add(r);
@@ -98,9 +91,7 @@
public void testLogConsRec() {
Agent ag = new Agent();
- AgArch arch = new AgArch();
- arch.setArchInfraTier(new CentralisedAgArch());
- ag.setTS(new TransitionSystem(ag, null, null, arch));
+ ag.initAg();
// add
// min([],M,M).
Modified: trunk/src/test/StdLibTest.java
===================================================================
--- trunk/src/test/StdLibTest.java 2009-04-28 19:24:45 UTC (rev 1492)
+++ trunk/src/test/StdLibTest.java 2009-05-03 11:01:49 UTC (rev 1493)
@@ -1,7 +1,6 @@
package test;
import jason.RevisionFailedException;
-import jason.architecture.AgArch;
import jason.asSemantics.Agent;
import jason.asSemantics.Circumstance;
import jason.asSemantics.IntendedMeans;
@@ -25,7 +24,6 @@
import jason.asSyntax.VarTerm;
import jason.asSyntax.parser.ParseException;
import jason.bb.BeliefBase;
-import jason.infra.centralised.CentralisedAgArch;
import jason.stdlib.add_annot;
import jason.stdlib.add_nested_source;
import jason.stdlib.add_plan;
@@ -64,6 +62,7 @@
p5 = Plan.parse("+!g5 : true <- i.");
ag = new Agent();
+ ag.initAg();
ag.getPL().add(Plan.parse("-!g1 : true <- j."));
}
@@ -112,10 +111,7 @@
public void testFindAll() throws RevisionFailedException, ParseException {
Agent ag = new Agent();
- ag.setLogger(null);
- AgArch arch = new AgArch();
- arch.setArchInfraTier(new CentralisedAgArch());
- ag.setTS(new TransitionSystem(ag, null, null, arch));
+ ag.initAg();
Literal l1 = Literal.parseLiteral("a(10,x)");
assertFalse(l1.hasSource());
@@ -142,7 +138,7 @@
public void testGetRelevantPlansAndAddPlan() throws Exception {
Agent ag = new Agent();
- ag.setLogger(null);
+ ag.initAg();
Plan pa = ASSyntax.parsePlan("@t1 +a : g(10) <- .print(\"ok 10\").");
ag.getPL().add(pa, null, false);
assertTrue(pa != null);
Modified: trunk/src/test/TSTest.java
===================================================================
--- trunk/src/test/TSTest.java 2009-04-28 19:24:45 UTC (rev 1492)
+++ trunk/src/test/TSTest.java 2009-05-03 11:01:49 UTC (rev 1493)
@@ -33,11 +33,11 @@
public void testRelevant() throws ParseException, JasonException {
Agent ag = new Agent();
- Circumstance c = new Circumstance();
+ ag.initAg();
ag.getPL().add(ASSyntax.parsePlan("@t1 +a(X) : g(10) <- .print(\"ok 10\")."), new Structure("nosource"), false);
ag.getPL().add((Plan)ASSyntax.parseTerm("{ @t2 +a(X) : true <- .print(\"ok 20\") }"), new Structure("nosource"), false);
ag.getPL().add(ASSyntax.parsePlan("@t3 +b : true <- true."), new Structure("nosource"), false);
- TransitionSystem ts = new TransitionSystem(ag, c, null, null);
+ TransitionSystem ts = ag.getTS();
Literal content = Literal.parseLiteral("~alliance");
content.addSource(new Structure("ag1"));
Modified: trunk/src/test/VarTermTest.java
===================================================================
--- trunk/src/test/VarTermTest.java 2009-04-28 19:24:45 UTC (rev 1492)
+++ trunk/src/test/VarTermTest.java 2009-05-03 11:01:49 UTC (rev 1493)
@@ -1,9 +1,7 @@
package test;
import jason.RevisionFailedException;
-import jason.architecture.AgArch;
import jason.asSemantics.Agent;
-import jason.asSemantics.TransitionSystem;
import jason.asSemantics.Unifier;
import jason.asSyntax.ASSyntax;
import jason.asSyntax.ArithExpr;
@@ -23,7 +21,6 @@
import jason.asSyntax.parser.SimpleCharStream;
import jason.asSyntax.parser.Token;
import jason.asSyntax.parser.as2jTokenManager;
-import jason.infra.centralised.CentralisedAgArch;
import java.io.StringReader;
import java.util.ArrayList;
@@ -335,9 +332,7 @@
public void testVarWithAnnotsInLogCons() throws RevisionFailedException, ParseException {
Agent ag = new Agent();
- AgArch arch = new AgArch();
- arch.setArchInfraTier(new CentralisedAgArch());
- ag.setTS(new TransitionSystem(ag, null, null, arch));
+ ag.initAg();
ag.addBel(Literal.parseLiteral("b1[b]"));
ag.addBel(Literal.parseLiteral("b2[d]"));
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2009-06-24 14:15:15
|
Revision: 1497
http://jason.svn.sourceforge.net/jason/?rev=1497&view=rev
Author: jomifred
Date: 2009-06-24 14:15:14 +0000 (Wed, 24 Jun 2009)
Log Message:
-----------
increase the size of stack to run Jason projects
Modified Paths:
--------------
trunk/src/jason/asSyntax/ASSyntax.java
trunk/src/jason/asSyntax/ListTermImpl.java
trunk/src/templates/build-template.xml
Modified: trunk/src/jason/asSyntax/ASSyntax.java
===================================================================
--- trunk/src/jason/asSyntax/ASSyntax.java 2009-06-16 18:56:41 UTC (rev 1496)
+++ trunk/src/jason/asSyntax/ASSyntax.java 2009-06-24 14:15:14 UTC (rev 1497)
@@ -134,6 +134,13 @@
}
+ /** Creates a new rule with a head and a body */
+ public static Rule createRule(Literal head, LogicalFormula body) {
+ return new Rule(head,body);
+ }
+
+
+
/** creates a new literal by parsing a string */
public static Literal parseLiteral(String sLiteral) throws ParseException {
return new as2j(new StringReader(sLiteral)).literal();
@@ -182,4 +189,9 @@
public static LogicalFormula parseFormula(String sExpr) throws ParseException {
return (LogicalFormula)new as2j(new StringReader(sExpr)).log_expr();
}
+
+ /** creates a new rule by parsing a string */
+ public static Rule parseRule(String sRule) throws ParseException {
+ return (Rule)new as2j(new StringReader(sRule)).belief();
+ }
}
Modified: trunk/src/jason/asSyntax/ListTermImpl.java
===================================================================
--- trunk/src/jason/asSyntax/ListTermImpl.java 2009-06-16 18:56:41 UTC (rev 1496)
+++ trunk/src/jason/asSyntax/ListTermImpl.java 2009-06-24 14:15:14 UTC (rev 1497)
@@ -259,12 +259,18 @@
/** get the last ListTerm of this List */
public ListTerm getLast() {
+ ListTerm r = this;
+ while (!r.isEnd() && r.getNext() != null)
+ r = r.getNext();
+ return r;
+ /* recursive implementation
if (isEnd()) {
return this;
} else if (next != null) {
return getNext().getLast();
}
return null; // !!! no last!!!!
+ */
}
public ListTerm getPenultimate() {
@@ -306,7 +312,6 @@
}
}
-
/**
* Adds a list in the end of this list.
* This method do not clone <i>lt</i>.
@@ -475,7 +480,7 @@
}
}
public boolean add(Term o) {
- return append(o) != null;
+ return getLast().append(o) != null;
}
@SuppressWarnings("unchecked")
Modified: trunk/src/templates/build-template.xml
===================================================================
--- trunk/src/templates/build-template.xml 2009-06-16 18:56:41 UTC (rev 1496)
+++ trunk/src/templates/build-template.xml 2009-06-24 14:15:14 UTC (rev 1497)
@@ -90,7 +90,7 @@
failonerror="true" fork="yes" dir="${basedir}" >
<classpath refid="project.classpath"/>
<arg line="${mas2j.project.file} ${debug} <RUN-ARGS>"/>
- <jvmarg line="-Xmx500M"/>
+ <jvmarg line="-Xmx500M -Xss8M"/>
</java>
<antcall target="user-end" />
</target>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2009-08-04 12:16:11
|
Revision: 1504
http://jason.svn.sourceforge.net/jason/?rev=1504&view=rev
Author: jomifred
Date: 2009-08-04 12:15:54 +0000 (Tue, 04 Aug 2009)
Log Message:
-----------
simplify impl of askAll
Modified Paths:
--------------
trunk/src/asl/kqmlPlans.asl
trunk/src/jason/asSemantics/TransitionSystem.java
Modified: trunk/src/asl/kqmlPlans.asl
===================================================================
--- trunk/src/asl/kqmlPlans.asl 2009-07-22 15:51:02 UTC (rev 1503)
+++ trunk/src/asl/kqmlPlans.asl 2009-08-04 12:15:54 UTC (rev 1504)
@@ -82,11 +82,6 @@
-!kqml_received(Sender, askOne, Content, MsgId)
<- .send(Sender, untell, Content, MsgId).
-@kqmlReceivedAskAll1
-+!kqml_received(Sender, askAll, Content, MsgId)
- : not Content
- <- .send(Sender, untell, Content, MsgId).
-
@kqmlReceivedAskAll2
+!kqml_received(Sender, askAll, Content, MsgId)
<- .findall(Content, Content, List);
Modified: trunk/src/jason/asSemantics/TransitionSystem.java
===================================================================
--- trunk/src/jason/asSemantics/TransitionSystem.java 2009-07-22 15:51:02 UTC (rev 1503)
+++ trunk/src/jason/asSemantics/TransitionSystem.java 2009-08-04 12:15:54 UTC (rev 1504)
@@ -29,7 +29,6 @@
import jason.asSyntax.ASSyntax;
import jason.asSyntax.Atom;
import jason.asSyntax.InternalActionLiteral;
-import jason.asSyntax.ListTermImpl;
import jason.asSyntax.Literal;
import jason.asSyntax.LiteralImpl;
import jason.asSyntax.LogicalFormula;
@@ -176,12 +175,8 @@
// if the answer was tell 3, unifies X=3
// if the answer was untell 3, unifies X=false
Structure send = (Structure)intention.peek().removeCurrentStep();
- if (m.isUnTell()) {
- if (send.getTerm(1).toString().equals("askOne")) {
- content = Literal.LFalse;
- } else { // the .send is askAll
- content = new ListTermImpl(); // the answer is an empty list
- }
+ if (m.isUnTell() && send.getTerm(1).toString().equals("askOne")) {
+ content = Literal.LFalse;
}
if (intention.peek().getUnif().unifies(send.getTerm(3), content)) {
getC().addIntention(intention);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2009-12-07 13:31:47
|
Revision: 1561
http://jason.svn.sourceforge.net/jason/?rev=1561&view=rev
Author: jomifred
Date: 2009-12-07 13:31:40 +0000 (Mon, 07 Dec 2009)
Log Message:
-----------
improve jason jade arch to read parameters from .mas2j
Modified Paths:
--------------
trunk/src/jason/asSemantics/TransitionSystem.java
trunk/src/jason/asSyntax/PlanLibrary.java
trunk/src/jason/infra/centralised/RunCentralisedMAS.java
trunk/src/jason/infra/jade/JadeAgArch.java
trunk/src/jason/infra/jade/RunJadeMAS.java
trunk/src/test/PlanTest.java
Modified: trunk/src/jason/asSemantics/TransitionSystem.java
===================================================================
--- trunk/src/jason/asSemantics/TransitionSystem.java 2009-12-05 19:01:10 UTC (rev 1560)
+++ trunk/src/jason/asSemantics/TransitionSystem.java 2009-12-07 13:31:40 UTC (rev 1561)
@@ -310,7 +310,7 @@
// get all relevant plans for the selected event
//Trigger te = (Trigger) conf.C.SE.trigger.clone();
List<Plan> candidateRPs = conf.ag.pl.getCandidatePlans(conf.C.SE.trigger);
- if (candidateRPs != null && !candidateRPs.isEmpty()) {
+ if (candidateRPs != null) {
for (Plan pl : candidateRPs) {
Unifier relUn = pl.isRelevant(conf.C.SE.trigger);
if (relUn != null) { // is relevant
Modified: trunk/src/jason/asSyntax/PlanLibrary.java
===================================================================
--- trunk/src/jason/asSyntax/PlanLibrary.java 2009-12-05 19:01:10 UTC (rev 1560)
+++ trunk/src/jason/asSyntax/PlanLibrary.java 2009-12-07 13:31:40 UTC (rev 1561)
@@ -273,16 +273,24 @@
/** remove the plan with label <i>pLabel</i> */
public Plan remove(String pLabel) {
- Plan p = (Plan) planLabels.remove(pLabel);
+ Plan p = planLabels.remove(pLabel);
// remove it from plans' list
plans.remove(p);
if (p.getTrigger().getLiteral().isVar()) {
varPlans.remove(p);
- // remove p from all entries
- for (List<Plan> lp: relPlans.values())
+ // remove p from all entries and
+ // clean empty entries
+ Iterator<PredicateIndicator> ipi = relPlans.keySet().iterator();
+ while (ipi.hasNext()) {
+ PredicateIndicator pi = ipi.next();
+ List<Plan> lp = relPlans.get(pi);
lp.remove(p);
+ if (lp.isEmpty()) {
+ ipi.remove();
+ }
+ }
} else {
List<Plan> codesList = relPlans.get(p.getTrigger().getPredicateIndicator());
codesList.remove(p);
@@ -300,8 +308,7 @@
}
public boolean hasCandidatePlan(Trigger te) {
- List<Plan> l = getCandidatePlans(te);
- return l != null && ! l.isEmpty();
+ return getCandidatePlans(te) != null;
}
@@ -313,12 +320,14 @@
public List<Plan> getCandidatePlans(Trigger te) {
List<Plan> l = relPlans.get(te.getPredicateIndicator());
if ((l == null || l.isEmpty()) && !varPlans.isEmpty()) { // no rel plan, try varPlan
- l = new ArrayList<Plan>();
for (Plan p: varPlans)
- if (p.getTrigger().sameType(te))
+ if (p.getTrigger().sameType(te)) {
+ if (l == null)
+ l = new ArrayList<Plan>();
l.add(p);
+ }
}
- return l;
+ return l; // if no rel plan, have to return null instead of empty list
}
public static final Trigger TE_IDLE = new Trigger(TEOperator.add, TEType.achieve, new Atom("idle"));
Modified: trunk/src/jason/infra/centralised/RunCentralisedMAS.java
===================================================================
--- trunk/src/jason/infra/centralised/RunCentralisedMAS.java 2009-12-05 19:01:10 UTC (rev 1560)
+++ trunk/src/jason/infra/centralised/RunCentralisedMAS.java 2009-12-07 13:31:40 UTC (rev 1561)
@@ -154,8 +154,10 @@
project.setupDefault();
project.registerDirectives();
+ // set the aslSrcPath in the include
+ ((Include)DirectiveProcessor.getDirective("include")).setSourcePath(project.getSourcePaths());
- runner.createAg(project, debug);
+ runner.createAgents(project, debug);
runner.startAgs();
runner.startSyncMode();
@@ -327,7 +329,7 @@
return project;
}
- protected void createAg(MAS2JProject project, boolean debug) throws JasonException {
+ protected void createAgents(MAS2JProject project, boolean debug) throws JasonException {
// create environment
logger.fine("Creating environment " + project.getEnvClass());
env = new CentralisedEnvironment(project.getEnvClass(), this);
@@ -338,10 +340,7 @@
Agent pag = null;
project.fixAgentsSrc(urlPrefix);
-
- // set the aslSrcPath in the include
- ((Include)DirectiveProcessor.getDirective("include")).setSourcePath(project.getSourcePaths());
-
+
// create the agents
for (AgentParameters ap : project.getAgents()) {
try {
Modified: trunk/src/jason/infra/jade/JadeAgArch.java
===================================================================
--- trunk/src/jason/infra/jade/JadeAgArch.java 2009-12-05 19:01:10 UTC (rev 1560)
+++ trunk/src/jason/infra/jade/JadeAgArch.java 2009-12-07 13:31:40 UTC (rev 1561)
@@ -18,12 +18,18 @@
import jason.asSyntax.Literal;
import jason.asSyntax.StringTermImpl;
import jason.asSyntax.Term;
+import jason.asSyntax.directives.DirectiveProcessor;
+import jason.asSyntax.directives.Include;
import jason.infra.centralised.RunCentralisedMAS;
import jason.mas2j.AgentParameters;
import jason.mas2j.ClassParameters;
+import jason.mas2j.MAS2JProject;
+import jason.mas2j.parser.ParseException;
import jason.runtime.RuntimeServicesInfraTier;
-import jason.runtime.Settings;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
@@ -72,118 +78,132 @@
logger.info("starting "+getLocalName());
try {
- // default values for args
- String asSource = null;
- String archClassName = null;
- String agClassName = null;
- ClassParameters bbPars = null;
- Settings stts = null;
-
- Object[] args = getArguments();
- if (args == null) {
- logger.info("No AgentSpeak source informed!");
- return;
+ AgentParameters ap = parseParameters();
+ if (ap != null) {
+ userAgArch = (AgArch) Class.forName(ap.archClass.getClassName()).newInstance();
+ userAgArch.setArchInfraTier(this);
+ userAgArch.initAg(ap.agClass.getClassName(), ap.getBBClass(), ap.asSource.getAbsolutePath(), ap.getAsSetts(false, false));
+ logger.setLevel(userAgArch.getTS().getSettings().logLevel());
+
+ registerAgInDF();
+
+ tsBehaviour = new JasonTSReasoner();
+ addBehaviour(tsBehaviour);
+
+ logger.fine("Created from source "+ap.asSource);
}
- if (args[0] instanceof AgentParameters) {
- AgentParameters ap = (AgentParameters)args[0];
- asSource = ap.asSource.getAbsolutePath();
- archClassName = ap.archClass.getClassName();
- agClassName = ap.agClass.getClassName();
- bbPars = ap.getBBClass();
- stts = ap.getAsSetts((Boolean)args[1], (Boolean)args[2]); // TODO: develop a way to get debug and sync parameters
+ } catch (Exception e) {
+ logger.log(Level.SEVERE,"Error creating JADE architecture.",e);
+ }
+ }
- } else {
- // read arguments
- // if [0] is mas2j // TODO this
- // read all parameters form [1] (including aslSource and directives)
- // create the agents indicated by [2]
- // else
- // [0] is the file with AS source for the agent
- // arch <arch class>
- // ag <agent class>
- // bb < belief base class >
- // option < options >
+ protected AgentParameters parseParameters() throws ParseException, IOException {
- asSource = args[0].toString();
-
- // default values for args
- archClassName = AgArch.class.getName();
- agClassName = jason.asSemantics.Agent.class.getName();
- bbPars = new ClassParameters(jason.bb.DefaultBeliefBase.class.getName());
- stts = new Settings();
-
- int i=1;
- while (i < args.length) {
-
- if (args[i].toString().equals("arch")) {
- i++;
- archClassName = args[i].toString();
- } else if (args[i].toString().equals("ag")) {
- i++;
- agClassName = args[i].toString();
- }
+ Object[] args = getArguments();
+ if (args == null || args.length == 0) {
+ logger.info("No AgentSpeak source informed!");
+ return null;
+ }
- // TODO: read custom BB and settings from arguments
+ // read arguments
+ // if [0] is an instance of AgentParameters
+ // read parameters from [0]
+ // else if [0] is j-project
+ // read all parameters form [1] (including aslSource and directives)
+ // create the agents indicated by [2]
+ // else
+ // [0] is the file with AS source for the agent
+ // arch <arch class>
+ // ag <agent class>
+ // bb < belief base class >
+ // option < options >
+ if (args[0] instanceof AgentParameters) {
+ return (AgentParameters)args[0];
+ } else if (args[0].toString().equals("j-project")) { // load parameters from .mas2j
+ if (args.length != 3) {
+ logger.log(Level.SEVERE, "To start agents from .mas2j file, you have to provide as parameters: (j-project, <file.mas2j>, <nameofagent in mas2j>)");
+ return null;
+ }
+ jason.mas2j.parser.mas2j parser = new jason.mas2j.parser.mas2j(new FileReader(args[1].toString()));
+ MAS2JProject project = parser.mas();
+ project.setupDefault();
+
+ project.registerDirectives();
+ ((Include)DirectiveProcessor.getDirective("include")).setSourcePath(project.getSourcePaths());
+
+ AgentParameters ap = project.getAg(args[2].toString());
+ if (ap == null)
+ logger.log(Level.SEVERE, "There is no agent '"+args[2]+"' in project '"+args[1]+"'.");
+ if (ap.qty > 1)
+ logger.warning("Ignoring quantity of agents from mas2j, jade arch creates only ONE agent.");
+ return ap;
+
+ } else { // load parameters from shell
+ AgentParameters ap = new AgentParameters();
+ ap.setupDefault();
+ ap.asSource = new File(args[0].toString());
+
+ int i=1;
+ while (i < args.length) {
+ if (args[i].toString().equals("arch")) {
i++;
- }
+ ap.archClass = new ClassParameters(args[i].toString());
+ } else if (args[i].toString().equals("ag")) {
+ i++;
+ ap.agClass = new ClassParameters(args[i].toString());
+ }
+ i++;
}
-
- userAgArch = (AgArch) Class.forName(archClassName).newInstance();
- userAgArch.setArchInfraTier(this);
- userAgArch.initAg(agClassName, bbPars, asSource, stts);
- logger.setLevel(userAgArch.getTS().getSettings().logLevel());
+ return ap;
+ }
+ }
- // DF register
- DFAgentDescription dfa = new DFAgentDescription();
- dfa.setName(getAID());
- ServiceDescription vc = new ServiceDescription();
- vc.setType("jason");
- vc.setName(dfName);
- dfa.addServices(vc);
- try {
- DFService.register(this,dfa);
- } catch (FIPAException e) {
- logger.log(Level.SEVERE, "Error registering agent in DF", e);
- }
-
- tsBehaviour = new CyclicBehaviour() {
- TransitionSystem ts = userAgArch.getTS();
- public void action() {
- if (ts.getSettings().isSync()) {
- if (processExecutionControlOntologyMsg()) {
- // execute a cycle in sync mode
- ts.reasoningCycle();
- boolean isBreakPoint = false;
- try {
- isBreakPoint = ts.getC().getSelectedOption().getPlan().hasBreakpoint();
- if (logger.isLoggable(Level.FINE)) logger.fine("Informing controller that I finished a reasoning cycle "+userAgArch.getCycleNumber()+". Breakpoint is " + isBreakPoint);
- } catch (NullPointerException e) {
- // no problem, there is no sel opt, no plan ....
- }
- informCycleFinished(isBreakPoint, userAgArch.getCycleNumber());
+ private void registerAgInDF() {
+ // DF register
+ DFAgentDescription dfa = new DFAgentDescription();
+ dfa.setName(getAID());
+ ServiceDescription vc = new ServiceDescription();
+ vc.setType("jason");
+ vc.setName(dfName);
+ dfa.addServices(vc);
+ try {
+ DFService.register(this,dfa);
+ } catch (FIPAException e) {
+ logger.log(Level.SEVERE, "Error registering agent in DF", e);
+ }
+ }
- } else {
- block(1000);
- }
- } else {
- if (enterInSleepMode) {
- block(1000);
- enterInSleepMode = false;
- } else {
- ts.reasoningCycle();
- }
+ class JasonTSReasoner extends CyclicBehaviour {
+ TransitionSystem ts = userAgArch.getTS();
+ public void action() {
+ if (ts.getSettings().isSync()) {
+ if (processExecutionControlOntologyMsg()) {
+ // execute a cycle in sync mode
+ ts.reasoningCycle();
+ boolean isBreakPoint = false;
+ try {
+ isBreakPoint = ts.getC().getSelectedOption().getPlan().hasBreakpoint();
+ if (logger.isLoggable(Level.FINE)) logger.fine("Informing controller that I finished a reasoning cycle "+userAgArch.getCycleNumber()+". Breakpoint is " + isBreakPoint);
+ } catch (NullPointerException e) {
+ // no problem, there is no sel opt, no plan ....
}
+ informCycleFinished(isBreakPoint, userAgArch.getCycleNumber());
+
+ } else {
+ block(1000);
}
- };
- addBehaviour(tsBehaviour);
-
- logger.fine("Created from source "+asSource);
- } catch (Exception e) {
- logger.log(Level.SEVERE,"Error creating JADE architecture.",e);
+ } else {
+ if (enterInSleepMode) {
+ block(1000);
+ enterInSleepMode = false;
+ } else {
+ ts.reasoningCycle();
+ }
+ }
}
}
-
+
@Override
public void doDelete() {
try {
Modified: trunk/src/jason/infra/jade/RunJadeMAS.java
===================================================================
--- trunk/src/jason/infra/jade/RunJadeMAS.java 2009-12-05 19:01:10 UTC (rev 1560)
+++ trunk/src/jason/infra/jade/RunJadeMAS.java 2009-12-07 13:31:40 UTC (rev 1561)
@@ -126,7 +126,7 @@
}
@Override
- protected void createAg(MAS2JProject project, boolean debug) throws JasonException {
+ protected void createAgents(MAS2JProject project, boolean debug) throws JasonException {
if (!startContainer()) return;
try {
// create environment
Modified: trunk/src/test/PlanTest.java
===================================================================
--- trunk/src/test/PlanTest.java 2009-12-05 19:01:10 UTC (rev 1560)
+++ trunk/src/test/PlanTest.java 2009-12-07 13:31:40 UTC (rev 1561)
@@ -53,7 +53,7 @@
assertEquals(1, pls.size());
pls = pl.getCandidatePlans(ASSyntax.parseTrigger("+bla"));
- assertEquals(0, pls.size());
+ assertNull(pls);
}
public void testParser1() {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2010-02-08 11:48:15
|
Revision: 1578
http://jason.svn.sourceforge.net/jason/?rev=1578&view=rev
Author: jomifred
Date: 2010-02-08 11:48:07 +0000 (Mon, 08 Feb 2010)
Log Message:
-----------
improve equals in ObjectTermImpl as proposed by Tim Cleaver
Modified Paths:
--------------
trunk/src/jason/asSyntax/ObjectTermImpl.java
trunk/src/test/TermTest.java
Modified: trunk/src/jason/asSyntax/ObjectTermImpl.java
===================================================================
--- trunk/src/jason/asSyntax/ObjectTermImpl.java 2010-02-05 17:36:33 UTC (rev 1577)
+++ trunk/src/jason/asSyntax/ObjectTermImpl.java 2010-02-08 11:48:07 UTC (rev 1578)
@@ -30,8 +30,18 @@
public boolean equals(Object o) {
if (this.o == null) return false;
if (o == null) return false;
- if (!(o instanceof ObjectTermImpl)) return false;
- return this.o.equals(((ObjectTermImpl) o).o);
+
+ if (o instanceof ObjectTermImpl) {
+ return this.o.equals(((ObjectTermImpl) o).o);
+ }
+
+ if (o instanceof VarTerm) {
+ Term value = ((VarTerm) o).getValue();
+ if (value instanceof ObjectTermImpl) {
+ return this.o.equals(((ObjectTermImpl) value).o);
+ }
+ }
+ return false;
}
@Override
Modified: trunk/src/test/TermTest.java
===================================================================
--- trunk/src/test/TermTest.java 2010-02-05 17:36:33 UTC (rev 1577)
+++ trunk/src/test/TermTest.java 2010-02-08 11:48:07 UTC (rev 1578)
@@ -943,4 +943,13 @@
assertFalse(iterator.hasNext());
}
+
+ public void testVarObTerm() {
+ ObjectTerm term = new ObjectTermImpl("test");
+ VarTerm variable = new VarTerm("Variable");
+ variable.setValue(term);
+ assertTrue(term.equals(variable));
+ assertTrue(variable.equals(term));
+ assertTrue(variable.equals(new ObjectTermImpl("test")));
+ }
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2010-06-28 12:30:06
|
Revision: 1601
http://jason.svn.sourceforge.net/jason/?rev=1601&view=rev
Author: jomifred
Date: 2010-06-28 12:29:59 +0000 (Mon, 28 Jun 2010)
Log Message:
-----------
fix bug related to makVarAnnon when a var is ground with a list
Modified Paths:
--------------
trunk/src/jason/asSyntax/VarTerm.java
trunk/src/jason/stdlib/findall.java
trunk/src/test/ListTermTest.java
Modified: trunk/src/jason/asSyntax/VarTerm.java
===================================================================
--- trunk/src/jason/asSyntax/VarTerm.java 2010-06-03 19:03:22 UTC (rev 1600)
+++ trunk/src/jason/asSyntax/VarTerm.java 2010-06-28 12:29:59 UTC (rev 1601)
@@ -420,7 +420,7 @@
public Literal makeVarsAnnon(Unifier un) {
if (value == null)
return super.makeVarsAnnon(un);
- else if (getValue().isLiteral())
+ else if (getValue().isLiteral() || getValue().isList())
return ((Literal)getValue()).makeVarsAnnon(un);
else
return null;
Modified: trunk/src/jason/stdlib/findall.java
===================================================================
--- trunk/src/jason/stdlib/findall.java 2010-06-03 19:03:22 UTC (rev 1600)
+++ trunk/src/jason/stdlib/findall.java 2010-06-28 12:29:59 UTC (rev 1601)
@@ -96,7 +96,6 @@
Term var = args[0];
LogicalFormula logExpr = (LogicalFormula)args[1];
-
ListTerm all = new ListTermImpl();
ListTerm tail = all;
Iterator<Unifier> iu = logExpr.logicalConsequence(ts.getAg(), un);
Modified: trunk/src/test/ListTermTest.java
===================================================================
--- trunk/src/test/ListTermTest.java 2010-06-03 19:03:22 UTC (rev 1600)
+++ trunk/src/test/ListTermTest.java 2010-06-28 12:29:59 UTC (rev 1601)
@@ -337,6 +337,21 @@
assertEquals("[[a, b, c, 8]]", iterator2list(l3.subSets(4)).toString());
}
+ public void testMkVarAn() {
+ ListTermImpl l = (ListTermImpl)ListTermImpl.parseList("[use(car,Agent)]");
+ l.makeVarsAnnon();
+ assertTrue(l.toString().indexOf("_") > 0);
+
+ l = (ListTermImpl)ListTermImpl.parseList("[use(car,Agent)]");
+
+ VarTerm v = new VarTerm("V");
+ Unifier u = new Unifier();
+ u.unifies(v, l);
+ v.apply(u);
+ v.makeVarsAnnon();
+ assertTrue(v.toString().indexOf("_") > 0);
+ }
+
@SuppressWarnings("unchecked")
List iterator2list(Iterator i) {
List l = new ArrayList();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2010-08-10 13:48:51
|
Revision: 1606
http://jason.svn.sourceforge.net/jason/?rev=1606&view=rev
Author: jomifred
Date: 2010-08-10 13:48:45 +0000 (Tue, 10 Aug 2010)
Log Message:
-----------
improve atomic status computation for intentions
Modified Paths:
--------------
trunk/src/jason/asSemantics/Intention.java
trunk/src/test/TSTest.java
Modified: trunk/src/jason/asSemantics/Intention.java
===================================================================
--- trunk/src/jason/asSemantics/Intention.java 2010-08-03 20:12:59 UTC (rev 1605)
+++ trunk/src/jason/asSemantics/Intention.java 2010-08-10 13:48:45 UTC (rev 1606)
@@ -52,12 +52,12 @@
private static int idCount = 0;
private int id;
- private boolean isAtomic = false;
+ private int atomicCount = 0; // how many atomic intended means there are in the intention
private boolean isSuspended = false;
private Stack<IntendedMeans> intendedMeans = new Stack<IntendedMeans>();
- // static private Logger logger = Logger.getLogger(Intention.class.getName());
+ //static private Logger logger = Logger.getLogger(Intention.class.getName());
public Intention() {
id = ++idCount;
@@ -69,9 +69,8 @@
public void push(IntendedMeans im) {
intendedMeans.push(im);
- if (im.isAtomic()) {
- isAtomic = true;
- }
+ if (im.isAtomic())
+ atomicCount++;
}
public IntendedMeans peek() {
@@ -85,16 +84,27 @@
public IntendedMeans pop() {
IntendedMeans top = intendedMeans.pop();
- isAtomic = false;
- for (IntendedMeans im : intendedMeans) {
- if (im.isAtomic()) {
- isAtomic = true;
- break;
- }
+ if (isAtomic() && top.isAtomic()) {
+ atomicCount--;
+ /* for (IntendedMeans im : intendedMeans) {
+ if (im.isAtomic()) {
+ isAtomic = true;
+ break;
+ }
+ }*/
}
return top;
}
+ public boolean isAtomic() {
+ return atomicCount > 0;
+ }
+
+ public void setAtomic(int a) { // used for test
+ atomicCount = a;
+ }
+
+
public ListIterator<IntendedMeans> iterator() {
return intendedMeans.listIterator(intendedMeans.size());
}
@@ -107,14 +117,6 @@
return intendedMeans.size();
}
- public boolean isAtomic() {
- return isAtomic;
- }
-
- public void setAtomic(boolean b) {
- isAtomic = b;
- }
-
public void setSuspended(boolean b) {
isSuspended = b;
}
@@ -161,8 +163,10 @@
/** implements atomic intentions > not atomic intentions */
public int compareTo(Intention o) {
- if (o.isAtomic && !this.isAtomic) return 1;
- if (this.isAtomic && !o.isAtomic) return -1;
+ //if (o.isAtomic() && !this.isAtomic()) return 1;
+ //if (this.isAtomic() && !o.isAtomic()) return -1;
+ if (o.atomicCount > this.atomicCount) return 1;
+ if (this.atomicCount > o.atomicCount) return -1;
return 0;
}
@@ -180,7 +184,7 @@
public Intention clone() {
Intention i = new Intention();
i.id = id;
- i.isAtomic = isAtomic;
+ i.atomicCount = atomicCount;
i.intendedMeans = new Stack<IntendedMeans>();
for (IntendedMeans im: intendedMeans) {
i.intendedMeans.add((IntendedMeans)im.clone());
Modified: trunk/src/test/TSTest.java
===================================================================
--- trunk/src/test/TSTest.java 2010-08-03 20:12:59 UTC (rev 1605)
+++ trunk/src/test/TSTest.java 2010-08-10 13:48:45 UTC (rev 1606)
@@ -83,7 +83,7 @@
Intention i2 = new Intention();
Intention i3 = new Intention();
- i3.setAtomic(true);
+ i3.setAtomic(1);
assertTrue(i3.isAtomic());
Intention i4 = new Intention();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2010-08-10 21:46:11
|
Revision: 1607
http://jason.svn.sourceforge.net/jason/?rev=1607&view=rev
Author: jomifred
Date: 2010-08-10 21:46:04 +0000 (Tue, 10 Aug 2010)
Log Message:
-----------
fix a bug on annotation backtrack (do not backtrack when a tail is used, as in p[A|R])
Modified Paths:
--------------
trunk/src/jason/asSyntax/ListTermImpl.java
trunk/src/jason/asSyntax/Literal.java
trunk/src/test/TermTest.java
Modified: trunk/src/jason/asSyntax/ListTermImpl.java
===================================================================
--- trunk/src/jason/asSyntax/ListTermImpl.java 2010-08-10 13:48:45 UTC (rev 1606)
+++ trunk/src/jason/asSyntax/ListTermImpl.java 2010-08-10 21:46:04 UTC (rev 1607)
@@ -585,6 +585,8 @@
break;
}
l = l.getNext();
+ if (l == null)
+ break;
if (!l.isEmpty())
s.append(',');
}
Modified: trunk/src/jason/asSyntax/Literal.java
===================================================================
--- trunk/src/jason/asSyntax/Literal.java 2010-08-10 13:48:45 UTC (rev 1606)
+++ trunk/src/jason/asSyntax/Literal.java 2010-08-10 21:46:04 UTC (rev 1607)
@@ -260,7 +260,7 @@
return LogExpr.EMPTY_UNIF_LIST.iterator();
final AgArch arch = (ag == null ? null : ag.getTS().getUserAgArch());
- final int nbAnnots = (hasAnnot() ? getAnnots().size() : 0);
+ final int nbAnnots = (hasAnnot() && getAnnots().getTail() == null ? getAnnots().size() : 0); // if annots contains a tail (as in p[A|R]), do not backtrack on annots
return new Iterator<Unifier>() {
Unifier current = null;
Modified: trunk/src/test/TermTest.java
===================================================================
--- trunk/src/test/TermTest.java 2010-08-10 13:48:45 UTC (rev 1606)
+++ trunk/src/test/TermTest.java 2010-08-10 21:46:04 UTC (rev 1607)
@@ -490,18 +490,24 @@
u = new Unifier();
assertTrue(p1.hasSubsetAnnot(p5, u));
- Pred p6 = Pred.parsePred("p1(t1,t2)[a1|T]");
-
- //r.clear();
- //assertTrue(p6.getSubsetAnnots(p1.getAnnots(),new Unifier(),r));
- //System.out.println("p6="+p6+"; p1="+p1+" r="+r);
- //assertEquals(r.get(0).get("T").toString(), "[a(2,3),a(3)]");
-
+ Pred p6 = Pred.parsePred("p1(t1,t2)[a(3)|T]");
u = new Unifier();
assertTrue(p6.hasSubsetAnnot(p1, u));
- assertEquals(u.get("T").toString(), "[a(3),a(2,3)]");
+ assertEquals(u.get("T").toString(), "[a1,a(2,3)]");
assertTrue(p1.hasSubsetAnnot(p6, u));
+ Pred p7 = Pred.parsePred("p1(t1,t2)[A|T]");
+ u = new Unifier();
+ assertTrue(p7.hasSubsetAnnot(p1, u));
+ assertEquals("a1", u.get("A").toString() );
+ assertEquals("[a(3),a(2,3)]", u.get("T").toString());
+ assertTrue(p1.hasSubsetAnnot(p7, u));
+
+ u = new Unifier();
+ assertTrue(p1.hasSubsetAnnot(p7, u));
+ assertEquals("a1", u.get("A").toString() );
+ assertEquals("[a(3),a(2,3)]", u.get("T").toString());
+
// test many vars
l1 = Literal.parseLiteral( "p[4,W,a,b,X,Y,e,Z]");
assertTrue( Literal.parseLiteral("p[4]").hasSubsetAnnot(l1));
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2011-04-13 19:52:10
|
Revision: 1641
http://jason.svn.sourceforge.net/jason/?rev=1641&view=rev
Author: jomifred
Date: 2011-04-13 19:52:04 +0000 (Wed, 13 Apr 2011)
Log Message:
-----------
test whether a TS is set for Agent in LogCons
Modified Paths:
--------------
trunk/src/jason/asSemantics/Agent.java
trunk/src/jason/asSyntax/InternalActionLiteral.java
trunk/src/jason/asSyntax/Literal.java
trunk/src/test/TSTest.java
Modified: trunk/src/jason/asSemantics/Agent.java
===================================================================
--- trunk/src/jason/asSemantics/Agent.java 2011-04-12 18:47:14 UTC (rev 1640)
+++ trunk/src/jason/asSemantics/Agent.java 2011-04-13 19:52:04 UTC (rev 1641)
@@ -247,7 +247,7 @@
private void fixAgInIAandFunctions(Agent a, Literal l) throws Exception {
// if l is internal action/function
if (l instanceof InternalActionLiteral) {
- ((InternalActionLiteral)l).setIA(null);
+ ((InternalActionLiteral)l).setIA(null); // reset the IA in the literal, the IA there will be updated next getIA call
}
if (l instanceof ArithFunctionTerm) {
((ArithFunctionTerm)l).setAgent(a);
Modified: trunk/src/jason/asSyntax/InternalActionLiteral.java
===================================================================
--- trunk/src/jason/asSyntax/InternalActionLiteral.java 2011-04-12 18:47:14 UTC (rev 1640)
+++ trunk/src/jason/asSyntax/InternalActionLiteral.java 2011-04-13 19:52:04 UTC (rev 1641)
@@ -37,7 +37,7 @@
/**
- A particular type of literal used to represent internal actions (has a "." in the functor).
+ A particular type of literal used to represent internal actions (which has a "." in the functor).
@navassoc - ia - InternalAction
@@ -47,7 +47,7 @@
private static final long serialVersionUID = 1L;
private static Logger logger = Logger.getLogger(InternalActionLiteral.class.getName());
- private InternalAction ia = null; // reference to the object that implements the internal action
+ private InternalAction ia = null; // reference to the object that implements the internal action, stored here to speed up the process of looking for the IA class inside the agent
public InternalActionLiteral(String functor) {
super(functor);
Modified: trunk/src/jason/asSyntax/Literal.java
===================================================================
--- trunk/src/jason/asSyntax/Literal.java 2011-04-12 18:47:14 UTC (rev 1640)
+++ trunk/src/jason/asSyntax/Literal.java 2011-04-13 19:52:04 UTC (rev 1641)
@@ -259,7 +259,7 @@
if (il == null) // no relevant bels
return LogExpr.EMPTY_UNIF_LIST.iterator();
- final AgArch arch = (ag == null ? null : ag.getTS().getUserAgArch());
+ final AgArch arch = (ag != null && ag.getTS() != null ? ag.getTS().getUserAgArch() : null);
final int nbAnnots = (hasAnnot() && getAnnots().getTail() == null ? getAnnots().size() : 0); // if annots contains a tail (as in p[A|R]), do not backtrack on annots
return new Iterator<Unifier>() {
Modified: trunk/src/test/TSTest.java
===================================================================
--- trunk/src/test/TSTest.java 2011-04-12 18:47:14 UTC (rev 1640)
+++ trunk/src/test/TSTest.java 2011-04-13 19:52:04 UTC (rev 1641)
@@ -127,21 +127,19 @@
public void testAgentClone() throws Exception {
Agent a = new Agent();
- new TransitionSystem(a, new Circumstance(), new Settings(), new AgArch()); // just to have a default value for ts
- //a.parseAS(new File());
a.initAg("examples/auction/ag3.asl");
String p1 = a.getPL().toString();
String b1 = a.getBB().toString();
- InternalAction ia1 = ((InternalActionLiteral)a.getPL().get("prop_alliance").getBody().getBodyTerm()).getIA(null);
+ InternalAction ia1 = ((InternalActionLiteral)a.getPL().get("prop_alliance").getBody().getBodyTerm()).getIA(a);
assertTrue(ia1 != null);
// get the arith expr (B+C) from the plan
Structure send1 = (Structure)a.getPL().get("palliance").getBody().getBodyNext().getBodyNext().getBodyTerm();
ArithFunctionTerm add1 = (ArithFunctionTerm)((Structure)send1.getTerm(2)).getTerm(1);
assertEquals("(B+C)", add1.toString());
- // the agent is null here because it is a arith expr
- assertEquals(null, add1.getAgent());
+ // the agent is null here because it is an arith expr
+ //assertEquals(null, add1.getAgent());
a = a.clone(new AgArch());
assertEquals(p1, a.getPL().toString());
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2011-06-09 20:19:29
|
Revision: 1648
http://jason.svn.sourceforge.net/jason/?rev=1648&view=rev
Author: jomifred
Date: 2011-06-09 20:19:22 +0000 (Thu, 09 Jun 2011)
Log Message:
-----------
include PE (pending events) in C
also consider this new structure in the concerned internal actions (suspend, resumo, drop*, ...)
Modified Paths:
--------------
trunk/src/jason/asSemantics/Circumstance.java
trunk/src/jason/stdlib/drop_all_desires.java
trunk/src/jason/stdlib/drop_all_events.java
trunk/src/jason/stdlib/drop_all_intentions.java
trunk/src/jason/stdlib/drop_desire.java
trunk/src/jason/stdlib/drop_intention.java
trunk/src/jason/stdlib/intend.java
trunk/src/jason/stdlib/resume.java
trunk/src/jason/stdlib/succeed_goal.java
trunk/src/jason/stdlib/suspend.java
trunk/src/xml/agInspection.xsl
Modified: trunk/src/jason/asSemantics/Circumstance.java
===================================================================
--- trunk/src/jason/asSemantics/Circumstance.java 2011-06-09 18:24:37 UTC (rev 1647)
+++ trunk/src/jason/asSemantics/Circumstance.java 2011-06-09 20:19:22 UTC (rev 1648)
@@ -64,6 +64,7 @@
private List<ActionExec> FA; // Feedback actions, those that are already executed
private Map<String, Intention> PI; // pending intentions, intentions suspended by any other reason
+ private Map<String, Event> PE; // pending events, events suspended by .suspend
private List<CircumstanceListener> listeners = new CopyOnWriteArrayList<CircumstanceListener>();
@@ -80,6 +81,7 @@
MB = new LinkedList<Message>();
PA = new ConcurrentHashMap<Integer, ActionExec>();
PI = new ConcurrentHashMap<String, Intention>();
+ PE = new ConcurrentHashMap<String, Event>();
FA = new ArrayList<ActionExec>();
}
@@ -352,6 +354,41 @@
return false;
}
+ /** pending events */
+
+ public Map<String, Event> getPendingEvents() {
+ return PE;
+ }
+
+ public boolean hasPendingEvent() {
+ return PE != null && PE.size() > 0;
+ }
+
+ public void clearPendingEvents() {
+ // notify listeners
+ if (listeners != null)
+ for (CircumstanceListener el : listeners)
+ for (Event e: PE.values())
+ if (e.getIntention() != null)
+ el.intentionDropped(e.getIntention());
+
+ PE.clear();
+ }
+
+ public void addPendingEvent(String id, Event e) {
+ PE.put(id, e);
+
+ if (listeners != null && e.getIntention() != null)
+ for (CircumstanceListener el : listeners)
+ el.intentionSuspended(e.getIntention(), id);
+ }
+
+ public Event removePendingEvent(String pendingId) {
+ return PE.remove(pendingId);
+ }
+
+ /** actions */
+
public ActionExec getAction() {
return A;
}
@@ -500,6 +537,9 @@
for (String k: this.PI.keySet()) {
c.PI.put(k, (Intention)PI.get(k).clone());
}
+ for (String k: this.PE.keySet()) {
+ c.PE.put(k, (Event)PE.get(k).clone());
+ }
for (ActionExec ae: FA) {
c.FA.add((ActionExec)ae.clone());
}
@@ -508,19 +548,16 @@
/** get the agent circumstance as XML */
- @SuppressWarnings("unchecked")
public Element getAsDOM(Document document) {
Element c = (Element) document.createElement("circumstance");
Element e;
- Iterator i;
// MB
if (getMailBox() != null && !getMailBox().isEmpty()) {
Element ms = (Element) document.createElement("mailbox");
- i = getMailBox().iterator();
- while (i.hasNext()) {
+ for (Message m: getMailBox()) {
e = (Element) document.createElement("message");
- e.appendChild(document.createTextNode(i.next().toString()));
+ e.appendChild(document.createTextNode(m.toString()));
ms.appendChild(e);
}
c.appendChild(ms);
@@ -530,10 +567,8 @@
Element events = (Element) document.createElement("events");
boolean add = false;
if (E != null && !E.isEmpty()) {
- i = E.iterator();
- while (i.hasNext()) {
+ for (Event evt: E) {
add = true;
- Event evt = (Event) i.next();
e = evt.getAsDOM(document);
events.appendChild(e);
}
@@ -544,6 +579,14 @@
e.setAttribute("selected", "true");
events.appendChild(e);
}
+ if (hasPendingEvent()) {
+ for (String k: PE.keySet()) {
+ add = true;
+ e = PE.get(k).getAsDOM(document);
+ e.setAttribute("pending", k);
+ events.appendChild(e);
+ }
+ }
if (add) {
c.appendChild(events);
}
@@ -576,9 +619,7 @@
}
if (getRelevantPlans() != null && !getRelevantPlans().isEmpty()) {
- i = getRelevantPlans().iterator();
- while (i.hasNext()) {
- Option o = (Option) i.next();
+ for (Option o: getRelevantPlans()) {
if (!alreadyIn.contains(o)) {
alreadyIn.add(o);
e = o.getAsDOM(document);
@@ -631,7 +672,7 @@
}
Element acts = (Element) document.createElement("actions");
- alreadyIn = new ArrayList();
+ alreadyIn = new ArrayList<Object>();
// action
if (getAction() != null) {
@@ -664,9 +705,7 @@
// FA
if (hasFeedbackAction()) {
- i = getFeedbackActions().iterator();
- while (i.hasNext()) {
- ActionExec o = (ActionExec) i.next();
+ for (ActionExec o: getFeedbackActions()) {
if (!alreadyIn.contains(o)) {
alreadyIn.add(o);
e = o.getAsDOM(document);
Modified: trunk/src/jason/stdlib/drop_all_desires.java
===================================================================
--- trunk/src/jason/stdlib/drop_all_desires.java 2011-06-09 18:24:37 UTC (rev 1647)
+++ trunk/src/jason/stdlib/drop_all_desires.java 2011-06-09 20:19:22 UTC (rev 1648)
@@ -65,6 +65,7 @@
public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception {
super.execute(ts, un, args);
ts.getC().clearEvents();
+ ts.getC().clearPendingEvents();
return true;
}
}
Modified: trunk/src/jason/stdlib/drop_all_events.java
===================================================================
--- trunk/src/jason/stdlib/drop_all_events.java 2011-06-09 18:24:37 UTC (rev 1647)
+++ trunk/src/jason/stdlib/drop_all_events.java 2011-06-09 20:19:22 UTC (rev 1648)
@@ -72,6 +72,7 @@
public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception {
checkArguments(args);
ts.getC().clearEvents();
+ ts.getC().clearPendingEvents();
return true;
}
}
Modified: trunk/src/jason/stdlib/drop_all_intentions.java
===================================================================
--- trunk/src/jason/stdlib/drop_all_intentions.java 2011-06-09 18:24:37 UTC (rev 1647)
+++ trunk/src/jason/stdlib/drop_all_intentions.java 2011-06-09 20:19:22 UTC (rev 1648)
@@ -27,7 +27,6 @@
import jason.asSemantics.Circumstance;
import jason.asSemantics.DefaultInternalAction;
import jason.asSemantics.Event;
-import jason.asSemantics.Intention;
import jason.asSemantics.TransitionSystem;
import jason.asSemantics.Unifier;
import jason.asSyntax.Term;
@@ -81,12 +80,19 @@
// drop intentions in E
for (Event e: C.getEvents()) {
- // it is not an external event
- if (e.getIntention() != Intention.EmptyInt) {
+ if (e.isInternal()) {
C.removeEvent(e);
}
}
+ // drop intentions in PE
+ for (String ek: C.getPendingEvents().keySet()) {
+ Event e = C.getPendingEvents().get(ek);
+ if (e.isInternal()) {
+ C.removePendingEvent(ek);
+ }
+ }
+
// cancel future events generated by .at
at atia = (at)ts.getAg().getIA(at.atAtom);
atia.cancelAts();
Modified: trunk/src/jason/stdlib/drop_desire.java
===================================================================
--- trunk/src/jason/stdlib/drop_desire.java 2011-06-09 18:24:37 UTC (rev 1647)
+++ trunk/src/jason/stdlib/drop_desire.java 2011-06-09 20:19:22 UTC (rev 1648)
@@ -83,17 +83,25 @@
public void dropEvt(Circumstance C, Literal l, Unifier un) {
Trigger te = new Trigger(TEOperator.add, TEType.achieve, l);
- Iterator<Event> ie = C.getEvents().iterator();
+
+ // search in E
+ dropEvt(te, un, C.getEvents().iterator());
+
+ // search in PE (only the event need to be checked, the related intention is handeled by dropInt)
+ dropEvt(te, un, C.getPendingEvents().values().iterator());
+ }
+
+ private static void dropEvt(Trigger te, Unifier un, Iterator<Event> ie) {
while (ie.hasNext()) {
Event ei = ie.next();
Trigger t = ei.getTrigger();
if (ei.getIntention() != Intention.EmptyInt) { // since the unifier of the intention will not be used, apply it to the event before comparing to the event to be dropped
- t = (Trigger) t.clone();
+ t = t.clone();
t.apply(ei.getIntention().peek().getUnif());
}
if (un.clone().unifiesNoUndo(te, t)) {
ie.remove();
}
}
- }
+ }
}
Modified: trunk/src/jason/stdlib/drop_intention.java
===================================================================
--- trunk/src/jason/stdlib/drop_intention.java 2011-06-09 18:24:37 UTC (rev 1647)
+++ trunk/src/jason/stdlib/drop_intention.java 2011-06-09 20:19:22 UTC (rev 1648)
@@ -90,7 +90,7 @@
Trigger g = new Trigger(TEOperator.add, TEType.achieve, l);
- // intention may be suspended in E
+ // intention may be suspended in E or PE
for (Event e: C.getEvents()) {
Intention i = e.getIntention();
if (i != null && i.hasTrigger(g, un)) {
@@ -98,6 +98,13 @@
un = bak.clone();
}
}
+ for (String k: C.getPendingEvents().keySet()) {
+ Intention i = C.getPendingEvents().get(k).getIntention();
+ if (i != null && i.hasTrigger(g, un)) {
+ C.removePendingEvent(k);
+ un = bak.clone();
+ }
+ }
// intention may be suspended in PA! (in the new semantics)
for (ActionExec a: C.getPendingActions().values()) {
Modified: trunk/src/jason/stdlib/intend.java
===================================================================
--- trunk/src/jason/stdlib/intend.java 2011-06-09 18:24:37 UTC (rev 1647)
+++ trunk/src/jason/stdlib/intend.java 2011-06-09 20:19:22 UTC (rev 1648)
@@ -104,11 +104,17 @@
return true;
}
- // intention may be suspended in E
+ // intention may be in E
for (Event evt : C.getEvents()) {
if (evt.getIntention() != null && evt.getIntention().hasTrigger(g, un))
return true;
}
+
+ // intention may be suspended in PE
+ for (Event evt : C.getPendingEvents().values()) {
+ if (evt.getIntention() != null && evt.getIntention().hasTrigger(g, un))
+ return true;
+ }
// intention may be suspended in PA! (in the new semantics)
if (C.hasPendingAction()) {
Modified: trunk/src/jason/stdlib/resume.java
===================================================================
--- trunk/src/jason/stdlib/resume.java 2011-06-09 18:24:37 UTC (rev 1647)
+++ trunk/src/jason/stdlib/resume.java 2011-06-09 20:19:22 UTC (rev 1648)
@@ -26,6 +26,7 @@
import jason.JasonException;
import jason.asSemantics.Circumstance;
import jason.asSemantics.DefaultInternalAction;
+import jason.asSemantics.Event;
import jason.asSemantics.Intention;
import jason.asSemantics.TransitionSystem;
import jason.asSemantics.Unifier;
@@ -81,6 +82,7 @@
Trigger g = new Trigger(TEOperator.add, TEType.achieve, (Literal)args[0]);
Circumstance C = ts.getC();
+ // Search the goal in PI
Iterator<String> ik = C.getPendingIntentions().keySet().iterator();
while (ik.hasNext()) {
String k = ik.next();
@@ -100,6 +102,22 @@
}
}
}
+
+ // Search the goal in PE
+ ik = C.getPendingEvents().keySet().iterator();
+ while (ik.hasNext()) {
+ String k = ik.next();
+ if (k.startsWith(suspend.SUSPENDED_INT)) {
+ Event e = C.getPendingEvents().get(k);
+ Intention i = e.getIntention();
+ if (un.unifies(g, e.getTrigger()) || (i != null && i.hasTrigger(g, un))) {
+ ik.remove();
+ C.addEvent(e);
+ if (i != null)
+ i.setSuspended(false);
+ }
+ }
+ }
return true;
}
Modified: trunk/src/jason/stdlib/succeed_goal.java
===================================================================
--- trunk/src/jason/stdlib/succeed_goal.java 2011-06-09 18:24:37 UTC (rev 1647)
+++ trunk/src/jason/stdlib/succeed_goal.java 2011-06-09 20:19:22 UTC (rev 1648)
@@ -110,8 +110,12 @@
for (Event e: C.getEvents()) {
// test in the intention
Intention i = e.getIntention();
- if (dropIntention(i, g, ts, un) > 1) {
+ int r = dropIntention(i, g, ts, un);
+ if (r > 0) {
C.removeEvent(e);
+ if (r == 1) {
+ C.resumeIntention(i);
+ }
un = bak.clone();
} else {
// test in the event
@@ -120,13 +124,39 @@
t = t.clone();
t.apply(i.peek().getUnif());
}
- if (un.unifies(t, g)) {
+ if (un.unifies(g, t)) {
dropInEvent(ts,e,i);
un = bak.clone();
}
}
}
+ // dropping G in Pending Events
+ for (String ek: C.getPendingEvents().keySet()) {
+ // test in the intention
+ Event e = C.getPendingEvents().get(ek);
+ Intention i = e.getIntention();
+ int r = dropIntention(i, g, ts, un);
+ if (r > 0) {
+ C.removePendingEvent(ek);
+ if (r == 1) {
+ C.resumeIntention(i);
+ }
+ un = bak.clone();
+ } else {
+ // test in the event
+ Trigger t = e.getTrigger();
+ if (i != Intention.EmptyInt && i.size() > 0) {
+ t = t.clone();
+ t.apply(i.peek().getUnif());
+ }
+ if (un.unifies(g, t)) {
+ dropInEvent(ts,e,i);
+ un = bak.clone();
+ }
+ }
+ }
+
// dropping from Pending Actions
for (ActionExec a: C.getPendingActions().values()) {
Intention i = a.getIntention();
Modified: trunk/src/jason/stdlib/suspend.java
===================================================================
--- trunk/src/jason/stdlib/suspend.java 2011-06-09 18:24:37 UTC (rev 1647)
+++ trunk/src/jason/stdlib/suspend.java 2011-06-09 20:19:22 UTC (rev 1648)
@@ -28,15 +28,10 @@
import jason.asSemantics.Circumstance;
import jason.asSemantics.DefaultInternalAction;
import jason.asSemantics.Event;
-import jason.asSemantics.IntendedMeans;
import jason.asSemantics.Intention;
-import jason.asSemantics.Option;
import jason.asSemantics.TransitionSystem;
import jason.asSemantics.Unifier;
import jason.asSyntax.Literal;
-import jason.asSyntax.Plan;
-import jason.asSyntax.PlanBody.BodyType;
-import jason.asSyntax.PlanBodyImpl;
import jason.asSyntax.Term;
import jason.asSyntax.Trigger;
import jason.asSyntax.Trigger.TEOperator;
@@ -147,6 +142,14 @@
// suspending G in Events
for (Event e: C.getEvents()) {
i = e.getIntention();
+ if (un.unifies(g, e.getTrigger()) || (i != null && i.hasTrigger(g, un))) {
+ C.removeEvent(e);
+ C.addPendingEvent(k, e);
+ if (i != null)
+ i.setSuspended(true);
+ }
+
+ /*
if ( i != null &&
(i.hasTrigger(g, un) || // the goal is in the i's stack of IM
un.unifies(g, e.getTrigger()) // the goal is the trigger of the event
@@ -169,7 +172,10 @@
C.removeEvent(e);
C.addPendingIntention(k, i);
}
+ */
}
+
+ // TODO: consider the case of suspending something that is already suspended.
return true;
}
Modified: trunk/src/xml/agInspection.xsl
===================================================================
--- trunk/src/xml/agInspection.xsl 2011-06-09 18:24:37 UTC (rev 1647)
+++ trunk/src/xml/agInspection.xsl 2011-06-09 20:19:22 UTC (rev 1648)
@@ -196,6 +196,7 @@
<xsl:if test="@selected='true'">
<b>X</b>
</xsl:if>
+ <xsl:value-of select="@pending" />
</td>
<td valign="top" style="{$td-style}">
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2012-03-01 18:16:41
|
Revision: 1674
http://jason.svn.sourceforge.net/jason/?rev=1674&view=rev
Author: jomifred
Date: 2012-03-01 18:16:35 +0000 (Thu, 01 Mar 2012)
Log Message:
-----------
initial implementation of cyclic terms
Modified Paths:
--------------
trunk/src/jason/asSemantics/Unifier.java
trunk/src/jason/asSyntax/DefaultTerm.java
trunk/src/jason/asSyntax/Pred.java
trunk/src/jason/asSyntax/Rule.java
trunk/src/jason/asSyntax/Structure.java
trunk/src/jason/asSyntax/Term.java
trunk/src/jason/asSyntax/VarTerm.java
trunk/src/test/ListTermTest.java
trunk/src/test/RuleTest.java
trunk/src/test/TermTest.java
trunk/src/test/VarTermTest.java
trunk/src/xml/agInspection.xsl
Added Paths:
-----------
trunk/src/jason/asSyntax/CyclicTerm.java
Modified: trunk/src/jason/asSemantics/Unifier.java
===================================================================
--- trunk/src/jason/asSemantics/Unifier.java 2011-12-15 22:15:25 UTC (rev 1673)
+++ trunk/src/jason/asSemantics/Unifier.java 2012-03-01 18:16:35 UTC (rev 1674)
@@ -24,6 +24,7 @@
package jason.asSemantics;
import jason.asSyntax.ASSyntax;
+import jason.asSyntax.CyclicTerm;
import jason.asSyntax.ListTerm;
import jason.asSyntax.ListTermImpl;
import jason.asSyntax.Literal;
@@ -69,6 +70,10 @@
return get(new VarTerm(var));
}
+ public Term remove(VarTerm v) {
+ return function.remove(v);
+ }
+
/**
* gets the value for a Var, if it is unified with another var, gets this
* other's value
@@ -132,6 +137,11 @@
}
}
+ if (t1g.isCyclicTerm()) // reintroduce cycles in the unifier
+ bind(t1g.getCyclicVar(), t1g);
+ if (t2g.isCyclicTerm())
+ bind(t2g.getCyclicVar(), t2g);
+
// unify as Term
boolean ok = unifyTerms(t1g, t2g);
@@ -161,6 +171,12 @@
}
}
}
+
+ /*if (t1g.isCyclicTerm())
+ remove(t1g.getCyclicVar());
+ if (t2g.isCyclicTerm())
+ remove(t2g.getCyclicVar());
+ */
return ok;
}
@@ -274,7 +290,7 @@
} // if they are the same (comp == 0), do not bind
}
- private void bind(VarTerm vt, Term vl) {
+ public void bind(VarTerm vt, Term vl) {
function.put((VarTerm) vt.clone(), vl);
}
@@ -305,8 +321,15 @@
/** add all unifications from u */
public void compose(Unifier u) {
- for (VarTerm k: u.function.keySet())
- function.put( (VarTerm)k.clone(), u.function.get(k).clone());
+ for (VarTerm k: u.function.keySet()) {
+ Term current = get(k);
+ Term kValue = u.function.get(k);
+ if (current != null && (current.isVar() || kValue.isVar())) { // current unifier has the new var
+ unifies(kValue, current);
+ } else {
+ function.put( (VarTerm)k.clone(), kValue.clone());
+ }
+ }
}
@SuppressWarnings("unchecked")
Added: trunk/src/jason/asSyntax/CyclicTerm.java
===================================================================
--- trunk/src/jason/asSyntax/CyclicTerm.java (rev 0)
+++ trunk/src/jason/asSyntax/CyclicTerm.java 2012-03-01 18:16:35 UTC (rev 1674)
@@ -0,0 +1,106 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2003 Rafael H. Bordini, Jomi F. Hubner, et al.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// To contact the authors:
+// http://www.inf.ufrgs.br/~bordini
+// http://www.das.ufsc.br/~jomi
+//
+//----------------------------------------------------------------------------
+
+package jason.asSyntax;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import jason.asSemantics.Unifier;
+
+
+
+/**
+ * A term with recursion (cyclic), created by code like X = f(X).
+ */
+public class CyclicTerm extends LiteralImpl {
+
+ private static final long serialVersionUID = 1L;
+
+ private VarTerm cyclicVar = null;
+
+ /** creates a positive literal */
+ public CyclicTerm(Literal t, VarTerm v) {
+ super(t);
+ cyclicVar = v;
+ }
+
+ public VarTerm getCyclicVar() {
+ return cyclicVar;
+ }
+
+ @Override
+ public boolean isCyclicTerm() {
+ return true;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (o == null) return false;
+ if (o == this) return true;
+
+ if (o instanceof CyclicTerm) {
+ final CyclicTerm l = (CyclicTerm) o;
+ return super.equals(l);
+ }
+ return false;
+ }
+
+ @Override
+ public Literal makeVarsAnnon(Unifier u) {
+ super.makeVarsAnnon(u);
+ VarTerm v = u.deref(cyclicVar);
+ if (v != null)
+ cyclicVar = v;
+ return this;
+ }
+
+ @Override
+ public boolean apply(Unifier u) {
+ Term v = u.remove(cyclicVar);
+ boolean b = super.apply(u);
+ if (v != null)
+ u.bind(cyclicVar, v);
+ return b;
+ }
+
+ public Term clone() {
+ return new CyclicTerm(this, (VarTerm)cyclicVar.copy());
+ }
+
+ @Override
+ protected int calcHashCode() {
+ return super.calcHashCode() + cyclicVar.calcHashCode();
+ }
+
+ public String toString() {
+ return "..."+super.toString()+"/"+cyclicVar;
+ }
+
+ @Override
+ public Element getAsDOM(Document document) {
+ Element u = super.getAsDOM(document);
+ u.setAttribute("cyclic-var", cyclicVar.toString());
+ return u;
+ }
+}
Modified: trunk/src/jason/asSyntax/DefaultTerm.java
===================================================================
--- trunk/src/jason/asSyntax/DefaultTerm.java 2011-12-15 22:15:25 UTC (rev 1673)
+++ trunk/src/jason/asSyntax/DefaultTerm.java 2012-03-01 18:16:35 UTC (rev 1674)
@@ -76,7 +76,10 @@
public boolean isAtom() { return false; }
public boolean isPlanBody() { return false; }
public boolean isGround() { return true; }
- public boolean hasVar(VarTerm t) { return false; }
+ public boolean isCyclicTerm() { return false; }
+ public VarTerm getCyclicVar() { return null; }
+
+ public boolean hasVar(VarTerm t, Unifier u) { return false; }
public void countVars(Map<VarTerm, Integer> c) {}
Modified: trunk/src/jason/asSyntax/Pred.java
===================================================================
--- trunk/src/jason/asSyntax/Pred.java 2011-12-15 22:15:25 UTC (rev 1673)
+++ trunk/src/jason/asSyntax/Pred.java 2012-03-01 18:16:35 UTC (rev 1674)
@@ -217,12 +217,12 @@
}
@Override
- public boolean hasVar(VarTerm t) {
- if (super.hasVar(t))
+ public boolean hasVar(VarTerm t, Unifier u) {
+ if (super.hasVar(t, u))
return true;
if (annots != null)
for (Term v: annots)
- if (v.hasVar(t))
+ if (v.hasVar(t, u))
return true;
return false;
}
Modified: trunk/src/jason/asSyntax/Rule.java
===================================================================
--- trunk/src/jason/asSyntax/Rule.java 2011-12-15 22:15:25 UTC (rev 1673)
+++ trunk/src/jason/asSyntax/Rule.java 2012-03-01 18:16:35 UTC (rev 1674)
@@ -102,9 +102,9 @@
}
@Override
- public boolean hasVar(VarTerm t) {
- if (super.hasVar(t)) return true;
- return body.hasVar(t);
+ public boolean hasVar(VarTerm t, Unifier u) {
+ if (super.hasVar(t, u)) return true;
+ return body.hasVar(t, u);
}
public void countVars(Map<VarTerm, Integer> c) {
Modified: trunk/src/jason/asSyntax/Structure.java
===================================================================
--- trunk/src/jason/asSyntax/Structure.java 2011-12-15 22:15:25 UTC (rev 1673)
+++ trunk/src/jason/asSyntax/Structure.java 2012-03-01 18:16:35 UTC (rev 1674)
@@ -344,10 +344,10 @@
}
@Override
- public boolean hasVar(VarTerm t) {
+ public boolean hasVar(VarTerm t, Unifier u) {
final int size = getArity();
for (int i=0; i<size; i++)
- if (getTerm(i).hasVar(t))
+ if (getTerm(i).hasVar(t, u))
return true;
return false;
}
Modified: trunk/src/jason/asSyntax/Term.java
===================================================================
--- trunk/src/jason/asSyntax/Term.java 2011-12-15 22:15:25 UTC (rev 1673)
+++ trunk/src/jason/asSyntax/Term.java 2012-03-01 18:16:35 UTC (rev 1674)
@@ -27,8 +27,11 @@
public boolean isStructure();
public boolean isAtom();
public boolean isPlanBody();
+ public boolean isCyclicTerm();
- public boolean hasVar(VarTerm t);
+ public boolean hasVar(VarTerm t, Unifier u);
+ public VarTerm getCyclicVar();
+
public void countVars(Map<VarTerm, Integer> c);
public Term clone();
Modified: trunk/src/jason/asSyntax/VarTerm.java
===================================================================
--- trunk/src/jason/asSyntax/VarTerm.java 2011-12-15 22:15:25 UTC (rev 1673)
+++ trunk/src/jason/asSyntax/VarTerm.java 2012-03-01 18:16:35 UTC (rev 1674)
@@ -150,15 +150,25 @@
if (value == null) {
Term vl = u.get(this);
//System.out.println("applying "+this+"="+vl+" un="+u);
- if (vl != null) { // && !(vl instanceof VarsCluster)) {
- if (!vl.hasVar(this)) {
- setValue(vl);
- value.apply(u); // in case t has var args
- return true;
- } else {
- logger.warning("Value of variable contains itself, variable "+super.getFunctor()+" "+super.getSrcInfo()+", value="+value);
- return false;
+ if (vl != null) {
+ if (vl.hasVar(this, u)) {
+ //logger.warning("The value of a variable contains itself, variable "+super.getFunctor()+" "+super.getSrcInfo()+", value="+vl+", unifier="+u);
+
+ u.remove(this); // remove this var to avoid loops
+ Term tempVl = vl.clone();
+ tempVl.apply(u);
+ u.bind(this, vl);
+
+ CyclicTerm ct = new CyclicTerm((Literal)tempVl, this);
+ Unifier renamedVars = new Unifier(); // remove "this" from the value to avoid loops in apply
+ ct.makeVarsAnnon(renamedVars);
+ renamedVars.remove(this);
+ u.compose(renamedVars);
+ vl = ct;
}
+ setValue(vl);
+ value.apply(u); // in case t has var args
+ return true;
}
} else {
return getValue().apply(u);
@@ -398,14 +408,42 @@
}
@Override
- public boolean hasVar(VarTerm t) {
- if (value == null)
- return equals(t);
+ public boolean isCyclicTerm() {
+ return value != null && value.isCyclicTerm();
+ }
+
+ @Override
+ public VarTerm getCyclicVar() {
+ if (value != null)
+ return value.getCyclicVar();
else
- return value.hasVar(t);
+ return super.getCyclicVar();
}
@Override
+ public boolean hasVar(VarTerm t, Unifier u) {
+ if (value != null)
+ return value.hasVar(t, u);
+ if (equals(t))
+ return true;
+
+ if (u != null) { // if the var has a value in the unifier, search in that value
+ Term vl = u.get(this);
+ if (vl != null) {
+ try {
+ u.remove(this); // remove this var from the unifier to avoid going to seach inside it again
+ return vl.hasVar(t, u);
+ } finally {
+ u.bind(this, vl);
+ }
+ }
+
+ }
+
+ return false;
+ }
+
+ @Override
public void countVars(Map<VarTerm, Integer> c) {
if (value == null) {
int n = c.containsKey(this) ? c.get(this) : 0;
Modified: trunk/src/test/ListTermTest.java
===================================================================
--- trunk/src/test/ListTermTest.java 2011-12-15 22:15:25 UTC (rev 1673)
+++ trunk/src/test/ListTermTest.java 2012-03-01 18:16:35 UTC (rev 1674)
@@ -185,12 +185,15 @@
VarTerm l6 = new VarTerm("L6");
u.unifies(l5, l6);
l6.apply(u);
+ assertEquals(l6.toString(), "[c,b,a,x,y]");
l6.concat(ListTermImpl.parseList("[d]"));
+ assertEquals(l6.toString(), "[c,b,a,x,y,d]");
ListTerm lf = ListTermImpl.parseList("[c,b,a,x,y,d]");
assertTrue(u.unifies(l6,lf));
lf = ListTermImpl.parseList("[c,b,a,x,y]");
+ l5.apply(u);
assertTrue(u.unifies(l5,lf));
ListTerm ll = lf.cloneLT();
Modified: trunk/src/test/RuleTest.java
===================================================================
--- trunk/src/test/RuleTest.java 2011-12-15 22:15:25 UTC (rev 1673)
+++ trunk/src/test/RuleTest.java 2012-03-01 18:16:35 UTC (rev 1674)
@@ -138,9 +138,9 @@
assertEquals(1, r.getSingletonVars().size());
assertEquals("[R]", r.getSingletonVars().toString());
- assertTrue(r.hasVar(new VarTerm("X")));
- assertTrue(r.hasVar(new VarTerm("W")));
- assertFalse(r.hasVar(new VarTerm("III")));
+ assertTrue(r.hasVar(new VarTerm("X"), null));
+ assertTrue(r.hasVar(new VarTerm("W"), null));
+ assertFalse(r.hasVar(new VarTerm("III"), null));
}
Modified: trunk/src/test/TermTest.java
===================================================================
--- trunk/src/test/TermTest.java 2011-12-15 22:15:25 UTC (rev 1673)
+++ trunk/src/test/TermTest.java 2012-03-01 18:16:35 UTC (rev 1674)
@@ -872,10 +872,20 @@
public void testHasVar() throws ParseException {
Literal l = parseLiteral("a(Test,X,Y,b(g([V1,X,V2,V1]),c))[b,source(Y),B,kk(_),oo(oo(OO))]");
- assertTrue(l.hasVar(new VarTerm("X")));
- assertTrue(l.hasVar(new VarTerm("V2")));
- assertTrue(l.hasVar(new VarTerm("OO")));
- assertFalse(l.hasVar(new VarTerm("O")));
+ assertTrue(l.hasVar(new VarTerm("X"), null));
+ assertTrue(l.hasVar(new VarTerm("V2"), null));
+ assertTrue(l.hasVar(new VarTerm("OO"), null));
+ assertFalse(l.hasVar(new VarTerm("O"), null));
+
+ Unifier u = new Unifier();
+ u.unifies(parseTerm("X"), parseTerm("f(Y)"));
+ u.unifies(parseTerm("Y"), parseTerm("g(X)"));
+ u.unifies(parseTerm("T"), parseTerm("X"));
+ VarTerm t = new VarTerm("T");
+ assertFalse(t.hasVar(new VarTerm("X"), null));
+ assertTrue(t.hasVar(new VarTerm("X"), u));
+ assertFalse(t.hasVar(new VarTerm("Y"), null));
+ assertTrue(t.hasVar(new VarTerm("Y"), u));
}
public void testSingletonVars() {
@@ -974,4 +984,85 @@
assertTrue(variable.equals(term));
assertTrue(variable.equals(new ObjectTermImpl("test")));
}
+
+ public void testCyclicTerm1() throws ParseException {
+ Term t1 = parseTerm("f(f(g(X)))");
+ Term v1 = new VarTerm("X");
+ Unifier u = new Unifier();
+
+ assertTrue(u.unifies(t1, v1));
+
+ assertTrue(u.unifies(v1, parseTerm("f(f(g(f(f(g(_))))))")));
+ assertTrue(u.unifies(v1, parseTerm("f(f(g(f(f(g(f(f(g(_)))))))))")));
+ assertFalse(u.unifies(v1, parseTerm("f(f(g(f(f(g(f(g(_))))))))")));
+ assertFalse(u.unifies(v1, parseTerm("f(f(g(f(f(p(_))))))")));
+
+ assertTrue(v1.apply(u));
+ assertTrue(new Unifier().unifies(v1, parseTerm("f(f(g(f(f(g(_))))))")));
+ assertTrue(new Unifier().unifies(v1, parseTerm("f(f(g(f(f(g(f(f(g(_)))))))))")));
+ assertTrue(new Unifier().unifies(v1, parseTerm("f(f(g(f(f(g(f(f(_))))))))")));
+ assertFalse(new Unifier().unifies(v1, parseTerm("f(f(g(f(f(g(f(g(_))))))))")));
+ assertFalse(new Unifier().unifies(v1, parseTerm("f(_,_)")));
+ assertFalse(new Unifier().unifies(v1, parseTerm("f(f(g(f(f(p(K))))))")));
+
+ u = new Unifier();
+ assertTrue(u.unifies(v1, parseTerm("f(f(g(f(f(g(K))))))")));
+ assertTrue(u.get("K").isCyclicTerm());
+ VarTerm k = new VarTerm("K");
+ k.apply(u);
+ assertTrue(k.isCyclicTerm());
+
+ u = new Unifier();
+ assertTrue(u.unifies(v1, parseTerm("f(f(g(f(f(H)))))")));
+ VarTerm h = new VarTerm("H");
+ h.apply(u);
+ assertTrue(h.getTerm(0).isCyclicTerm());
+ }
+
+ public void testCyclicTerm2() throws ParseException {
+ Term t1 = parseTerm("f(f(g(X,H)))");
+ VarTerm v1 = new VarTerm("X");
+ Unifier u = new Unifier();
+
+ assertTrue(u.unifies(t1, v1));
+ assertTrue(u.unifies(v1, parseTerm("f(f(g(_,_)))")));
+ assertTrue(u.unifies(v1, parseTerm("f(f(g(f(f(g(_,_))),_)))")));
+
+ assertTrue(u.unifies(new VarTerm("H"), parseTerm("100")));
+ assertTrue(v1.apply(u));
+ assertTrue(v1.toString().indexOf("100") > 0);
+ }
+
+ public void testCyclicTerm3() throws ParseException {
+ Unifier u = new Unifier();
+
+ assertTrue(u.unifies(new VarTerm("Merge"), parseTerm("choice([Off,Fork])")));
+ assertTrue(u.unifies(new VarTerm("Off"), parseTerm("seq(tell(b,c,offer),seq(tell(c,b,counter),Merge))")));
+ assertTrue(u.unifies(new VarTerm("Fork"), parseTerm("fork(seq(tell(b,s,final),end),seq(tell(b,c,result),end))")));
+ assertTrue(u.unifies(new VarTerm("Glob"), parseTerm("seq(tell(s,b,item),Merge)")));
+
+ //assertTrue(u.unifies(new VarTerm("X"), parseTerm("f(Y)")));
+ //assertTrue(u.unifies(new VarTerm("Y"), parseTerm("g(X)")));
+
+ //System.out.println(u);
+ VarTerm m = new VarTerm("Glob");
+ m.apply(u);
+ assertTrue(m.getTerm(1).isCyclicTerm());
+ }
+
+ public void testCyclicTerm4() throws ParseException {
+ Unifier u = new Unifier();
+
+ assertTrue(u.unifies(new VarTerm("X"), parseTerm("f(Y)")));
+ assertTrue(u.unifies(new VarTerm("Y"), parseTerm("g(X)")));
+
+ //System.out.println(u);
+ VarTerm x = new VarTerm("X");
+ x.apply(u);
+ assertTrue(x.isCyclicTerm());
+ VarTerm y = new VarTerm("Y");
+ y.apply(u);
+ assertTrue(y.isCyclicTerm());
+ }
+
}
Modified: trunk/src/test/VarTermTest.java
===================================================================
--- trunk/src/test/VarTermTest.java 2011-12-15 22:15:25 UTC (rev 1673)
+++ trunk/src/test/VarTermTest.java 2012-03-01 18:16:35 UTC (rev 1674)
@@ -97,7 +97,7 @@
u.unifies(v1, lt); // L = [a,B,a(B)]
v1.apply(u);
ListTerm vlt = (ListTerm) v1.getValue();
- assertFalse(vlt.equals(lt)); // the apply in var should not change the orginal list
+ assertFalse(vlt.equals(lt)); // the apply in var should not change the original list
Iterator<Term> i = vlt.iterator();
i.next();
i.next();
Modified: trunk/src/xml/agInspection.xsl
===================================================================
--- trunk/src/xml/agInspection.xsl 2011-12-15 22:15:25 UTC (rev 1673)
+++ trunk/src/xml/agInspection.xsl 2012-03-01 18:16:35 UTC (rev 1674)
@@ -525,6 +525,9 @@
<xsl:if test="@negated = 'true'">
<b><xsl:text>~</xsl:text></b>
</xsl:if>
+ <xsl:if test="count(@cyclic-var) > 0">
+ <b><xsl:text>...</xsl:text></b>
+ </xsl:if>
<xsl:apply-templates />
</xsl:template>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2012-03-05 21:23:18
|
Revision: 1675
http://jason.svn.sourceforge.net/jason/?rev=1675&view=rev
Author: jomifred
Date: 2012-03-05 21:23:12 +0000 (Mon, 05 Mar 2012)
Log Message:
-----------
improvements in cycled terms
Modified Paths:
--------------
trunk/src/jason/asSemantics/Unifier.java
trunk/src/jason/asSyntax/Structure.java
trunk/src/jason/asSyntax/VarTerm.java
trunk/src/test/TermTest.java
Modified: trunk/src/jason/asSemantics/Unifier.java
===================================================================
--- trunk/src/jason/asSemantics/Unifier.java 2012-03-01 18:16:35 UTC (rev 1674)
+++ trunk/src/jason/asSemantics/Unifier.java 2012-03-05 21:23:12 UTC (rev 1675)
@@ -28,6 +28,7 @@
import jason.asSyntax.ListTerm;
import jason.asSyntax.ListTermImpl;
import jason.asSyntax.Literal;
+import jason.asSyntax.LiteralImpl;
import jason.asSyntax.Pred;
import jason.asSyntax.Structure;
import jason.asSyntax.Term;
@@ -137,10 +138,26 @@
}
}
- if (t1g.isCyclicTerm()) // reintroduce cycles in the unifier
- bind(t1g.getCyclicVar(), t1g);
- if (t2g.isCyclicTerm())
- bind(t2g.getCyclicVar(), t2g);
+ if (t1g.isCyclicTerm() && t2g.isCyclicTerm()) { // both are cycled terms
+ // unification of cyclic terms:
+ // remove the vars (to avoid loops) and test just the structure, then reintroduce the vars
+ VarTerm v1 = t1g.getCyclicVar();
+ VarTerm v2 = t2g.getCyclicVar();
+ remove(v1);
+ remove(v2);
+ try {
+ return unifiesNoUndo(new LiteralImpl((Literal)t1g), new LiteralImpl((Literal)t2g));
+ } finally {
+ function.put(v1, t1g);
+ function.put(v2, t1g);
+ }
+
+ } else {
+ if (t1g.isCyclicTerm() && get(t1g.getCyclicVar()) == null) // reintroduce cycles in the unifier
+ function.put(t1g.getCyclicVar(), t1g);
+ if (t2g.isCyclicTerm() && get(t2g.getCyclicVar()) == null)
+ function.put(t2g.getCyclicVar(), t2g);
+ }
// unify as Term
boolean ok = unifyTerms(t1g, t2g);
@@ -291,6 +308,10 @@
}
public void bind(VarTerm vt, Term vl) {
+ if (!vl.isCyclicTerm() && vl.hasVar(vt, this)) {
+ vl = new CyclicTerm((Literal)vl, (VarTerm)vt.clone());
+ //System.out.println("changing "+vt+" <- "+vl+" in "+this);
+ }
function.put((VarTerm) vt.clone(), vl);
}
Modified: trunk/src/jason/asSyntax/Structure.java
===================================================================
--- trunk/src/jason/asSyntax/Structure.java 2012-03-01 18:16:35 UTC (rev 1674)
+++ trunk/src/jason/asSyntax/Structure.java 2012-03-05 21:23:12 UTC (rev 1675)
@@ -295,7 +295,7 @@
// if the variable hasn't been renamed given the input unifier, then rename it.
if (deref.equals(vt)) {
// forget the name
- VarTerm var = new UnnamedVar("_" + UnnamedVar.getUniqueId() + t);
+ VarTerm var = new UnnamedVar(); //("_" + UnnamedVar.getUniqueId() + t);
// if deref has annotations then we need to replicate these in the new variable
if (deref.hasAnnot()) {
var.setAnnots(deref.getAnnots().cloneLT());
Modified: trunk/src/jason/asSyntax/VarTerm.java
===================================================================
--- trunk/src/jason/asSyntax/VarTerm.java 2012-03-01 18:16:35 UTC (rev 1674)
+++ trunk/src/jason/asSyntax/VarTerm.java 2012-03-05 21:23:12 UTC (rev 1675)
@@ -151,10 +151,10 @@
Term vl = u.get(this);
//System.out.println("applying "+this+"="+vl+" un="+u);
if (vl != null) {
- if (vl.hasVar(this, u)) {
+ if (!vl.isCyclicTerm() && vl.hasVar(this, u)) {
//logger.warning("The value of a variable contains itself, variable "+super.getFunctor()+" "+super.getSrcInfo()+", value="+vl+", unifier="+u);
- u.remove(this); // remove this var to avoid loops
+ u.remove(this); // remove this var to avoid loops in the apply below
Term tempVl = vl.clone();
tempVl.apply(u);
u.bind(this, vl);
Modified: trunk/src/test/TermTest.java
===================================================================
--- trunk/src/test/TermTest.java 2012-03-01 18:16:35 UTC (rev 1674)
+++ trunk/src/test/TermTest.java 2012-03-05 21:23:12 UTC (rev 1675)
@@ -1065,4 +1065,19 @@
assertTrue(y.isCyclicTerm());
}
+ public void testCyclicTerm5() throws ParseException {
+ Term t1 = parseTerm("f(f(g(X)))");
+ VarTerm v1 = new VarTerm("X");
+
+ Term t2 = parseTerm("f(f(g(Y)))");
+ VarTerm v2 = new VarTerm("Y");
+
+ Unifier u = new Unifier();
+
+ assertTrue(u.unifies(t1, v1));
+ assertTrue(u.get(v1).isCyclicTerm());
+ assertTrue(u.unifies(t2, v2));
+ assertTrue(new Unifier().unifies(t1, t2));
+ assertTrue(u.unifies(v1, v2));
+ }
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <xsp...@us...> - 2012-04-11 18:31:09
|
Revision: 1680
http://jason.svn.sourceforge.net/jason/?rev=1680&view=rev
Author: xsplyter
Date: 2012-04-11 18:30:58 +0000 (Wed, 11 Apr 2012)
Log Message:
-----------
Added CArtAgO artifact template
Removed artifact template
Modified Paths:
--------------
trunk/src/jason/asSyntax/parser/as2j.java
trunk/src/jason/asSyntax/parser/as2jTokenManager.java
trunk/src/jason/mas2j/parser/mas2jTokenManager.java
Added Paths:
-----------
trunk/src/templates/CArtAgOartifact
Removed Paths:
-------------
trunk/src/templates/artifact
Modified: trunk/src/jason/asSyntax/parser/as2j.java
===================================================================
--- trunk/src/jason/asSyntax/parser/as2j.java 2012-04-02 14:53:14 UTC (rev 1679)
+++ trunk/src/jason/asSyntax/parser/as2j.java 2012-04-11 18:30:58 UTC (rev 1680)
@@ -1575,11 +1575,6 @@
return false;
}
- final private boolean jj_3R_44() {
- if (jj_scan_token(40)) return true;
- return false;
- }
-
final private boolean jj_3R_52() {
Token xsp;
xsp = jj_scanpos;
@@ -1588,6 +1583,11 @@
return false;
}
+ final private boolean jj_3R_44() {
+ if (jj_scan_token(40)) return true;
+ return false;
+ }
+
final private boolean jj_3R_85() {
if (jj_3R_91()) return true;
return false;
@@ -1710,13 +1710,13 @@
return false;
}
- final private boolean jj_3R_41() {
- if (jj_scan_token(34)) return true;
+ final private boolean jj_3R_82() {
+ if (jj_3R_80()) return true;
return false;
}
- final private boolean jj_3R_82() {
- if (jj_3R_80()) return true;
+ final private boolean jj_3R_41() {
+ if (jj_scan_token(34)) return true;
return false;
}
@@ -1726,6 +1726,16 @@
return false;
}
+ final private boolean jj_3R_75() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_82()) {
+ jj_scanpos = xsp;
+ if (jj_3R_83()) return true;
+ }
+ return false;
+ }
+
final private boolean jj_3_2() {
Token xsp;
xsp = jj_scanpos;
@@ -1738,16 +1748,6 @@
return false;
}
- final private boolean jj_3R_75() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_82()) {
- jj_scanpos = xsp;
- if (jj_3R_83()) return true;
- }
- return false;
- }
-
final private boolean jj_3R_37() {
if (jj_scan_token(30)) return true;
Token xsp;
@@ -1854,13 +1854,13 @@
return false;
}
- final private boolean jj_3R_39() {
- if (jj_scan_token(30)) return true;
+ final private boolean jj_3R_74() {
+ if (jj_3R_37()) return true;
return false;
}
- final private boolean jj_3R_74() {
- if (jj_3R_37()) return true;
+ final private boolean jj_3R_39() {
+ if (jj_scan_token(30)) return true;
return false;
}
@@ -1999,13 +1999,13 @@
return false;
}
- final private boolean jj_3R_26() {
- if (jj_3R_42()) return true;
+ final private boolean jj_3R_36() {
+ if (jj_3R_48()) return true;
return false;
}
- final private boolean jj_3R_36() {
- if (jj_3R_48()) return true;
+ final private boolean jj_3R_26() {
+ if (jj_3R_42()) return true;
return false;
}
@@ -2029,13 +2029,13 @@
return false;
}
- final private boolean jj_3R_24() {
- if (jj_3R_40()) return true;
+ final private boolean jj_3R_21() {
+ if (jj_3R_37()) return true;
return false;
}
- final private boolean jj_3R_21() {
- if (jj_3R_37()) return true;
+ final private boolean jj_3R_24() {
+ if (jj_3R_40()) return true;
return false;
}
@@ -2049,17 +2049,17 @@
return false;
}
- final private boolean jj_3R_23() {
- if (jj_3R_39()) return true;
- return false;
- }
-
final private boolean jj_3R_20() {
if (jj_scan_token(42)) return true;
if (jj_3R_36()) return true;
return false;
}
+ final private boolean jj_3R_23() {
+ if (jj_3R_39()) return true;
+ return false;
+ }
+
final private boolean jj_3R_92() {
Token xsp;
xsp = jj_scanpos;
Modified: trunk/src/jason/asSyntax/parser/as2jTokenManager.java
===================================================================
--- trunk/src/jason/asSyntax/parser/as2jTokenManager.java 2012-04-02 14:53:14 UTC (rev 1679)
+++ trunk/src/jason/asSyntax/parser/as2jTokenManager.java 2012-04-11 18:30:58 UTC (rev 1680)
@@ -30,10 +30,10 @@
jjmatchedKind = 23;
return 43;
}
+ if ((active0 & 0x800000000000000L) != 0L)
+ return 14;
if ((active0 & 0x200000000L) != 0L)
return 44;
- if ((active0 & 0x800000000000000L) != 0L)
- return 14;
return -1;
case 1:
if ((active0 & 0x20000L) != 0L)
@@ -399,25 +399,19 @@
jjCheckNAddTwoStates(28, 29);
}
break;
- case 14:
- if (curChar == 42)
- jjCheckNAddTwoStates(20, 21);
- else if (curChar == 47)
- jjCheckNAddStates(0, 2);
- break;
case 0:
if ((0x3ff000000000000L & l) != 0L)
{
if (kind > 21)
kind = 21;
- jjCheckNAddStates(3, 7);
+ jjCheckNAddStates(0, 4);
}
else if (curChar == 46)
jjCheckNAddTwoStates(28, 32);
else if (curChar == 47)
- jjAddStates(8, 9);
+ jjAddStates(5, 6);
else if (curChar == 34)
- jjCheckNAddStates(10, 12);
+ jjCheckNAddStates(7, 9);
if ((0x3ff000000000000L & l) != 0L)
{
if (kind > 25)
@@ -434,13 +428,19 @@
else if (curChar == 46)
jjCheckNAdd(32);
break;
+ case 14:
+ if (curChar == 42)
+ jjCheckNAddTwoStates(20, 21);
+ else if (curChar == 47)
+ jjCheckNAddStates(10, 12);
+ break;
case 1:
if ((0xfffffffbffffdbffL & l) != 0L)
- jjCheckNAddStates(10, 12);
+ jjCheckNAddStates(7, 9);
break;
case 3:
if ((0x8400000000L & l) != 0L)
- jjCheckNAddStates(10, 12);
+ jjCheckNAddStates(7, 9);
break;
case 4:
if (curChar == 34 && kind > 22)
@@ -452,7 +452,7 @@
break;
case 6:
if ((0xff000000000000L & l) != 0L)
- jjCheckNAddStates(10, 12);
+ jjCheckNAddStates(7, 9);
break;
case 7:
if ((0xf000000000000L & l) != 0L)
@@ -475,11 +475,11 @@
break;
case 13:
if (curChar == 47)
- jjAddStates(8, 9);
+ jjAddStates(5, 6);
break;
case 15:
if ((0xffffffffffffdbffL & l) != 0L)
- jjCheckNAddStates(0, 2);
+ jjCheckNAddStates(10, 12);
break;
case 16:
if ((0x2400L & l) != 0L && kind > 5)
@@ -562,7 +562,7 @@
break;
if (kind > 21)
kind = 21;
- jjCheckNAddStates(3, 7);
+ jjCheckNAddStates(0, 4);
break;
case 36:
if ((0x3ff000000000000L & l) == 0L)
@@ -652,7 +652,7 @@
break;
case 1:
if ((0xffffffffefffffffL & l) != 0L)
- jjCheckNAddStates(10, 12);
+ jjCheckNAddStates(7, 9);
break;
case 2:
if (curChar == 92)
@@ -660,7 +660,7 @@
break;
case 3:
if ((0x14404410000000L & l) != 0L)
- jjCheckNAddStates(10, 12);
+ jjCheckNAddStates(7, 9);
break;
case 9:
if (curChar != 95)
@@ -685,7 +685,7 @@
kind = 26;
break;
case 15:
- jjAddStates(0, 2);
+ jjAddStates(10, 12);
break;
case 20:
jjCheckNAddTwoStates(20, 21);
@@ -737,11 +737,11 @@
{
case 1:
if ((jjbitVec0[i2] & l2) != 0L)
- jjAddStates(10, 12);
+ jjAddStates(7, 9);
break;
case 15:
if ((jjbitVec0[i2] & l2) != 0L)
- jjAddStates(0, 2);
+ jjAddStates(10, 12);
break;
case 20:
if ((jjbitVec0[i2] & l2) != 0L)
@@ -770,7 +770,7 @@
}
}
static final int[] jjnextStates = {
- 15, 16, 18, 36, 37, 38, 39, 40, 14, 19, 1, 2, 4, 1, 2, 6,
+ 36, 37, 38, 39, 40, 14, 19, 1, 2, 4, 15, 16, 18, 1, 2, 6,
4, 21, 22, 24, 3, 5, 7, 30, 31, 41, 42,
};
public static final String[] jjstrLiteralImages = {
Modified: trunk/src/jason/mas2j/parser/mas2jTokenManager.java
===================================================================
--- trunk/src/jason/mas2j/parser/mas2jTokenManager.java 2012-04-02 14:53:14 UTC (rev 1679)
+++ trunk/src/jason/mas2j/parser/mas2jTokenManager.java 2012-04-11 18:30:58 UTC (rev 1680)
@@ -16,11 +16,6 @@
switch (pos)
{
case 0:
- if ((active0 & 0x712ff00L) != 0L)
- {
- jjmatchedKind = 29;
- return 88;
- }
if ((active0 & 0x40000000000L) != 0L)
return 45;
if ((active0 & 0x400000L) != 0L)
@@ -28,10 +23,10 @@
jjmatchedKind = 29;
return 14;
}
- if ((active0 & 0x80000L) != 0L)
+ if ((active0 & 0x712ff00L) != 0L)
{
jjmatchedKind = 29;
- return 21;
+ return 88;
}
if ((active0 & 0x80L) != 0L)
{
@@ -43,19 +38,26 @@
jjmatchedKind = 29;
return 5;
}
+ if ((active0 & 0x80000L) != 0L)
+ {
+ jjmatchedKind = 29;
+ return 21;
+ }
return -1;
case 1:
- if ((active0 & 0x200000L) != 0L)
+ if ((active0 & 0x800L) != 0L)
+ return 90;
+ if ((active0 & 0x75af700L) != 0L)
{
jjmatchedKind = 29;
jjmatchedPos = 1;
- return 4;
+ return 90;
}
- if ((active0 & 0x75af700L) != 0L)
+ if ((active0 & 0x200000L) != 0L)
{
jjmatchedKind = 29;
jjmatchedPos = 1;
- return 90;
+ return 4;
}
if ((active0 & 0x80L) != 0L)
{
@@ -63,8 +65,6 @@
jjmatchedPos = 1;
return 78;
}
- if ((active0 & 0x800L) != 0L)
- return 90;
return -1;
case 2:
if ((active0 & 0x77af700L) != 0L)
@@ -85,24 +85,24 @@
}
return -1;
case 4:
+ if ((active0 & 0x80000L) != 0L)
+ return 90;
if ((active0 & 0x772f700L) != 0L)
{
jjmatchedKind = 29;
jjmatchedPos = 4;
return 90;
}
- if ((active0 & 0x80000L) != 0L)
- return 90;
return -1;
case 5:
+ if ((active0 & 0x8100L) != 0L)
+ return 90;
if ((active0 & 0x7727600L) != 0L)
{
jjmatchedKind = 29;
jjmatchedPos = 5;
return 90;
}
- if ((active0 & 0x8100L) != 0L)
- return 90;
return -1;
case 6:
if ((active0 & 0x120000L) != 0L)
@@ -123,14 +123,14 @@
}
return -1;
case 8:
+ if ((active0 & 0x2000L) != 0L)
+ return 90;
if ((active0 & 0x7605600L) != 0L)
{
jjmatchedKind = 29;
jjmatchedPos = 8;
return 90;
}
- if ((active0 & 0x2000L) != 0L)
- return 90;
return -1;
case 9:
if ((active0 & 0x1200000L) != 0L)
@@ -143,14 +143,14 @@
}
return -1;
case 10:
+ if ((active0 & 0x200L) != 0L)
+ return 90;
if ((active0 & 0x6405400L) != 0L)
{
jjmatchedKind = 29;
jjmatchedPos = 10;
return 90;
}
- if ((active0 & 0x200L) != 0L)
- return 90;
return -1;
case 11:
if ((active0 & 0x400000L) != 0L)
@@ -173,14 +173,14 @@
}
return -1;
case 13:
+ if ((active0 & 0x2001000L) != 0L)
+ return 90;
if ((active0 & 0x4000400L) != 0L)
{
jjmatchedKind = 29;
jjmatchedPos = 13;
return 90;
}
- if ((active0 & 0x2001000L) != 0L)
- return 90;
return -1;
case 14:
if ((active0 & 0x4000000L) != 0L)
@@ -823,7 +823,7 @@
jjCheckNAddTwoStates(46, 47);
}
break;
- case 89:
+ case 21:
if ((0x3ff000000000000L & l) != 0L)
{
if (kind > 30)
@@ -835,36 +835,14 @@
if (kind > 32)
kind = 32;
}
- if (curChar == 58)
- {
- if (kind > 31)
- kind = 31;
- jjCheckNAddTwoStates(46, 47);
- }
- break;
- case 90:
if ((0x3ff000000000000L & l) != 0L)
{
- if (kind > 30)
- kind = 30;
- jjCheckNAdd(78);
- }
- if ((0x3ff000000000000L & l) != 0L)
- {
if (kind > 29)
kind = 29;
jjCheckNAdd(76);
}
- break;
- case 45:
- if ((0x3ff000000000000L & l) != 0L)
+ else if (curChar == 58)
{
- if (kind > 27)
- kind = 27;
- jjCheckNAddTwoStates(32, 33);
- }
- else if (curChar == 47)
- {
if (kind > 31)
kind = 31;
jjCheckNAddTwoStates(46, 47);
@@ -884,7 +862,7 @@
jjCheckNAdd(76);
}
break;
- case 14:
+ case 5:
if ((0x3ff000000000000L & l) != 0L)
{
if (kind > 30)
@@ -909,7 +887,7 @@
jjCheckNAddTwoStates(46, 47);
}
break;
- case 5:
+ case 14:
if ((0x3ff000000000000L & l) != 0L)
{
if (kind > 30)
@@ -956,26 +934,48 @@
else if (curChar == 46)
jjCheckNAdd(32);
break;
- case 21:
+ case 45:
if ((0x3ff000000000000L & l) != 0L)
{
+ if (kind > 27)
+ kind = 27;
+ jjCheckNAddTwoStates(32, 33);
+ }
+ else if (curChar == 47)
+ {
+ if (kind > 31)
+ kind = 31;
+ jjCheckNAddTwoStates(46, 47);
+ }
+ break;
+ case 90:
+ if ((0x3ff000000000000L & l) != 0L)
+ {
if (kind > 30)
kind = 30;
jjCheckNAdd(78);
}
- else if (curChar == 58)
- {
- if (kind > 32)
- kind = 32;
- }
if ((0x3ff000000000000L & l) != 0L)
{
if (kind > 29)
kind = 29;
jjCheckNAdd(76);
}
+ break;
+ case 89:
+ if ((0x3ff000000000000L & l) != 0L)
+ {
+ if (kind > 30)
+ kind = 30;
+ jjCheckNAdd(78);
+ }
else if (curChar == 58)
{
+ if (kind > 32)
+ kind = 32;
+ }
+ if (curChar == 58)
+ {
if (kind > 31)
kind = 31;
jjCheckNAddTwoStates(46, 47);
@@ -1181,15 +1181,7 @@
jjCheckNAdd(76);
}
break;
- case 89:
- case 78:
- if ((0x7fffffe87fffffeL & l) == 0L)
- break;
- if (kind > 30)
- kind = 30;
- jjCheckNAdd(78);
- break;
- case 90:
+ case 21:
if ((0x7fffffe87fffffeL & l) != 0L)
{
if (kind > 30)
@@ -1202,6 +1194,8 @@
kind = 29;
jjCheckNAdd(76);
}
+ if (curChar == 101)
+ jjstateSet[jjnewStateCnt++] = 20;
break;
case 4:
if ((0x7fffffe87fffffeL & l) != 0L)
@@ -1219,7 +1213,7 @@
if (curChar == 115)
jjstateSet[jjnewStateCnt++] = 3;
break;
- case 14:
+ case 5:
if ((0x7fffffe87fffffeL & l) != 0L)
{
if (kind > 30)
@@ -1232,10 +1226,10 @@
kind = 29;
jjCheckNAdd(76);
}
- if (curChar == 97)
- jjstateSet[jjnewStateCnt++] = 13;
+ if (curChar == 105)
+ jjstateSet[jjnewStateCnt++] = 4;
break;
- case 5:
+ case 14:
if ((0x7fffffe87fffffeL & l) != 0L)
{
if (kind > 30)
@@ -1248,8 +1242,8 @@
kind = 29;
jjCheckNAdd(76);
}
- if (curChar == 105)
- jjstateSet[jjnewStateCnt++] = 4;
+ if (curChar == 97)
+ jjstateSet[jjnewStateCnt++] = 13;
break;
case 6:
if ((0x7fffffe07fffffeL & l) != 0L)
@@ -1288,7 +1282,7 @@
else if (curChar == 100)
jjstateSet[jjnewStateCnt++] = 5;
break;
- case 21:
+ case 90:
if ((0x7fffffe87fffffeL & l) != 0L)
{
if (kind > 30)
@@ -1301,9 +1295,15 @@
kind = 29;
jjCheckNAdd(76);
}
- if (curChar == 101)
- jjstateSet[jjnewStateCnt++] = 20;
break;
+ case 89:
+ case 78:
+ if ((0x7fffffe87fffffeL & l) == 0L)
+ break;
+ if (kind > 30)
+ kind = 30;
+ jjCheckNAdd(78);
+ break;
case 0:
if (curChar == 100 && kind > 16)
kind = 16;
Added: trunk/src/templates/CArtAgOartifact
===================================================================
--- trunk/src/templates/CArtAgOartifact (rev 0)
+++ trunk/src/templates/CArtAgOartifact 2012-04-11 18:30:58 UTC (rev 1680)
@@ -0,0 +1,19 @@
+// CArtAgO artifact code for project <PROJECT_NAME>
+
+package <PCK>;
+
+import cartago.*;
+
+public class <ARTIFACT_NAME> extends <SUPER_CLASS> {
+ void init(int initialValue) {
+ defineObsProperty("count", initialValue);
+ }
+
+ @OPERATION
+ void inc() {
+ ObsProperty prop = getObsProperty("count");
+ prop.updateValue(prop.intValue()+1);
+ signal("tick");
+ }
+}
+
Deleted: trunk/src/templates/artifact
===================================================================
--- trunk/src/templates/artifact 2012-04-02 14:53:14 UTC (rev 1679)
+++ trunk/src/templates/artifact 2012-04-11 18:30:58 UTC (rev 1680)
@@ -1,10 +0,0 @@
-// CArtAgO artifact code for project <PROJECT_NAME>
-
-package <PCK>;
-
-import cartago.*;
-
-public class <ARTIFACT_NAME> extends <SUPER_CLASS> {
-
-}
-
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2013-07-14 00:40:42
|
Revision: 1738
http://sourceforge.net/p/jason/svn/1738
Author: jomifred
Date: 2013-07-14 00:40:37 +0000 (Sun, 14 Jul 2013)
Log Message:
-----------
improve subset implementation
Modified Paths:
--------------
trunk/src/jason/asSyntax/ListTermImpl.java
trunk/src/jason/asSyntax/Literal.java
trunk/src/test/ListTermTest.java
Modified: trunk/src/jason/asSyntax/ListTermImpl.java
===================================================================
--- trunk/src/jason/asSyntax/ListTermImpl.java 2013-07-13 20:14:39 UTC (rev 1737)
+++ trunk/src/jason/asSyntax/ListTermImpl.java 2013-07-14 00:40:37 UTC (rev 1738)
@@ -418,16 +418,24 @@
}
/** returns all subsets that take k elements of this list */
- public Iterator<List<Term>> subSets(int k) {
- // DFS algorithm
- final List<SubSetSearchState> open = new LinkedList<SubSetSearchState>(); // states to explore
- open.add(new SubSetSearchState(new ArrayList<Term>(), getAsList(), k)); // initial state (root of search tree)
+ public Iterator<List<Term>> subSets(final int k) {
+ // based on a DFS algorithm
return new Iterator<List<Term>>() {
+ LinkedList<SubSetSearchState> open = null;
+ Term[] thisAsArray = new Term[0];
+
List<Term> next = null;
public boolean hasNext() {
- if (next == null)
+ if (open == null) {
+ open = new LinkedList<SubSetSearchState>(); // states to explore
+ //open.add(new SubSetSearchState(new ArrayList<Term>(), getAsList(), k)); // initial state (root of search tree)
+ thisAsArray = getAsList().toArray(thisAsArray);
+ open.add(new SubSetSearchState(0, k, null, null)); // initial state (root of search tree)
+ }
+ if (next == null) {
getNext();
+ }
return next != null;
}
@@ -439,37 +447,71 @@
void getNext() {
while (! open.isEmpty() ) {
- SubSetSearchState s = open.remove(0);
- if (s.k == 0) {
- next = s.prefix;
+ SubSetSearchState s = open.removeFirst();
+ if (s.d == 0) {
+ next = s.getAsList();
return;
} else {
- s.addNexts(open);
+ s.addNexts();
}
}
next = null;
}
public void remove() { }
+
+ class SubSetSearchState {
+ int pos;
+ int d;
+ Term value = null;
+ SubSetSearchState f = null;
+
+ SubSetSearchState(int pos, int d, Term t, SubSetSearchState father) {
+ this.pos = pos; this.d = d; this.value = t; this.f = father;
+ }
+ void addNexts() {
+ int pSize = (k-d)+thisAsArray.length;
+ for (int i = thisAsArray.length-1; i >= pos; i--) {
+ if (pSize-i >= k) {
+ open.addFirst(new SubSetSearchState(i+1, d-1, thisAsArray[i], this));
+ }
+ }
+ }
+
+ List<Term> getAsList() {
+ LinkedList<Term> np = new LinkedList<Term>();
+ SubSetSearchState c = this;
+ while (c.value != null) {
+ np.addFirst(c.value);
+ c = c.f;
+ }
+ return np;
+ }
+ }
+
+ /*// old code
+ class SubSetSearchState {
+ List<Term> prefix, elements;
+ int d;
+ SubSetSearchState(List<Term> p, List<Term> e, int d) {
+ prefix = p; elements = e; this.d = d;
+ }
+ void addNexts(List<SubSetSearchState> open) {
+ int esize = elements.size();
+ int maxNextSize = prefix.size()+esize;
+ for (int i = esize-1; i >= 0; i--) {
+ if (maxNextSize-i >= k) {
+ List<Term> np = new ArrayList<Term>(prefix);
+ np.add(elements.get(i));
+ open.add(0, new SubSetSearchState(np, elements.subList(i+1, esize), d-1));
+ }
+ }
+ }
+ }
+ */
};
}
- class SubSetSearchState {
- List<Term> prefix, elements;
- int k;
- SubSetSearchState(List<Term> p, List<Term> e, int k) {
- prefix = p; elements = e; this.k = k;
- }
- void addNexts(List<SubSetSearchState> open) {
- int esize = elements.size();
- for (int i = esize-1; i >= 0; i--) {
- List<Term> np = new ArrayList<Term>(prefix);
- np.add(elements.get(i));
- open.add(0, new SubSetSearchState(np, elements.subList(i+1, esize), k-1));
- }
- }
- }
-
/*
public List<List<Term>> subSets(int k) {
List<List<Term>> result = new ArrayList<List<Term>>();
Modified: trunk/src/jason/asSyntax/Literal.java
===================================================================
--- trunk/src/jason/asSyntax/Literal.java 2013-07-13 20:14:39 UTC (rev 1737)
+++ trunk/src/jason/asSyntax/Literal.java 2013-07-14 00:40:37 UTC (rev 1738)
@@ -351,7 +351,6 @@
if (annotsOptions != null) {
while (annotsOptions.hasNext()) {
Literal belToTry = belInBB.copy().setAnnots(null).addAnnots( annotsOptions.next() );
-
Unifier u = un.clone();
if (u.unifiesNoUndo(Literal.this, belToTry)) {
current = u;
@@ -445,8 +444,6 @@
if (belInBB.hasAnnot()) {
int nbAnnotsB = belInBB.getAnnots().size();
if (nbAnnotsB >= nbAnnots) {
- if (nbAnnots > 5)
- logger.warning("I am generating "+Math.pow(2, nbAnnots)+" subsets for the annotation backtracking consult of "+Literal.this);
annotsOptions = belInBB.getAnnots().subSets( nbAnnots );
get();
if (current != null) // if it get a value
Modified: trunk/src/test/ListTermTest.java
===================================================================
--- trunk/src/test/ListTermTest.java 2013-07-13 20:14:39 UTC (rev 1737)
+++ trunk/src/test/ListTermTest.java 2013-07-14 00:40:37 UTC (rev 1738)
@@ -334,14 +334,17 @@
public void testSubSet() {
ListTerm l3 = ListTermImpl.parseList("[a,b,c,8]");
- /*Set<PredicateIndicator> types = new HashSet<PredicateIndicator>();
- types.add( ((Literal)l3.get(1) ).getPredicateIndicator());
- types.add( ((Literal)l3.get(2) ).getPredicateIndicator());
- types.add( ((Literal)l3.get(3) ).getPredicateIndicator());*/
assertEquals("[[a], [b], [c], [8]]", iterator2list(l3.subSets(1)).toString());
assertEquals("[[a, b], [a, c], [a, 8], [b, c], [b, 8], [c, 8]]", iterator2list(l3.subSets(2)).toString());
assertEquals("[[a, b, c], [a, b, 8], [a, c, 8], [b, c, 8]]", iterator2list(l3.subSets(3)).toString());
assertEquals("[[a, b, c, 8]]", iterator2list(l3.subSets(4)).toString());
+
+ l3 = ListTermImpl.parseList("[a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20]");
+ //for (int i=0; i< 20;i++)
+ // System.out.println(iterator2list(l3.subSets(i+1)).size());
+ assertEquals("[[a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20]]",iterator2list(l3.subSets(20)).toString());
+ assertEquals(38760, iterator2list(l3.subSets(6)).size());
+ assertEquals(38760, iterator2list(l3.subSets(14)).size());
}
public void testMkVarAn() {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2013-08-15 14:15:37
|
Revision: 1742
http://sourceforge.net/p/jason/svn/1742
Author: jomifred
Date: 2013-08-15 14:15:34 +0000 (Thu, 15 Aug 2013)
Log Message:
-----------
include a "clear" method in BB
implements "remove()" for BB iterator
Modified Paths:
--------------
trunk/src/jason/bb/BeliefBase.java
trunk/src/jason/bb/ChainBBAdapter.java
trunk/src/jason/bb/DefaultBeliefBase.java
trunk/src/jason/bb/JDBCPersistentBB.java
trunk/src/test/BeliefBaseTest.java
Modified: trunk/src/jason/bb/BeliefBase.java
===================================================================
--- trunk/src/jason/bb/BeliefBase.java 2013-07-18 16:54:23 UTC (rev 1741)
+++ trunk/src/jason/bb/BeliefBase.java 2013-08-15 14:15:34 UTC (rev 1742)
@@ -64,6 +64,9 @@
/** Called just before the end of MAS execution */
public void stop();
+ /** removes all beliefs from BB */
+ public void clear();
+
/** Adds a belief in the end of the BB, returns true if succeed.
* The annots of l may be changed to reflect what was changed in the BB,
* for example, if l is p[a,b] in a BB with p[a], l will be changed to
Modified: trunk/src/jason/bb/ChainBBAdapter.java
===================================================================
--- trunk/src/jason/bb/ChainBBAdapter.java 2013-07-18 16:54:23 UTC (rev 1741)
+++ trunk/src/jason/bb/ChainBBAdapter.java 2013-08-15 14:15:34 UTC (rev 1742)
@@ -89,6 +89,9 @@
nextBB.stop();
}
+ public void clear() {
+ nextBB.clear();
+ }
public boolean add(Literal l) {
return nextBB.add(l);
Modified: trunk/src/jason/bb/DefaultBeliefBase.java
===================================================================
--- trunk/src/jason/bb/DefaultBeliefBase.java 2013-07-18 16:54:23 UTC (rev 1741)
+++ trunk/src/jason/bb/DefaultBeliefBase.java 2013-08-15 14:15:34 UTC (rev 1742)
@@ -74,6 +74,12 @@
public int size() {
return size;
}
+
+ public void clear() {
+ size = 0;
+ percepts.clear();
+ belsMap.clear();
+ }
public Iterator<Literal> getPercepts() {
final Iterator<Literal> i = percepts.iterator();
@@ -188,13 +194,14 @@
return new Iterator<Literal>() {
Iterator<Literal> il = ibe.next().list.iterator();
-
+ Literal l;
+
public boolean hasNext() {
return il.hasNext();
}
public Literal next() {
- Literal l = il.next();
+ l = il.next();
if (!il.hasNext() && ibe.hasNext()) {
il = ibe.next().list.iterator();
}
@@ -202,7 +209,11 @@
}
public void remove() {
- logger.warning("remove is not implemented for BB.iterator().");
+ il.remove();
+ if (l.hasAnnot(TPercept)) {
+ percepts.remove(l);
+ }
+ size--;
}
};
} else {
@@ -213,10 +224,10 @@
/** @deprecated use iterator() instead of getAll */
public Iterator<Literal> getAll() {
return iterator();
- }
-
+ }
public boolean abolish(PredicateIndicator pi) {
+ // TODO: remove also in percepts list!
return belsMap.remove(pi) != null;
}
Modified: trunk/src/jason/bb/JDBCPersistentBB.java
===================================================================
--- trunk/src/jason/bb/JDBCPersistentBB.java 2013-07-18 16:54:23 UTC (rev 1741)
+++ trunk/src/jason/bb/JDBCPersistentBB.java 2013-08-15 14:15:34 UTC (rev 1742)
@@ -180,6 +180,10 @@
}
nextBB.stop();
}
+
+ public void clear() {
+ logger.warning("clear is still not implemented for JDBC BB!");
+ }
/** returns true if the literal is stored in a DB */
protected boolean isDB(Literal l) {
Modified: trunk/src/test/BeliefBaseTest.java
===================================================================
--- trunk/src/test/BeliefBaseTest.java 2013-07-18 16:54:23 UTC (rev 1741)
+++ trunk/src/test/BeliefBaseTest.java 2013-08-15 14:15:34 UTC (rev 1742)
@@ -172,6 +172,19 @@
assertEquals(iteratorSize(bb.getPercepts()), 0);
assertEquals(bb.size(), 1);
+ l2 = new LiteralImpl(true, new Pred("testRemIt"));
+ l2.addAnnot(new Structure("a"));
+ l2.addAnnot(BeliefBase.TPercept);
+ bb.add(l2);
+ Iterator<Literal> itl = bb.iterator();
+ while (itl.hasNext()) {
+ Literal l = itl.next();
+ if (l.getFunctor().startsWith("testRemIt")) {
+ itl.remove();
+ }
+ }
+ assertEquals(iteratorSize(bb.getPercepts()), 0);
+
l3 = Literal.parseLiteral("pos[source(ag1)]");
assertFalse(l2.isAtom());
assertTrue(bb.remove(l3));
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2013-11-23 15:00:43
|
Revision: 1762
http://sourceforge.net/p/jason/svn/1762
Author: jomifred
Date: 2013-11-23 15:00:39 +0000 (Sat, 23 Nov 2013)
Log Message:
-----------
cache isGround
Modified Paths:
--------------
trunk/src/jason/architecture/MindInspectorAgArch.java
trunk/src/jason/asSemantics/TransitionSystem.java
trunk/src/jason/asSyntax/ArithExpr.java
trunk/src/jason/asSyntax/Structure.java
trunk/src/jason/bb/DefaultBeliefBase.java
trunk/src/test/TermTest.java
Modified: trunk/src/jason/architecture/MindInspectorAgArch.java
===================================================================
--- trunk/src/jason/architecture/MindInspectorAgArch.java 2013-11-23 14:28:34 UTC (rev 1761)
+++ trunk/src/jason/architecture/MindInspectorAgArch.java 2013-11-23 15:00:39 UTC (rev 1762)
@@ -22,7 +22,7 @@
package jason.architecture;
-import jason.NoValueForVarException;
+import jason.NoValueException;
import jason.asSyntax.ASSyntax;
import jason.asSyntax.NumberTerm;
import jason.asSyntax.Structure;
@@ -120,7 +120,7 @@
if (! hasMindInspectorByCycle) {
try {
updateInterval = (int)((NumberTerm)sConf.getTerm(0)).solve();
- } catch (NoValueForVarException e1) {
+ } catch (NoValueException e1) {
e1.printStackTrace();
}
new Thread("update agent mind inspector") {
Modified: trunk/src/jason/asSemantics/TransitionSystem.java
===================================================================
--- trunk/src/jason/asSemantics/TransitionSystem.java 2013-11-23 14:28:34 UTC (rev 1761)
+++ trunk/src/jason/asSemantics/TransitionSystem.java 2013-11-23 15:00:39 UTC (rev 1762)
@@ -24,7 +24,7 @@
package jason.asSemantics;
import jason.JasonException;
-import jason.NoValueForVarException;
+import jason.NoValueException;
import jason.RevisionFailedException;
import jason.architecture.AgArch;
import jason.asSyntax.ASSyntax;
@@ -1216,7 +1216,7 @@
int deadline = 0;
try {
deadline = (int)((NumberTerm)hdl.getTerm(0)).solve();
- } catch (NoValueForVarException e1) {
+ } catch (NoValueException e1) {
e1.printStackTrace();
}
Modified: trunk/src/jason/asSyntax/ArithExpr.java
===================================================================
--- trunk/src/jason/asSyntax/ArithExpr.java 2013-11-23 14:28:34 UTC (rev 1761)
+++ trunk/src/jason/asSyntax/ArithExpr.java 2013-11-23 15:00:39 UTC (rev 1762)
@@ -23,7 +23,7 @@
package jason.asSyntax;
-import jason.NoValueForVarException;
+import jason.NoValueException;
import jason.asSemantics.Agent;
import jason.asSemantics.Unifier;
import jason.asSyntax.parser.as2j;
@@ -180,7 +180,7 @@
value = new NumberTermImpl(op.eval(l, r));
}
return value;
- } catch (NoValueForVarException e) {
+ } catch (NoValueException e) {
return clone();
}
}
Modified: trunk/src/jason/asSyntax/Structure.java
===================================================================
--- trunk/src/jason/asSyntax/Structure.java 2013-11-23 14:28:34 UTC (rev 1761)
+++ trunk/src/jason/asSyntax/Structure.java 2013-11-23 15:00:39 UTC (rev 1762)
@@ -54,7 +54,9 @@
protected static final Term[] emptyTermArray = new Term[0]; // just to have a type for toArray in the getTermsArray method
private List<Term> terms;
-
+ protected Boolean isGround = true;
+
+
public Structure(String functor) {
//this.functor = (functor == null ? null : functor.intern()); // it does not improve performance in test i did!
super(functor);
@@ -66,7 +68,7 @@
final int tss = l.getArity();
terms = new ArrayList<Term>(tss);
for (int i = 0; i < tss; i++)
- terms.add(l.getTerm(i).clone());
+ addTerm(l.getTerm(i).clone());
}
// used by capply
@@ -75,8 +77,7 @@
final int tss = l.getArity();
terms = new ArrayList<Term>(tss);
for (int i = 0; i < tss; i++)
- terms.add(l.getTerm(i).capply(u));
- resetHashCodeCache();
+ addTerm(l.getTerm(i).capply(u));
}
/**
@@ -112,7 +113,7 @@
result = 7 * result + getTerm(i).hashCode();
return result;
}
-
+
public boolean equals(Object t) {
if (t == null) return false;
if (t == this) return true;
@@ -212,6 +213,8 @@
public void addTerm(Term t) {
if (t == null) return;
terms.add(t);
+ if (!t.isGround())
+ isGround = false;
predicateIndicatorCache = null;
resetHashCodeCache();
}
@@ -221,23 +224,20 @@
terms.remove(index);
predicateIndicatorCache = null;
resetHashCodeCache();
+ isGround = null;
}
@Override
public Literal addTerms(Term ... ts ) {
for (Term t: ts)
- terms.add(t);
- predicateIndicatorCache = null;
- resetHashCodeCache();
+ addTerm(t);
return this;
}
@Override
public Literal addTerms(List<Term> l) {
for (Term t: l)
- terms.add(t);
- predicateIndicatorCache = null;
- resetHashCodeCache();
+ addTerm(t);
return this;
}
@@ -246,6 +246,7 @@
terms = l;
predicateIndicatorCache = null;
resetHashCodeCache();
+ isGround = null;
return this;
}
@@ -253,6 +254,8 @@
public void setTerm(int i, Term t) {
terms.set(i,t);
resetHashCodeCache();
+ if (isGround() && !t.isGround())
+ isGround = false;
}
public Term getTerm(int i) {
@@ -294,13 +297,17 @@
@Override
public boolean isGround() {
- final int size = getArity();
- for (int i=0; i<size; i++) {
- if (!getTerm(i).isGround()) {
- return false;
+ if (isGround == null) {
+ isGround = true;
+ final int size = getArity();
+ for (int i=0; i<size; i++) {
+ if (!getTerm(i).isGround()) {
+ isGround = false;
+ break;
+ }
}
}
- return true;
+ return isGround;
}
public boolean isUnary() {
Modified: trunk/src/jason/bb/DefaultBeliefBase.java
===================================================================
--- trunk/src/jason/bb/DefaultBeliefBase.java 2013-11-23 14:28:34 UTC (rev 1761)
+++ trunk/src/jason/bb/DefaultBeliefBase.java 2013-11-23 15:00:39 UTC (rev 1762)
@@ -144,7 +144,8 @@
entry = new BelEntry();
belsMap.put(l.getPredicateIndicator(), entry);
}
- entry.add(l.copy(), addInEnd); // we need to clone for the consequent event to not have a ref to this bel (which can change before the event being processed); see bug from Viviana Marcardi
+ l = l.copy(); // we need to clone l for the consequent event to not have a ref to this bel (which may change before the event is processed); see bug from Viviana Marcardi
+ entry.add(l, addInEnd);
// add it in the percepts list
if (l.hasAnnot(TPercept)) {
@@ -162,7 +163,7 @@
if (l.hasSubsetAnnot(bl)) { // e.g. removing b[a] or b[a,d] from BB b[a,b,c]
// second case fails
if (l.hasAnnot(TPercept)) {
- percepts.remove(bl);
+ boolean b = percepts.remove(bl);
}
boolean result = bl.delAnnots(l.getAnnots()); // note that l annots can be empty, in this case, nothing is deleted!
return removeFromEntry(bl) || result;
Modified: trunk/src/test/TermTest.java
===================================================================
--- trunk/src/test/TermTest.java 2013-11-23 14:28:34 UTC (rev 1761)
+++ trunk/src/test/TermTest.java 2013-11-23 15:00:39 UTC (rev 1762)
@@ -79,7 +79,9 @@
// tests with variables
t1.addTerm(new Structure("c"));
+ assertTrue(t3.isGround());
t3.addTerm(new VarTerm("X"));
+ assertFalse(t3.isGround());
assertFalse(t1.equals(t3));
Literal l3 = new LiteralImpl(true, new Pred("pos"));
@@ -342,6 +344,7 @@
// p[a,b,c,d] = p[a,c|R] - ok and R=[b,d]
Term t1 = parseTerm("p[c,a,b,d,c]");
Term t2 = parseTerm("p[c,a,c|R]");
+ assertFalse(t2.isGround());
Unifier u = new Unifier();
assertTrue(u.unifies(t1, t2));
assertEquals("[b,d]",u.get("R").toString());
@@ -371,7 +374,9 @@
assertEquals("p[b,c,d,z]",t1.toString());
t1 = parseTerm("p[a,b,c,X]");
+ assertFalse(t1.isGround());
t1 = t1.capply(u);
+ assertTrue(t1.isGround());
assertEquals("p[a,b,c,z]",t1.toString());
}
@@ -696,6 +701,7 @@
public void testMakeVarAnnon2() {
Literal l1 = Literal.parseLiteral("calc(AgY,QuadY2,QuadY2)");
+ assertFalse(l1.isGround());
Literal l2 = Literal.parseLiteral("calc(32,33,V)");
Unifier u = new Unifier();
assertTrue(u.unifies(l1, l2));
@@ -715,8 +721,8 @@
l2 = (Literal)l2.capply(u);
assertEquals("calc(32,33,33)", l2.toString());
l1 = (Literal)l1.capply(u);
+ assertTrue(l1.isGround());
assertEquals("calc(32,33,33)", l1.toString());
-
}
public void testMakeVarAnnon3() {
@@ -728,7 +734,9 @@
assertEquals("vl("+l1.getTerm(1)+")",l1.getAnnots("vl").get(0).toString());
l1 = Literal.parseLiteral("calc(a)[a,b|T]");
+ assertFalse(l1.isGround());
l1.makeVarsAnnon();
+ assertFalse(l1.isGround());
assertTrue(l1.toString().contains("_"));
assertFalse("calc(a)[a,b|T]".equals(l1.toString()));
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jom...@us...> - 2013-12-20 17:59:18
|
Revision: 1769
http://sourceforge.net/p/jason/svn/1769
Author: jomifred
Date: 2013-12-20 17:59:14 +0000 (Fri, 20 Dec 2013)
Log Message:
-----------
remove auto source(self) from triggers in planterms
Modified Paths:
--------------
trunk/src/jason/asSyntax/PlanBodyImpl.java
trunk/src/jason/asSyntax/Trigger.java
trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc
trunk/src/jason/asSyntax/parser/as2j.java
trunk/src/test/ASParserTest.java
Modified: trunk/src/jason/asSyntax/PlanBodyImpl.java
===================================================================
--- trunk/src/jason/asSyntax/PlanBodyImpl.java 2013-12-17 18:46:59 UTC (rev 1768)
+++ trunk/src/jason/asSyntax/PlanBodyImpl.java 2013-12-20 17:59:14 UTC (rev 1769)
@@ -41,15 +41,24 @@
super(BODY_PLAN_FUNCTOR, 0);
}
+ public PlanBodyImpl(boolean planTerm) {
+ this();
+ setAsBodyTerm(planTerm);
+ }
+
public PlanBodyImpl(BodyType t, Term b) {
- super(BODY_PLAN_FUNCTOR, 0);
+ this(t,b,false);
+ }
+
+ public PlanBodyImpl(BodyType t, Term b, boolean planTerm) {
+ this(planTerm);
formType = t;
if (b != null) {
srcInfo = b.getSrcInfo();
// add source(self) in some commands (it is preferred to do this at compile time than runtime)
if (b instanceof Literal) {
- switch (t) {
+ switch (formType) {
case achieve:
case achieveNF:
case addBel:
@@ -309,15 +318,15 @@
PlanBodyImpl c;
if (term == null) { // (NIDE) must copy c.isTerm even if cloning empty plan
c = new PlanBodyImpl();
+ c.isTerm = isTerm;
} else {
- c = new PlanBodyImpl(formType, term.capply(u));
+ c = new PlanBodyImpl(formType, term.capply(u), isTerm);
if (c.term.isPlanBody()) { // we cannot have "inner" body literals
c.formType = ((PlanBody)c.term).getBodyType();
c.next = ((PlanBody)c.term).getBodyNext();
c.term = ((PlanBody)c.term).getBodyTerm();
}
}
- c.isTerm = isTerm;
if (next != null)
c.add((PlanBody)next.capply(u));
@@ -331,7 +340,7 @@
if (term == null) // (NIDE) must copy c.isTerm even if cloning empty plan
c = new PlanBodyImpl();
else
- c = new PlanBodyImpl(formType, term.clone());
+ c = new PlanBodyImpl(formType, term.clone(), isTerm);
c.isTerm = isTerm;
if (next != null)
c.setBodyNext(getBodyNext().clonePB());
Modified: trunk/src/jason/asSyntax/Trigger.java
===================================================================
--- trunk/src/jason/asSyntax/Trigger.java 2013-12-17 18:46:59 UTC (rev 1768)
+++ trunk/src/jason/asSyntax/Trigger.java 2013-12-20 17:59:14 UTC (rev 1769)
@@ -28,6 +28,7 @@
import jason.asSyntax.PlanBody.BodyType;
import jason.asSyntax.parser.ParseException;
import jason.asSyntax.parser.as2j;
+import jason.bb.BeliefBase;
import java.io.StringReader;
import java.util.logging.Level;
@@ -220,27 +221,25 @@
if (t instanceof Trigger) {
return (Trigger)t;
}
- /*if (t instanceof VarTerm) {
- VarTerm v = (VarTerm)t;
- if (v.hasValue() && v.getValue() instanceof Trigger) {
- return (Trigger)v.getValue();
- }
- if (v.hasValue() && v.getValue() instanceof Plan) {
- return ((Plan)v.getValue()).getTrigger();
- }
- }*/
- if (t.isString()) {
- return ASSyntax.parseTrigger(((StringTerm)t).getString());
- }
if (t.isPlanBody()) {
PlanBody p = (PlanBody)t;
if (p.getPlanSize() == 1) {
- if (p.getBodyType() == BodyType.addBel)
- return new Trigger(TEOperator.add, TEType.belief, (Literal)p.getBodyTerm());
- if (p.getBodyType() == BodyType.delBel)
- return new Trigger(TEOperator.del, TEType.belief, (Literal)p.getBodyTerm());
+ TEOperator op = null;
+ if (p.getBodyType() == BodyType.addBel)
+ op = TEOperator.add;
+ else if (p.getBodyType() == BodyType.delBel)
+ op = TEOperator.del;
+ if (op != null) {
+ Literal l = (Literal)p.getBodyTerm().clone();
+ l.delAnnot(BeliefBase.TSelf); // remove the eventual auto added annotation of source
+ return new Trigger(op, TEType.belief, l);
+
+ }
}
}
+ if (t.isString()) {
+ return ASSyntax.parseTrigger(((StringTerm)t).getString());
+ }
return null;
}
Modified: trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc
===================================================================
--- trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2013-12-17 18:46:59 UTC (rev 1768)
+++ trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2013-12-20 17:59:14 UTC (rev 1769)
@@ -510,10 +510,9 @@
// handle the case of "+a1; +a2", parsed as "TE; Body"
if (pb && L == null) {
if (T.isAddition())
- B1 = new PlanBodyImpl(BodyType.addBel, T.getLiteral());
+ B1 = new PlanBodyImpl(BodyType.addBel, T.getLiteral(), true);
else
- B1 = new PlanBodyImpl(BodyType.delBel, T.getLiteral());
- B1.setAsBodyTerm(true);
+ B1 = new PlanBodyImpl(BodyType.delBel, T.getLiteral(), true);
if (B != null)
B1.setBodyNext(B);
return B1;
Modified: trunk/src/jason/asSyntax/parser/as2j.java
===================================================================
--- trunk/src/jason/asSyntax/parser/as2j.java 2013-12-17 18:46:59 UTC (rev 1768)
+++ trunk/src/jason/asSyntax/parser/as2j.java 2013-12-20 17:59:14 UTC (rev 1769)
@@ -778,10 +778,9 @@
// handle the case of "+a1; +a2", parsed as "TE; Body"
if (pb && L == null) {
if (T.isAddition())
- B1 = new PlanBodyImpl(BodyType.addBel, T.getLiteral());
+ B1 = new PlanBodyImpl(BodyType.addBel, T.getLiteral(), true);
else
- B1 = new PlanBodyImpl(BodyType.delBel, T.getLiteral());
- B1.setAsBodyTerm(true);
+ B1 = new PlanBodyImpl(BodyType.delBel, T.getLiteral(), true);
if (B != null)
B1.setBodyNext(B);
{if (true) return B1;}
@@ -1531,13 +1530,18 @@
return false;
}
+ final private boolean jj_3R_66() {
+ if (jj_3R_78()) return true;
+ return false;
+ }
+
final private boolean jj_3R_85() {
if (jj_3R_91()) return true;
return false;
}
- final private boolean jj_3R_66() {
- if (jj_3R_78()) return true;
+ final private boolean jj_3R_65() {
+ if (jj_3R_77()) return true;
return false;
}
@@ -1546,8 +1550,8 @@
return false;
}
- final private boolean jj_3R_65() {
- if (jj_3R_77()) return true;
+ final private boolean jj_3R_64() {
+ if (jj_3R_76()) return true;
return false;
}
@@ -1556,11 +1560,6 @@
return false;
}
- final private boolean jj_3R_64() {
- if (jj_3R_76()) return true;
- return false;
- }
-
final private boolean jj_3R_59() {
Token xsp;
xsp = jj_scanpos;
@@ -1676,13 +1675,13 @@
return false;
}
- final private boolean jj_3R_82() {
- if (jj_3R_80()) return true;
+ final private boolean jj_3R_49() {
+ if (jj_3R_59()) return true;
return false;
}
- final private boolean jj_3R_49() {
- if (jj_3R_59()) return true;
+ final private boolean jj_3R_82() {
+ if (jj_3R_80()) return true;
return false;
}
@@ -1696,16 +1695,6 @@
return false;
}
- final private boolean jj_3R_75() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_82()) {
- jj_scanpos = xsp;
- if (jj_3R_83()) return true;
- }
- return false;
- }
-
final private boolean jj_3R_19() {
Token xsp;
xsp = jj_scanpos;
@@ -1722,6 +1711,16 @@
return false;
}
+ final private boolean jj_3R_75() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_82()) {
+ jj_scanpos = xsp;
+ if (jj_3R_83()) return true;
+ }
+ return false;
+ }
+
final private boolean jj_3R_16() {
if (jj_scan_token(TK_LABEL_AT)) return true;
if (jj_3R_14()) return true;
@@ -1835,11 +1834,6 @@
return false;
}
- final private boolean jj_3R_71() {
- if (jj_3R_36()) return true;
- return false;
- }
-
final private boolean jj_3R_79() {
Token xsp;
xsp = jj_scanpos;
@@ -1848,6 +1842,11 @@
return false;
}
+ final private boolean jj_3R_71() {
+ if (jj_3R_36()) return true;
+ return false;
+ }
+
final private boolean jj_3R_70() {
if (jj_3R_81()) return true;
return false;
@@ -2061,6 +2060,11 @@
return false;
}
+ final private boolean jj_3R_24() {
+ if (jj_3R_39()) return true;
+ return false;
+ }
+
final private boolean jj_3R_14() {
Token xsp;
xsp = jj_scanpos;
@@ -2082,11 +2086,6 @@
return false;
}
- final private boolean jj_3R_24() {
- if (jj_3R_39()) return true;
- return false;
- }
-
final private boolean jj_3R_23() {
if (jj_3R_38()) return true;
return false;
@@ -2097,11 +2096,6 @@
return false;
}
- final private boolean jj_3R_46() {
- if (jj_scan_token(TK_FALSE)) return true;
- return false;
- }
-
final private boolean jj_3R_15() {
Token xsp;
while (true) {
@@ -2124,6 +2118,11 @@
return false;
}
+ final private boolean jj_3R_46() {
+ if (jj_scan_token(TK_FALSE)) return true;
+ return false;
+ }
+
final private boolean jj_3R_45() {
if (jj_scan_token(TK_TRUE)) return true;
return false;
Modified: trunk/src/test/ASParserTest.java
===================================================================
--- trunk/src/test/ASParserTest.java 2013-12-17 18:46:59 UTC (rev 1768)
+++ trunk/src/test/ASParserTest.java 2013-12-20 17:59:14 UTC (rev 1769)
@@ -251,7 +251,7 @@
Unifier un = new Unifier();
Term t = ASSyntax.parseTerm("{ +a(10) }");
assertTrue(t.isPlanBody());
- assertEquals("{ +a(10)[source(self)] }", t.toString());
+ assertEquals("{ +a(10)[source(self)] }", t.toString()); // plan terms should not have default annotations
t = ASSyntax.parseTerm("{ @label(a,b,10,test,long,label) +a(10) }");
assertTrue(t instanceof Plan);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|