From: <jom...@us...> - 2015-12-08 16:55:27
|
Revision: 1862 http://sourceforge.net/p/jason/svn/1862 Author: jomifred Date: 2015-12-08 16:55:24 +0000 (Tue, 08 Dec 2015) Log Message: ----------- change =.. to consider namespaces Modified Paths: -------------- trunk/applications/as-unit-test/src/jason/asunit/TestAgent.java trunk/applications/as-unit-test/src/jason/tests/TestNS.java trunk/src/jason/asSyntax/Atom.java trunk/src/jason/asSyntax/Literal.java trunk/src/jason/asSyntax/LiteralImpl.java trunk/src/jason/asSyntax/Pred.java trunk/src/jason/asSyntax/RelExpr.java trunk/src/jason/asSyntax/Structure.java trunk/src/jason/asSyntax/VarTerm.java trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc trunk/src/jason/asSyntax/parser/as2j.java trunk/src/jason/bb/ChainBBAdapter.java trunk/src/test/ExprTermTest.java trunk/src/test/NSTest.java Modified: trunk/applications/as-unit-test/src/jason/asunit/TestAgent.java =================================================================== --- trunk/applications/as-unit-test/src/jason/asunit/TestAgent.java 2015-12-07 18:35:12 UTC (rev 1861) +++ trunk/applications/as-unit-test/src/jason/asunit/TestAgent.java 2015-12-08 16:55:24 UTC (rev 1862) @@ -16,6 +16,7 @@ import jason.asSyntax.parser.ParseException; import jason.bb.BeliefBase; import jason.infra.centralised.RunCentralisedMAS; +import jason.jeditplugin.Config; import java.io.StringReader; import java.util.logging.Level; @@ -25,6 +26,7 @@ // creates the masRunner static { new RunCentralisedMAS(); + Config.get().setProperty(Config.START_WEB_MI, "false"); } Modified: trunk/applications/as-unit-test/src/jason/tests/TestNS.java =================================================================== --- trunk/applications/as-unit-test/src/jason/tests/TestNS.java 2015-12-07 18:35:12 UTC (rev 1861) +++ trunk/applications/as-unit-test/src/jason/tests/TestNS.java 2015-12-08 16:55:24 UTC (rev 1862) @@ -48,6 +48,15 @@ "+!var <- "+ " .findall(X, X, L); "+ " jason.asunit.print(L); "+ + ". " + + "+!builder <- "+ + " X =.. [p,[10,20],[a1]]; "+ + " jason.asunit.print(X); "+ + " nn::p(10,20)[a1] =.. V; "+ + " jason.asunit.print(V); "+ + " N::Y =.. [ns,p,[10,20],[a1]]; "+ + " jason.asunit.print(N,\"::\",Y); "+ + " jason.asunit.print(N::Y); "+ ". " ); @@ -76,7 +85,15 @@ bob.addGoal("var"); bob.assertPrint("[b(50,o)[source(self)],b(0,k)[source(self)]]", 10); - } + + @Test(timeout=2000) + public void testOperator() { + bob.addGoal("builder"); + bob.assertPrint("p(10,20)[a1]", 10); + bob.assertPrint("[nn,p,[10,20],[a1]]", 10); + bob.assertPrint("ns::p(10,20)[a1]", 10); + bob.assertPrint("ns::p(10,20)[a1]", 10); + } } Modified: trunk/src/jason/asSyntax/Atom.java =================================================================== --- trunk/src/jason/asSyntax/Atom.java 2015-12-07 18:35:12 UTC (rev 1861) +++ trunk/src/jason/asSyntax/Atom.java 2015-12-08 16:55:24 UTC (rev 1862) @@ -69,7 +69,7 @@ this.ns = namespace; predicateIndicatorCache = l.predicateIndicatorCache; hashCodeCache = l.hashCodeCache; - srcInfo = l.srcInfo; + srcInfo = l.srcInfo; } public String getFunctor() { @@ -85,6 +85,14 @@ } @Override + public Term capply(Unifier u) { + if (ns.isVar()) + return new Atom(this, u); + else + return this; + } + + @Override public Literal cloneNS(Atom newnamespace) { return new Atom(newnamespace, this); } @@ -100,7 +108,7 @@ if (o == this) return true; if (o instanceof Atom) { Atom a = (Atom)o; - //System.out.println(getFunctor() +" ==== " + a.getFunctor() + " is "+ (a.isAtom())); // && getFunctor().equals(a.getFunctor()))); + //System.out.println(getFunctor() +" ==== " + a.getFunctor() + " atom "+ a.isAtom() + " ns " + getNS() + "/" + a.getNS()); // && getFunctor().equals(a.getFunctor()))); return a.isAtom() && getFunctor().equals(a.getFunctor()) && getNS().equals(a.getNS()); } return false; Modified: trunk/src/jason/asSyntax/Literal.java =================================================================== --- trunk/src/jason/asSyntax/Literal.java 2015-12-07 18:35:12 UTC (rev 1861) +++ trunk/src/jason/asSyntax/Literal.java 2015-12-08 16:55:24 UTC (rev 1862) @@ -490,6 +490,7 @@ /** returns this literal as a list with three elements: [functor, list of terms, list of annots] */ public ListTerm getAsListOfTerms() { ListTerm l = new ListTermImpl(); + l.add(getNS()); l.add(new LiteralImpl(!negated(), getFunctor())); ListTerm lt = new ListTermImpl(); lt.addAll(getTerms()); @@ -502,11 +503,17 @@ return l; } - /** creates a literal from a list with three elements: [functor, list of terms, list of annots] */ + /** creates a literal from a list with four elements: [namespace, functor, list of terms, list of annots] + * (namespace is optional) + */ public static Literal newFromListOfTerms(ListTerm lt) throws JasonException { try { Iterator<Term> i = lt.iterator(); + Atom ns = DefaultNS; + if (lt.size() == 4) + ns = (Atom)i.next(); + Term tfunctor = i.next(); boolean pos = Literal.LPos; @@ -517,7 +524,7 @@ tfunctor = ASSyntax.parseTerm( ((StringTerm)tfunctor).getString() ); } - Literal l = new LiteralImpl(pos,((Atom)tfunctor).getFunctor()); + Literal l = new LiteralImpl(ns, pos,((Atom)tfunctor).getFunctor(),5); if (i.hasNext()) { l.setTerms(((ListTerm)i.next()).cloneLT()); @@ -574,7 +581,12 @@ protected int calcHashCode() { return getFunctor().hashCode(); }; - + + @Override + public Term capply(Unifier u) { + return this; + } + public String toString() { return getFunctor(); }; Modified: trunk/src/jason/asSyntax/LiteralImpl.java =================================================================== --- trunk/src/jason/asSyntax/LiteralImpl.java 2015-12-07 18:35:12 UTC (rev 1861) +++ trunk/src/jason/asSyntax/LiteralImpl.java 2015-12-08 16:55:24 UTC (rev 1862) @@ -51,8 +51,8 @@ } /** if pos == true, the literal is positive, otherwise it is negative */ - public LiteralImpl(Atom namespace, boolean pos, String functor) { - super(namespace, functor); + public LiteralImpl(Atom namespace, boolean pos, String functor, int nbTerms) { + super(namespace, functor, nbTerms); type = pos; } Modified: trunk/src/jason/asSyntax/Pred.java =================================================================== --- trunk/src/jason/asSyntax/Pred.java 2015-12-07 18:35:12 UTC (rev 1861) +++ trunk/src/jason/asSyntax/Pred.java 2015-12-08 16:55:24 UTC (rev 1862) @@ -50,8 +50,8 @@ super(functor); } - public Pred(Atom namespace, String functor) { - super(namespace, functor); + public Pred(Atom namespace, String functor, int nbTerms) { + super(namespace, functor, nbTerms); } public Pred(Literal l) { Modified: trunk/src/jason/asSyntax/RelExpr.java =================================================================== --- trunk/src/jason/asSyntax/RelExpr.java 2015-12-07 18:35:12 UTC (rev 1861) +++ trunk/src/jason/asSyntax/RelExpr.java 2015-12-08 16:55:24 UTC (rev 1862) @@ -104,19 +104,29 @@ // both are not vars, using normal unification if (!p.isVar() && !l.isVar()) { - if (un.unifies(p.getAsListOfTerms(), l)) { + ListTerm palt = p.getAsListOfTerms(); + if (l.size() == 3) // list without name space + palt = palt.getNext(); + if (un.unifies(palt, l)) { return LogExpr.createUnifIterator(un); } } else { // first is var, second is list, var is assigned to l transformed in literal - if (p.isVar() && l.isList() && un.unifies(p, Literal.newFromListOfTerms(l))) { - return LogExpr.createUnifIterator(un); + if (p.isVar() && l.isList()) { + if (un.unifies(p, Literal.newFromListOfTerms(l))) + return LogExpr.createUnifIterator(un); + else + LogExpr.EMPTY_UNIF_LIST.iterator(); + } // first is literal, second is var, var is assigned to l transformed in list - if (p.isLiteral() && l.isVar() && un.unifies(p.getAsListOfTerms(), l)) { - return LogExpr.createUnifIterator(un); + if (p.isLiteral() && l.isVar()) { + if (un.unifies(p.getAsListOfTerms(), l)) + return LogExpr.createUnifIterator(un); + else + LogExpr.EMPTY_UNIF_LIST.iterator(); } // both are vars, error Modified: trunk/src/jason/asSyntax/Structure.java =================================================================== --- trunk/src/jason/asSyntax/Structure.java 2015-12-07 18:35:12 UTC (rev 1861) +++ trunk/src/jason/asSyntax/Structure.java 2015-12-08 16:55:24 UTC (rev 1862) @@ -63,10 +63,11 @@ this.terms = new ArrayList<Term>(5); } - public Structure(Atom namespace, String functor) { + public Structure(Atom namespace, String functor, int nbTerms) { //this.functor = (functor == null ? null : functor.intern()); // it does not improve performance in test i did! super(namespace, functor); - this.terms = new ArrayList<Term>(5); + if (nbTerms > 0) + this.terms = new ArrayList<Term>(5); } @@ -194,28 +195,11 @@ } else { return super.subsumes(t); } - } - + } - /* @Override - public boolean apply(Unifier u) { - boolean r = false; - // do not use iterator! (see ListTermImpl class) - final int tss = getArity(); - for (int i = 0; i < tss; i++) { - boolean tr = getTerm(i).apply(u); - r = r || tr; - } - if (r) - resetHashCodeCache(); - return r; - } - */ - - @Override public Term capply(Unifier u) { - return new Structure(this,u); + return new Structure(this, u); } /** make a deep copy of the terms */ Modified: trunk/src/jason/asSyntax/VarTerm.java =================================================================== --- trunk/src/jason/asSyntax/VarTerm.java 2015-12-07 18:35:12 UTC (rev 1861) +++ trunk/src/jason/asSyntax/VarTerm.java 2015-12-08 16:55:24 UTC (rev 1862) @@ -71,7 +71,7 @@ } public VarTerm(Atom namespace, String functor) { - super(namespace, LPos, functor); + super(namespace, LPos, functor, 0); } public VarTerm(Atom namespace, Literal v) { @@ -121,7 +121,7 @@ if (getNS() != Literal.DefaultNS && vl.isLiteral()) { // use var ns for the value ns - vl = ((Literal)vl).cloneNS(getNS()); + vl = ((Literal)vl).cloneNS( (Atom)getNS().capply(u) ); // this var ns could be a var, so capply } // decide whether to use var annots in apply Modified: trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc =================================================================== --- trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2015-12-07 18:35:12 UTC (rev 1861) +++ trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2015-12-08 16:55:24 UTC (rev 1862) @@ -112,8 +112,12 @@ return u; if (u == Literal.LFalse) return u; - if (u.isAtom()) - return new Atom((Literal)u); + if (u.isAtom()) { + if (((Atom)u).getFunctor().equals("default")) + return Literal.DefaultNS; + else + return new Atom((Literal)u); + } return u; } Modified: trunk/src/jason/asSyntax/parser/as2j.java =================================================================== --- trunk/src/jason/asSyntax/parser/as2j.java 2015-12-07 18:35:12 UTC (rev 1861) +++ trunk/src/jason/asSyntax/parser/as2j.java 2015-12-08 16:55:24 UTC (rev 1862) @@ -81,8 +81,12 @@ return u; if (u == Literal.LFalse) return u; - if (u.isAtom()) - return new Atom((Literal)u); + if (u.isAtom()) { + if (((Atom)u).getFunctor().equals("default")) + return Literal.DefaultNS; + else + return new Atom((Literal)u); + } return u; } @@ -1625,16 +1629,6 @@ finally { jj_save(3, xla); } } - final private boolean jj_3R_119() { - if (jj_3R_108()) return true; - return false; - } - - final private boolean jj_3R_118() { - if (jj_scan_token(41)) return true; - return false; - } - final private boolean jj_3R_117() { if (jj_3R_124()) return true; return false; @@ -2606,6 +2600,16 @@ return false; } + final private boolean jj_3R_119() { + if (jj_3R_108()) return true; + return false; + } + + final private boolean jj_3R_118() { + if (jj_scan_token(41)) return true; + return false; + } + public as2jTokenManager token_source; SimpleCharStream jj_input_stream; public Token token, jj_nt; Modified: trunk/src/jason/bb/ChainBBAdapter.java =================================================================== --- trunk/src/jason/bb/ChainBBAdapter.java 2015-12-07 18:35:12 UTC (rev 1861) +++ trunk/src/jason/bb/ChainBBAdapter.java 2015-12-08 16:55:24 UTC (rev 1862) @@ -2,12 +2,14 @@ import jason.asSemantics.Agent; import jason.asSemantics.Unifier; +import jason.asSyntax.Atom; import jason.asSyntax.Literal; import jason.asSyntax.PredicateIndicator; import jason.bb.BeliefBase; import jason.bb.DefaultBeliefBase; import java.util.Iterator; +import java.util.Set; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -93,6 +95,11 @@ nextBB.clear(); } + @Override + public Set<Atom> getNameSpaces() { + return nextBB.getNameSpaces(); + } + public boolean add(Literal l) { return nextBB.add(l); } Modified: trunk/src/test/ExprTermTest.java =================================================================== --- trunk/src/test/ExprTermTest.java 2015-12-07 18:35:12 UTC (rev 1861) +++ trunk/src/test/ExprTermTest.java 2015-12-08 16:55:24 UTC (rev 1862) @@ -125,7 +125,7 @@ public void testLiteralBuilder() throws JasonException { Literal l = Literal.parseLiteral("~p(t1,t2)[a1,a2]"); - assertEquals(l.getAsListOfTerms().size(), 3); + assertEquals(l.getAsListOfTerms().size(), 4); ListTerm lt1 = ListTermImpl.parseList("[~p,[t1,t2],[a1,a2]]"); assertTrue(l.equals(Literal.newFromListOfTerms(lt1))); @@ -137,7 +137,7 @@ Unifier u = new Unifier(); assertFalse(u.unifies(lt1, lt2)); - assertTrue(new RelExpr(l, RelExpr.RelationalOp.literalBuilder, lt1).logicalConsequence(null, u).hasNext()); + assertTrue( new RelExpr(l, RelExpr.RelationalOp.literalBuilder, lt1).logicalConsequence(null, u).hasNext()); assertFalse(new RelExpr(l, RelExpr.RelationalOp.literalBuilder, lt2).logicalConsequence(null, u).hasNext()); assertFalse(new RelExpr(l, RelExpr.RelationalOp.literalBuilder, lt3).logicalConsequence(null, u).hasNext()); @@ -150,14 +150,17 @@ u.clear(); assertTrue(new RelExpr(l, RelExpr.RelationalOp.literalBuilder, v).logicalConsequence(null, u).hasNext()); - assertEquals(u.get("X").toString(), lt1.toString()); - assertEquals(u.get("X"), lt1); - assertEquals(lt1, u.get("X")); + ListTerm lt4 = ListTermImpl.parseList("[default,~p,[t1,t2],[a1,a2]]"); + System.out.println(u); + assertEquals(u.get("X").toString(), lt4.toString()); + assertEquals(u.get("X"), lt4); + assertEquals(lt4, u.get("X")); + l = Literal.parseLiteral("p(t1,t2)"); - assertEquals(l.getAsListOfTerms().size(), 3); - assertEquals(((ListTerm)l.getAsListOfTerms().get(1)).size(), 2); - assertEquals(((ListTerm)l.getAsListOfTerms().get(2)).size(), 0); + assertEquals(l.getAsListOfTerms().size(), 4); + assertEquals(((ListTerm)l.getAsListOfTerms().get(2)).size(), 2); + assertEquals(((ListTerm)l.getAsListOfTerms().get(3)).size(), 0); } Modified: trunk/src/test/NSTest.java =================================================================== --- trunk/src/test/NSTest.java 2015-12-07 18:35:12 UTC (rev 1861) +++ trunk/src/test/NSTest.java 2015-12-08 16:55:24 UTC (rev 1862) @@ -2,6 +2,7 @@ import jason.asSemantics.Unifier; import jason.asSyntax.ASSyntax; +import jason.asSyntax.Atom; import jason.asSyntax.Literal; import jason.asSyntax.Term; import jason.asSyntax.VarTerm; @@ -132,7 +133,22 @@ assertFalse(u.unifies(p1, p6)); } - + + public void testApply() throws ParseException { + Term t = ASSyntax.parseTerm("A::bob"); + Unifier u = new Unifier(); + u.unifies(new VarTerm("A"), new Atom("ns")); + t = t.capply(u); + assertEquals("ns::bob", t.toString()); + + t = ASSyntax.parseTerm("A::~bob(10)[a(20)]"); + u = new Unifier(); + u.unifies(new VarTerm("A"), new Atom("ns")); + t = t.capply(u); + assertEquals("ns::~bob(10)[a(20)]", t.toString()); + + } + public void testConstants() throws ParseException { Unifier u = new Unifier(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |