From: <jom...@us...> - 2013-12-10 12:14:13
|
Revision: 1765 http://sourceforge.net/p/jason/svn/1765 Author: jomifred Date: 2013-12-10 12:14:10 +0000 (Tue, 10 Dec 2013) Log Message: ----------- fix a bug in the parser (true was an atom instead of an instance of LTrue) add source in plan body literals at compilation time (instead of runtime as done previously) Modified Paths: -------------- trunk/applications/as-unit-test/src/jason/tests/TestAll.java trunk/src/jason/asSemantics/TransitionSystem.java trunk/src/jason/asSyntax/Literal.java trunk/src/jason/asSyntax/PlanBodyImpl.java trunk/src/jason/asSyntax/Pred.java trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc trunk/src/jason/asSyntax/parser/as2j.java trunk/src/jason/bb/BeliefBase.java trunk/src/jason/bb/DefaultBeliefBase.java trunk/src/jason/stdlib/add_nested_source.java trunk/src/test/ASParserTest.java trunk/src/test/PlanTest.java trunk/src/test/StdLibTest.java Added Paths: ----------- trunk/applications/as-unit-test/src/jason/tests/BugEval.java trunk/src/test/TestAll.java Added: trunk/applications/as-unit-test/src/jason/tests/BugEval.java =================================================================== --- trunk/applications/as-unit-test/src/jason/tests/BugEval.java (rev 0) +++ trunk/applications/as-unit-test/src/jason/tests/BugEval.java 2013-12-10 12:14:10 UTC (rev 1765) @@ -0,0 +1,33 @@ +package jason.tests; + +import jason.asunit.TestAgent; + +import org.junit.Before; +import org.junit.Test; + +/** based on bug found by Grimaldo */ +public class BugEval { + + TestAgent ag; + + // initialisation of the agent test + @Before + public void setupAg() { + ag = new TestAgent(); + + // defines the agent's AgentSpeak code + ag.parseAScode( + "+!start <- A1 = false; B1 = true; .eval(X1, A1 | B1); jason.asunit.print(X1); "+ + " !a2(A2); !b2(B2); .eval(X2, A2 | B2); jason.asunit.print(X2). "+ + "+!a2(false). +!b2(true). " + ); + } + + @Test(timeout=2000) + public void test() { + ag.addGoal("start"); + ag.assertPrint("true", 10); + ag.assertPrint("true", 10); + } + +} Modified: trunk/applications/as-unit-test/src/jason/tests/TestAll.java =================================================================== --- trunk/applications/as-unit-test/src/jason/tests/TestAll.java 2013-12-02 18:22:10 UTC (rev 1764) +++ trunk/applications/as-unit-test/src/jason/tests/TestAll.java 2013-12-10 12:14:10 UTC (rev 1765) @@ -15,6 +15,7 @@ BugIfLength.class, BugUnamedVars.class, BugList1.class, + BugEval.class, TestAddLogExprInBB.class, TestGoalSource.class, TestIA.class, Modified: trunk/src/jason/asSemantics/TransitionSystem.java =================================================================== --- trunk/src/jason/asSemantics/TransitionSystem.java 2013-12-02 18:22:10 UTC (rev 1764) +++ trunk/src/jason/asSemantics/TransitionSystem.java 2013-12-10 12:14:10 UTC (rev 1765) @@ -51,7 +51,6 @@ import jason.asSyntax.UnnamedVar; import jason.asSyntax.VarTerm; import jason.asSyntax.parser.ParseException; -import jason.bb.BeliefBase; import jason.runtime.Settings; import jason.stdlib.add_nested_source; import jason.stdlib.desire; @@ -864,14 +863,14 @@ } if (adds != null) renamedVars.function.putAll(adds); - //System.out.println("depois "+body+" "+renamedVars+" u="+u); // end code for TRO } } - body = body.forceFullLiteralImpl(); - if (!body.hasSource()) { // do not add source(self) in case the programmer set the source - body.addAnnot(BeliefBase.TSelf); - } + //the code below is done in the PlanBody constructor + //body = body.forceFullLiteralImpl(); + //if (!body.hasSource()) { // do not add source(self) in case the programmer set the source + // body.addAnnot(BeliefBase.TSelf); + //} return body; } Modified: trunk/src/jason/asSyntax/Literal.java =================================================================== --- trunk/src/jason/asSyntax/Literal.java 2013-12-02 18:22:10 UTC (rev 1764) +++ trunk/src/jason/asSyntax/Literal.java 2013-12-10 12:14:10 UTC (rev 1765) @@ -278,7 +278,7 @@ qProfiling = null; startTime = 0; } - + final Iterator<Literal> il = ag.getBB().getCandidateBeliefs(this, un); if (il == null) // no relevant bels return LogExpr.EMPTY_UNIF_LIST.iterator(); Modified: trunk/src/jason/asSyntax/PlanBodyImpl.java =================================================================== --- trunk/src/jason/asSyntax/PlanBodyImpl.java 2013-12-02 18:22:10 UTC (rev 1764) +++ trunk/src/jason/asSyntax/PlanBodyImpl.java 2013-12-10 12:14:10 UTC (rev 1765) @@ -2,6 +2,7 @@ import jason.asSemantics.Agent; import jason.asSemantics.Unifier; +import jason.bb.BeliefBase; import java.util.Iterator; import java.util.logging.Level; @@ -45,9 +46,30 @@ formType = t; if (b != null) { srcInfo = b.getSrcInfo(); - // the atom issue is solved in TS - //if (b.isAtom()) - // b = ((Atom)b).forceFullLiteralImpl(); + + // add source(self) in some commands (it is preferred to do this at compile time than runtime) + if (b instanceof Literal) { + switch (t) { + case achieve: + case achieveNF: + case addBel: + case addBelBegin: + case addBelEnd: + case addBelNewFocus: + case delBel: + case delAddBel: + + Literal l = (Literal)b; + l = l.forceFullLiteralImpl(); + if (!l.hasSource()) { // do not add source(self) in case the programmer set the source + l.addAnnot(BeliefBase.TSelf); + } + b = l; + + default: + break; + } + } } term = b; } Modified: trunk/src/jason/asSyntax/Pred.java =================================================================== --- trunk/src/jason/asSyntax/Pred.java 2013-12-02 18:22:10 UTC (rev 1764) +++ trunk/src/jason/asSyntax/Pred.java 2013-12-10 12:14:10 UTC (rev 1765) @@ -434,8 +434,34 @@ return false; } - public static Term createSource(Term source) { - Structure s = new Structure("source",1); + public static Pred createSource(Term source) { + Pred s; + if (source.isGround()) { + s = new Pred("source",1) { + @Override + public Term clone() { + return this; + } + @Override + public Term capply(Unifier u) { + return this; + } + @Override + public boolean isGround() { + return true; + } + @Override + public Literal makeVarsAnnon() { + return this; + } + @Override + public Literal makeVarsAnnon(Unifier un) { + return this; + } + }; + } else { // source is a var, so cannot be optimised + s = new Pred("source",1); + } s.addTerm(source); return s; } Modified: trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc =================================================================== --- trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2013-12-02 18:22:10 UTC (rev 1764) +++ trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2013-12-10 12:14:10 UTC (rev 1765) @@ -108,11 +108,13 @@ private Term changeToAtom(Object o) { Term u = (Term)o; - if (u.isAtom()) { + if (u == Literal.LTrue) + return u; + if (u == Literal.LFalse) + return u; + if (u.isAtom()) return new Atom((Literal)u); - } else { - return u; - } + return u; } } Modified: trunk/src/jason/asSyntax/parser/as2j.java =================================================================== --- trunk/src/jason/asSyntax/parser/as2j.java 2013-12-02 18:22:10 UTC (rev 1764) +++ trunk/src/jason/asSyntax/parser/as2j.java 2013-12-10 12:14:10 UTC (rev 1765) @@ -77,11 +77,13 @@ private Term changeToAtom(Object o) { Term u = (Term)o; - if (u.isAtom()) { + if (u == Literal.LTrue) + return u; + if (u == Literal.LFalse) + return u; + if (u.isAtom()) return new Atom((Literal)u); - } else { - return u; - } + return u; } /* AgentSpeak Grammar */ @@ -1774,13 +1776,13 @@ return false; } - final private boolean jj_3R_47() { - if (jj_3R_55()) return true; + final private boolean jj_3R_39() { + if (jj_3R_31()) return true; return false; } - final private boolean jj_3R_39() { - if (jj_3R_31()) return true; + final private boolean jj_3R_47() { + if (jj_3R_55()) return true; return false; } Modified: trunk/src/jason/bb/BeliefBase.java =================================================================== --- trunk/src/jason/bb/BeliefBase.java 2013-12-02 18:22:10 UTC (rev 1764) +++ trunk/src/jason/bb/BeliefBase.java 2013-12-10 12:14:10 UTC (rev 1765) @@ -47,10 +47,10 @@ public static final Term APercept = new Atom("percept"); /** represents the structure 'source(percept)' */ - public static final Term TPercept = Pred.createSource(APercept); + public static final Pred TPercept = Pred.createSource(APercept); /** represents the structure 'source(self)' */ - public static final Term TSelf = Pred.createSource(ASelf); + public static final Pred TSelf = Pred.createSource(ASelf); /** * Called before the MAS execution with the agent that uses this Modified: trunk/src/jason/bb/DefaultBeliefBase.java =================================================================== --- trunk/src/jason/bb/DefaultBeliefBase.java 2013-12-02 18:22:10 UTC (rev 1764) +++ trunk/src/jason/bb/DefaultBeliefBase.java 2013-12-10 12:14:10 UTC (rev 1765) @@ -163,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)) { - boolean b = percepts.remove(bl); + 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/jason/stdlib/add_nested_source.java =================================================================== --- trunk/src/jason/stdlib/add_nested_source.java 2013-12-02 18:22:10 UTC (rev 1764) +++ trunk/src/jason/stdlib/add_nested_source.java 2013-12-10 12:14:10 UTC (rev 1765) @@ -85,8 +85,7 @@ @Override public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception { checkArguments(args); - Term result = addAnnotToList(args[0], args[1]); - return un.unifies(result,args[2]); + return un.unifies(addAnnotToList(args[0], args[1]),args[2]); } public static Term addAnnotToList(Term l, Term source) { @@ -108,7 +107,8 @@ } // create the source annots - Literal ts = new Pred("source",1).addTerms(source).addAnnots(result.getAnnots("source")); + //Literal ts = new Pred("source",1).addTerms(source).addAnnots(result.getAnnots("source")); + Literal ts = Pred.createSource(source).addAnnots(result.getAnnots("source")); result.delSources(); result.addAnnot(ts); Modified: trunk/src/test/ASParserTest.java =================================================================== --- trunk/src/test/ASParserTest.java 2013-12-02 18:22:10 UTC (rev 1764) +++ trunk/src/test/ASParserTest.java 2013-12-10 12:14:10 UTC (rev 1765) @@ -53,6 +53,13 @@ assertFalse(l1.equals(l2)); } + public void testTrue() throws ParseException { + Term t = ASSyntax.parseTerm("true"); + assertEquals("jason.asSyntax.Literal$TrueLiteral", t.getClass().getName()); + t = ASSyntax.parseTerm("false"); + assertEquals("jason.asSyntax.Literal$FalseLiteral", t.getClass().getName()); + } + public void testKQML() { Agent ag = new Agent(); ag.initAg(); @@ -214,7 +221,7 @@ public void testParsingPlanBodyTerm1() throws ParseException { 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("p({ a1({ f }); a2 },a3,{ !g[source(self)] },{ ?b; .print(oi) },10)", l.toString()); assertEquals(5,l.getArity()); assertTrue(l.getTerm(0) instanceof PlanBody); assertTrue(l.getTerm(0).isPlanBody()); @@ -244,7 +251,7 @@ Unifier un = new Unifier(); Term t = ASSyntax.parseTerm("{ +a(10) }"); assertTrue(t.isPlanBody()); - assertEquals("{ +a(10) }", t.toString()); + assertEquals("{ +a(10)[source(self)] }", t.toString()); t = ASSyntax.parseTerm("{ @label(a,b,10,test,long,label) +a(10) }"); assertTrue(t instanceof Plan); @@ -252,10 +259,10 @@ t = ASSyntax.parseTerm("{ -+a(10) }"); assertTrue(t.isPlanBody()); - assertEquals("{ -+a(10) }", t.toString()); + assertEquals("{ -+a(10)[source(self)] }", t.toString()); t = ASSyntax.parseTerm("{ -a; +b }"); - assertEquals("{ -a; +b }", t.toString()); + assertEquals("{ -a[source(self)]; +b[source(self)] }", t.toString()); assertTrue(t.isPlanBody()); PlanBody pb = (PlanBody)t; assertEquals(2, pb.getPlanSize()); @@ -278,18 +285,18 @@ assertTrue(t.isPlanBody()); pb = (PlanBody)t; assertEquals(1, pb.getPlanSize()); - assertEquals("a", pb.getBodyTerm().toString()); + assertEquals("a[source(self)]", pb.getBodyTerm().toString()); assertEquals(PlanBody.BodyType.achieve, pb.getBodyType()); t = ASSyntax.parseTerm("{ +!a <- +b }"); - assertEquals("{ +!a <- +b }", t.toString()); + assertEquals("{ +!a <- +b[source(self)] }", t.toString()); assertTrue(t.isStructure()); s = (Structure)t; assertEquals(4, s.getArity()); assertEquals("plan", s.getFunctor()); t = ASSyntax.parseTerm("{ +a <- +c }"); - assertEquals("{ +a <- +c }", t.toString()); + assertEquals("{ +a <- +c[source(self)] }", t.toString()); assertTrue(t.isStructure()); s = (Structure)t; assertEquals(4, s.getArity()); Modified: trunk/src/test/PlanTest.java =================================================================== --- trunk/src/test/PlanTest.java 2013-12-02 18:22:10 UTC (rev 1764) +++ trunk/src/test/PlanTest.java 2013-12-10 12:14:10 UTC (rev 1765) @@ -108,9 +108,9 @@ //assertEquals(p1.getBody().getArity(), bl.getArity()); Unifier u = new Unifier(); assertTrue(u.unifies(p1.getBody(), bl)); - assertEquals("a1", u.get("A1").toString()); + assertEquals("a1[source(self)]", u.get("A1").toString()); assertEquals("a2", u.get("A2").toString()); - assertEquals(".print(a); !g1", u.get("A3").toString()); + assertEquals(".print(a); !g1[source(self)]", u.get("A3").toString()); } public void testPlanTermWithVarBody() throws ParseException { Modified: trunk/src/test/StdLibTest.java =================================================================== --- trunk/src/test/StdLibTest.java 2013-12-02 18:22:10 UTC (rev 1764) +++ trunk/src/test/StdLibTest.java 2013-12-10 12:14:10 UTC (rev 1765) @@ -104,6 +104,13 @@ VarTerm r = new VarTerm("R"); aa.execute(null, u, new Term[] { x.capply(u), annot, r }); assertEquals("a[source(jomi)]", r.capply(u).toString()); + Term t = ASSyntax.parseTerm(r.capply(u).toString()); + Term s = ASSyntax.parseTerm("bob"); + r = new VarTerm("R"); + u = new Unifier(); + aa.execute(null, u, new Term[] { t, s, r }); + assertEquals("a[source(bob)[source(jomi)]]", r.capply(u).toString()); + } public void testFindAll() throws RevisionFailedException, ParseException { Added: trunk/src/test/TestAll.java =================================================================== --- trunk/src/test/TestAll.java (rev 0) +++ trunk/src/test/TestAll.java 2013-12-10 12:14:10 UTC (rev 1765) @@ -0,0 +1,23 @@ +package test; + +import org.junit.runner.RunWith; +import org.junit.runners.Suite; +import org.junit.runners.Suite.SuiteClasses; + +@RunWith(Suite.class) +@SuiteClasses({ + ASParserTest.class, + BeliefBaseTest.class, + ExprTermTest.class, + JadeAgTest.class, + ListTermTest.class, + MAS2JParserTest.class, + PlanTest.class, + RuleTest.class, + StdLibTest.class, + StringTermTest.class, + TermTest.class, + TSTest.class, + VarTermTest.class + }) +public class TestAll { } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |