From: <jom...@us...> - 2015-12-07 18:35:14
|
Revision: 1861 http://sourceforge.net/p/jason/svn/1861 Author: jomifred Date: 2015-12-07 18:35:12 +0000 (Mon, 07 Dec 2015) Log Message: ----------- clean code of var term (from old commented code) Modified Paths: -------------- trunk/src/jason/asSemantics/Unifier.java trunk/src/jason/asSyntax/Atom.java trunk/src/jason/asSyntax/LiteralImpl.java trunk/src/jason/asSyntax/Pred.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/test/NSTest.java Added Paths: ----------- trunk/applications/as-unit-test/src/jason/tests/TestNS.java Added: trunk/applications/as-unit-test/src/jason/tests/TestNS.java =================================================================== --- trunk/applications/as-unit-test/src/jason/tests/TestNS.java (rev 0) +++ trunk/applications/as-unit-test/src/jason/tests/TestNS.java 2015-12-07 18:35:12 UTC (rev 1861) @@ -0,0 +1,82 @@ +package jason.tests; + +import jason.asunit.TestAgent; + +import org.junit.Before; +import org.junit.Test; + +public class TestNS { + + TestAgent bob; + + // initialisation of the agents + @Before + public void setupAgs() { + bob = new TestAgent("bob"); + + // defines the agent's AgentSpeak code + bob.parseAScode( + "+!bb <- "+ + " +b(0, k); "+ + " +ns1::b(10, ns1::test); "+ + " +ns2::b(20, a); "+ + " ?b(X,Y); "+ + " jason.asunit.print(X,Y); "+ + " ?ns1::b(X2,ns1::_); "+ + " jason.asunit.print(X2); "+ + " ?ns2::b(X3,_); "+ + " jason.asunit.print(X3); "+ + " +Y::b(40,o); "+ + " +default::b(50,o); "+ + ". "+ + "+!fa <- "+ + " .findall(FV, b(FV,_), L); "+ + " jason.asunit.print(L); "+ + ". " + + "+!fa(NS) <- "+ + " .findall(FV, NS::b(FV,_::_), L); "+ + " jason.asunit.print(L); "+ + ". \n" + + "+!ia : .name_space(ns1) <- "+ + " .findall(J, .name_space(J), L); "+ + " jason.asunit.print(L); "+ + " .findall(X, .name_space(NS) & NS::b(X,_::_), L2); "+ + " jason.asunit.print(L2); "+ + " .findall(NS, NS::b(_,o), L3); "+ // all name spaces with b(_,o) + " jason.asunit.print(L3); "+ + ". " + + "+!var <- "+ + " .findall(X, X, L); "+ + " jason.asunit.print(L); "+ + ". " + ); + + } + + @Test(timeout=2000) + public void testBB() { + bob.addGoal("bb"); + bob.assertPrint("0k", 10); + bob.assertPrint("10", 10); + bob.assertPrint("20", 10); + bob.assertBel("k::b(40,o)", 10); + bob.assertBel("b(50,o)", 10); + + bob.addGoal("fa"); + bob.assertPrint("[50,0]", 10); + bob.addGoal("fa(default)"); + bob.assertPrint("[50,0]", 10); + bob.addGoal("fa(ns1)"); + bob.assertPrint("[10]", 10); + + bob.addGoal("ia"); + bob.assertPrint("[default,ns1,ns2,k]", 10); + bob.assertPrint("[50,0,10,20,40]", 10); + bob.assertPrint("[default,k]", 10); + + bob.addGoal("var"); + bob.assertPrint("[b(50,o)[source(self)],b(0,k)[source(self)]]", 10); + + } + +} Modified: trunk/src/jason/asSemantics/Unifier.java =================================================================== --- trunk/src/jason/asSemantics/Unifier.java 2015-12-07 17:16:38 UTC (rev 1860) +++ trunk/src/jason/asSemantics/Unifier.java 2015-12-07 18:35:12 UTC (rev 1861) @@ -298,14 +298,13 @@ } private boolean unifiesNamespace(Literal t1s, Literal t2s) { - if (t1s != Literal.DefaultNS || t2s != Literal.DefaultNS) { // if both are not default NS - Atom nst1 = (t1s == Literal.DefaultNS ? Literal.DefaultNS : t1s.getNS()); //(t1s instanceof Atom ? ((Atom)t1s).getNS() : Literal.DefaultNS)); - Atom nst2 = (t2s == Literal.DefaultNS ? Literal.DefaultNS : t2s.getNS()); //(t2s instanceof Atom ? ((Atom)t2s).getNS() : Literal.DefaultNS)); - //System.out.println(nst1.getFunctor()+" == "+ nst2.getFunctor()); //+" ==> "+unifiesNoUndo(nst1, nst2)); - //return nst1.getFunctor().equals(nst2.getFunctor()); - return unifiesNoUndo(nst1, nst2); + if (t1s == Literal.DefaultNS && t2s == Literal.DefaultNS) { // if both are the default NS + return true; } - return true; + Atom nst1 = (t1s == Literal.DefaultNS ? Literal.DefaultNS : t1s.getNS()); + Atom nst2 = (t2s == Literal.DefaultNS ? Literal.DefaultNS : t2s.getNS()); + //System.out.println(nst1.getFunctor()+" == "+ nst2.getFunctor()); //+" ==> "+unifiesNoUndo(nst1, nst2)); + return unifiesNoUndo(nst1, nst2); } public VarTerm deref(VarTerm v) { @@ -327,11 +326,13 @@ } public boolean bind(VarTerm vt1, VarTerm vt2) { + if (! vt1.getNS().equals(vt2.getNS())) + return false; + if (vt1.negated() && vt2.negated()) { // in the case of ~A = ~B, put A=B in the unifier vt1 = new VarTerm(vt1.getFunctor()); vt2 = new VarTerm(vt2.getFunctor()); } - final int comp = vt1.compareTo(vt2); if (comp < 0) { function.put((VarTerm)vt1.clone(), vt2.clone()); @@ -359,20 +360,16 @@ if (vl.isLiteral()) { Literal lvl = (Literal)vl; - //if (!vt.getNS().equals( lvl.getNS()) ) { - if (! unifiesNamespace(vt, lvl) ) { - //System.out.println("f "+vt+ " /== " + vl); //((Literal)vl).getNS() ); + if (! unifiesNamespace(vt, lvl) ) return false; - } - if ( lvl.getNS() != Literal.DefaultNS) { + if ( lvl.getNS() != Literal.DefaultNS) vl = lvl.cloneNS(Literal.DefaultNS); - } } if (!vl.isCyclicTerm() && vl.hasVar(vt, this)) { vl = new CyclicTerm((Literal)vl, (VarTerm)vt.clone()); } - //System.out.println("add bind "+vt+" -> "+vl); + function.put((VarTerm) vt.clone(), vl); return true; } Modified: trunk/src/jason/asSyntax/Atom.java =================================================================== --- trunk/src/jason/asSyntax/Atom.java 2015-12-07 17:16:38 UTC (rev 1860) +++ trunk/src/jason/asSyntax/Atom.java 2015-12-07 18:35:12 UTC (rev 1861) @@ -43,10 +43,7 @@ private final Atom ns; // name space public Atom(String functor) { - if (functor == null) - logger.log(Level.WARNING, "The functor of an atom functor should not be null!", new Exception()); - this.functor = functor; - this.ns = DefaultNS; + this(DefaultNS, functor); } protected Atom(Atom namespace, String functor) { Modified: trunk/src/jason/asSyntax/LiteralImpl.java =================================================================== --- trunk/src/jason/asSyntax/LiteralImpl.java 2015-12-07 17:16:38 UTC (rev 1860) +++ trunk/src/jason/asSyntax/LiteralImpl.java 2015-12-07 18:35:12 UTC (rev 1861) @@ -50,6 +50,12 @@ type = pos; } + /** if pos == true, the literal is positive, otherwise it is negative */ + public LiteralImpl(Atom namespace, boolean pos, String functor) { + super(namespace, functor); + type = pos; + } + public LiteralImpl(Literal l) { super(l); type = !l.negated(); @@ -165,13 +171,6 @@ return predicateIndicatorCache; } - public String toString() { - if (type == LPos) - return super.toString(); - else - return "~" + super.toString(); - } - /** get as XML */ @Override public Element getAsDOM(Document document) { Modified: trunk/src/jason/asSyntax/Pred.java =================================================================== --- trunk/src/jason/asSyntax/Pred.java 2015-12-07 17:16:38 UTC (rev 1860) +++ trunk/src/jason/asSyntax/Pred.java 2015-12-07 18:35:12 UTC (rev 1861) @@ -50,6 +50,10 @@ super(functor); } + public Pred(Atom namespace, String functor) { + super(namespace, functor); + } + public Pred(Literal l) { this(l.getNS(), l); } @@ -608,12 +612,6 @@ return super.toString(); } - public String toString() { - String s = super.toString(); - if (hasAnnot()) s += annots.toString(); - return s; - } - /** get as XML */ @Override public Element getAsDOM(Document document) { Modified: trunk/src/jason/asSyntax/Structure.java =================================================================== --- trunk/src/jason/asSyntax/Structure.java 2015-12-07 17:16:38 UTC (rev 1860) +++ trunk/src/jason/asSyntax/Structure.java 2015-12-07 18:35:12 UTC (rev 1861) @@ -62,7 +62,14 @@ super(functor); this.terms = new ArrayList<Term>(5); } + + public Structure(Atom namespace, String functor) { + //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); + } + public Structure(Literal l) { this(l.getNS(), l); } @@ -449,6 +456,8 @@ s.append(getNS()); s.append("::"); } + if (negated()) + s.append("~"); if (getFunctor() != null) s.append(getFunctor()); if (getArity() > 0) { @@ -460,6 +469,8 @@ } s.append(')'); } + if (hasAnnot()) + s.append(getAnnots().toString()); return s.toString(); } Modified: trunk/src/jason/asSyntax/VarTerm.java =================================================================== --- trunk/src/jason/asSyntax/VarTerm.java 2015-12-07 17:16:38 UTC (rev 1860) +++ trunk/src/jason/asSyntax/VarTerm.java 2015-12-07 18:35:12 UTC (rev 1861) @@ -71,8 +71,7 @@ } public VarTerm(Atom namespace, String functor) { - super(namespace, LPos, new Atom(functor)); // TODO: provide proper constructor - //System.out.println("****"+v+" "+this); + super(namespace, LPos, functor); } public VarTerm(Atom namespace, Literal v) { @@ -94,6 +93,7 @@ protected int calcHashCode() { int result = getFunctor().hashCode(); if (negated()) result += 3271; + // Do not consider NS! return result; } @@ -159,18 +159,10 @@ return new VarTerm( newNameSpace, this); } - /* - public PlanBody clonePB() { - return (PlanBody)clone(); - } - */ - public ListTerm cloneLT() { return (ListTerm)clone(); } - - @Override public boolean isVar() { return true; @@ -185,110 +177,21 @@ return false; } - /** - * grounds a variable, set a value for this var - * (e.g. X = 10; Y = a(b,c); ...) - */ - /*public boolean setValue(Term vl) { - if (vl.isVar()) { - logger.log(Level.WARNING, "Attempted set a variable as a value for a variable, in " + this.getFunctor(), new Exception()); - return false; - } - - vl = vl.clone(); // should clone here, since there is no cloning in unify - // decide whether to use var annots in apply - // X = p[a] - // !X[b] - // what's the event: - // +!p[a] - // or - // +!p[a,b] - // Answer: use annots of var, useful for meta-programming like - // P[step(N)] - if (vl.isLiteral() && this.hasAnnot()) { // if this var has annots, add them in the value's annots (Experimental) - vl = ((Literal)vl).forceFullLiteralImpl().addAnnots(this.getAnnots()); - } - - value = vl; - resetHashCodeCache(); - return true; - }*/ - - /** returns true if this var has a value */ -/* - public boolean hasValue() { - return value != null; - } -*/ - /* - public boolean apply(Unifier u) { - if (value == null) { - Term vl = u.get(this); - if (vl != null) { - 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 in the apply below - //Term tempVl = vl.clone(); - //tempVl.apply(u); - Term tempVl = vl.capply(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; - } - vl = setValue(vl); - value.apply(u); // in case t has var args - return true; - } - } else { - return getValue().apply(u); - } - return false; - } - */ - - /** - * returns the value of this var. - */ - /* public Term getValue() { - return value; - }*/ - @Override public boolean equals(Object t) { if (t == null) return false; if (t == this) return true; - /*if (t instanceof Term) { - Term vl = getValue(); - // System.out.println("checking equals form "+tAsTerm.getFunctor()+" - // and this "+this.getFunctor()+" my value "+vl); - if (vl != null) { - // compare the values - return vl.equals(t); - } - */ - // is t also a var? (its value must also be null) - if (t instanceof VarTerm) { - final VarTerm tAsVT = (VarTerm) t; - //if (tAsVT.getValue() == null) { - return negated() == tAsVT.negated() && getFunctor().equals(tAsVT.getFunctor()); // && getNS().equals(tAsVT.getNS()); - // DO NOT consider ns in equals of hashcode! - - //} - } - //} + // is t also a var? (its value must also be null) + if (t instanceof VarTerm) { + final VarTerm tAsVT = (VarTerm) t; + // DO NOT consider ns in equals of hashcode! + return negated() == tAsVT.negated() && getFunctor().equals(tAsVT.getFunctor()); // && getNS().equals(tAsVT.getNS()); + } return false; } public int compareTo(Term t) { - /*if (value != null) - return value.compareTo(t); - else*/ if (t == null || t.isUnnamedVar()) + if (t == null || t.isUnnamedVar()) return -1; else if (t.isVar()) { if (!negated() && ((VarTerm)t).negated()) @@ -302,10 +205,7 @@ @Override public boolean subsumes(Term t) { - /*if (value != null) - return value.subsumes(t); - else */ - return true; + return true; } // ---------- @@ -314,139 +214,56 @@ // in case this VarTerm has a value, use value's methods // ---------- - /* @Override - public String getFunctor() { - if (value == null) { - return super.getFunctor(); - } else if (value instanceof Atom) { - return ((Atom)getValue()).getFunctor(); + public Iterator<Unifier> logicalConsequence(Agent ag, Unifier un) { + // try to apply + Term t = this.capply(un); + if ( t.equals(this) ) { + // the variable is still a Var, find all bels that unify. + return super.logicalConsequence(ag, un); } else { - return null; + // the clone is still a var + return ((LogicalFormula)t).logicalConsequence(ag, un); } } @Override - public PredicateIndicator getPredicateIndicator() { - if (value != null && value.isLiteral()) { - return ((Literal)value).getPredicateIndicator(); - } else if (predicateIndicatorCache == null) { - predicateIndicatorCache = new PredicateIndicator(getFunctor(), 0); - } - return predicateIndicatorCache; - } - - @Override - public int hashCode() { - if (value != null) - return value.hashCode(); - else - return getFunctor().hashCode(); - } - */ - - @Override - public Iterator<Unifier> logicalConsequence(Agent ag, Unifier un) { - /*if (value != null && value instanceof LogicalFormula) - return ((LogicalFormula)value).logicalConsequence(ag, un); - else {*/ - // try to apply - Term t = this.capply(un); - if ( t.equals(this) ) { - // the variable is still a Var, find all bels that unify. - return super.logicalConsequence(ag, un); - } else { - // the clone is still a var - return ((LogicalFormula)t).logicalConsequence(ag, un); - } - //} - } - - @Override public Term getTerm(int i) { - /*if (value != null && value.isStructure()) { - return ((Structure)getValue()).getTerm(i); - } else {*/ - return null; - //} + return null; } @Override public void addTerm(Term t) { - /*if (value != null) - if (value.isStructure()) - ((Structure)getValue()).addTerm(t); - else*/ - logger.log(Level.WARNING, "The addTerm '"+t+"' in "+this+" was lost, since I am a var.", new Exception()); + logger.log(Level.WARNING, "The addTerm '"+t+"' in "+this+" was lost, since I am a var.", new Exception()); } @Override public int getArity() { - /*if (value != null && value.isStructure()) { - return ((Structure)getValue()).getArity(); - } else {*/ - return 0; - //} + return 0; } @Override public List<Term> getTerms() { - /*if (value != null && value.isStructure()) { - return ((Structure)getValue()).getTerms(); - } else {*/ - return null; - //} + return null; } @Override public Literal setTerms(List<Term> l) { - /*if (value != null) { - if (value.isStructure()) { - return ((Structure)getValue()).setTerms(l); - } else { - logger.log(Level.WARNING, "The setTerms '"+l+"' in "+this+" was lost, since this var value is not a Structure. The value's class is "+getValue().getClass().getName(), new Exception()); - return null; - } - } else {*/ - return this; - //} + return this; } @Override public void setTerm(int i, Term t) { - /*if (value != null) - if (value.isStructure()) - ((Structure)getValue()).setTerm(i,t); - else - logger.log(Level.WARNING, "The setTerm '"+t+"' in "+this+" was lost, since this var value is not a Structure. The value's class is "+getValue().getClass().getName(), new Exception()); - */ } @Override public Literal addTerms(List<Term> l) { - /*if (value != null) - if (value.isStructure()) - return ((Structure)getValue()).addTerms(l); - else - logger.log(Level.WARNING, "The addTerms '"+l+"' in "+this+" was lost, since this var value is not a Structure. The value's class is "+getValue().getClass().getName(), new Exception()); - */ return this; } - /* @Override - public Term[] getTermsArray() { - if (value != null && value.isStructure()) { - return ((Structure)getValue()).getTermsArray(); - } else { - return null; - } - } - */ - - @Override public boolean isInternalAction() { return false; } @@ -506,20 +323,8 @@ return false; } - /* @Override - public VarTerm getCyclicVar() { - if (value != null) - return value.getCyclicVar(); - else - return super.getCyclicVar(); - } - */ - - @Override public boolean hasVar(VarTerm t, Unifier u) { - /*if (value != null) - return value.hasVar(t, u);*/ if (equals(t)) return true; @@ -541,246 +346,16 @@ @Override public void countVars(Map<VarTerm, Integer> c) { - //if (value == null) { - int n = c.containsKey(this) ? c.get(this) : 0; - c.put(this, n+1); - super.countVars(c); - /*} else { - value.countVars(c); - }*/ + int n = c.containsKey(this) ? c.get(this) : 0; + c.put(this, n+1); + super.countVars(c); } - - /* - @Override - public Literal makeVarsAnnon(Unifier un) { - if (value == null) - return super.makeVarsAnnon(un); - else if (getValue() instanceof Literal) - return ((Literal)getValue()).makeVarsAnnon(un); - else - return null; - } - */ @Override - public String toString() { - String s = getFunctor(); - if (hasAnnot()) - s += getAnnots(); - if (negated()) - s = "~" + s; - if (getNS() != Literal.DefaultNS) - s = getNS() + "::" + s; - return s; - } - - // ---------- - // Pred methods overridden - // - // in case this VarTerm has a value, use value's methods - // ---------- - - /* - @Override - public Literal setAnnots(ListTerm l) { - if (value != null) - if (getValue().isPred()) - return ((Pred) getValue()).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 - return super.setAnnots(l); - return this; - } - - @Override - public boolean importAnnots(Literal 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) - 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) - 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); - } - - @Override - public void clearAnnots() { - if (value != null && getValue().isPred()) - ((Pred) getValue()).clearAnnots(); - else - super.clearAnnots(); - } - - @Override - public boolean delAnnots(List<Term> l) { - if (value != null && getValue().isLiteral()) - return ((Literal) getValue()).delAnnots(l); - else - return super.delAnnots(l); - } - - @Override - public boolean delAnnot(Term t) { - if (value != null && getValue().isPred()) - return ((Pred) getValue()).delAnnot(t); - else - return super.delAnnot(t); - } - - @Override - public boolean hasAnnot(Term t) { - if (value != null && getValue().isLiteral()) - return ((Literal) getValue()).hasAnnot(t); - else - return super.hasAnnot(t); - } - - @Override - public boolean hasAnnot() { - if (value != null && getValue().isLiteral()) - return ((Literal) getValue()).hasAnnot(); - else - return super.hasAnnot(); - } - - @Override - public boolean hasSubsetAnnot(Literal p) { - if (value != null && value.isLiteral()) { - return ((Literal)value).hasSubsetAnnot(p); - } else { - return super.hasSubsetAnnot(p); - } - } - - @Override - public boolean hasSubsetAnnot(Literal p, Unifier u) { - if (value != null && value.isLiteral()) { - return ((Literal)value).hasSubsetAnnot(p, u); - } else { - return super.hasSubsetAnnot(p, u); - } - } - - - @Override - public ListTerm getAnnots() { - if (value != null && getValue().isLiteral()) - return ((Literal) getValue()).getAnnots(); - else - return super.getAnnots(); - } - - @Override - public void addSource(Term 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 - public boolean delSource(Term s) { - if (value != null && getValue().isPred()) - return ((Pred) getValue()).delSource(s); - else - return super.delSource(s); - } - - @Override - public void delSources() { - if (value != null && getValue().isPred()) - ((Pred) getValue()).delSources(); - else - super.delSources(); - } - - @Override - public ListTerm getSources() { - if (value != null && getValue().isLiteral()) - return ((Literal) getValue()).getSources(); - else - return super.getSources(); - } - - @Override - public boolean hasSource() { - if (value != null && getValue().isLiteral()) - return ((Literal) getValue()).hasSource(); - else - return super.hasSource(); - } - - @Override - public boolean hasSource(Term s) { - if (value != null && getValue().isLiteral()) - return ((Literal) getValue()).hasSource(s); - else - return super.hasSource(s); - } - - // ---------- - // Literal methods overridden - // - // in case this VarTerm has a value, use value's methods - // ---------- - - @Override - public boolean negated() { - if (value == null) - return super.negated(); - else - return getValue().isLiteral() && ((Literal) getValue()).negated(); - } - */ - @Override public boolean canBeAddedInBB() { - //if (value != null && getValue().isLiteral()) - // return ((Literal) getValue()).canBeAddedInBB(); - //else - return false; + return false; } - /* - @Override - public Literal forceFullLiteralImpl() { - if (hasValue() && getValue().isLiteral()) - return ((Literal)getValue()).forceFullLiteralImpl(); - else - return super.forceFullLiteralImpl(); - } - */ // ---------- // ArithmeticExpression methods overridden // Interface NumberTerm @@ -788,15 +363,6 @@ public double solve() throws NoValueException { throw new NoValueException(); - /* - if (value != null && value.isNumeric()) - return ((NumberTerm) value).solve(); - else if (hasValue()) - logger.log(Level.SEVERE, getErrorMsg()+" Error getting numerical value of VarTerm " + super.getFunctor() + ", the variable value ("+value+") is not a number.", new Exception()); - else - logger.log(Level.SEVERE, getErrorMsg()+" Error getting numerical value of VarTerm " + super.getFunctor() + ", the variable hasn't a value.", new Exception()); - return 0; - */ } // ---------- @@ -806,429 +372,191 @@ // ---------- public void add(int index, Term o) { - //if (value != null && getValue().isList()) - // ((ListTerm) getValue()).add(index, o); } public boolean add(Term o) { - return false; //value != null && getValue().isList() && ((ListTerm) getValue()).add(o); + return false; } public boolean addAll(@SuppressWarnings("rawtypes") Collection c) { - return false; // value != null && getValue().isList() && ((ListTerm) getValue()).addAll(c); + return false; } public boolean addAll(int index, @SuppressWarnings("rawtypes") Collection c) { - return false; //value != null && getValue().isList() && ((ListTerm) getValue()).addAll(index, c); + return false; } public void clear() { - //if (value != null && getValue().isList()) - // ((ListTerm) getValue()).clear(); } public boolean contains(Object o) { - return false; //value != null && getValue().isList() && ((ListTerm) getValue()).contains(o); + return false; } public boolean containsAll(@SuppressWarnings("rawtypes") Collection c) { - return false; //value != null && getValue().isList() && ((ListTerm) getValue()).containsAll(c); + return false; } public Term get(int index) { - /*if (value != null && getValue().isList()) - return ((ListTerm) getValue()).get(index); - else*/ - return null; + return null; } public int indexOf(Object o) { - /*if (value != null && getValue().isList()) - return ((ListTerm) getValue()).indexOf(o); - else*/ - return -1; + return -1; } public int lastIndexOf(Object o) { - /*if (value != null && getValue().isList()) - return ((ListTerm) getValue()).lastIndexOf(o); - else*/ - return -1; + return -1; } public Iterator<Term> iterator() { - /*if (value != null && getValue().isList()) - return ((ListTerm) getValue()).iterator(); - else*/ - return null; + return null; } public ListIterator<Term> listIterator() { - /*if (value != null && getValue().isList()) - return ((ListTerm) getValue()).listIterator(); - else*/ - return null; + return null; } public ListIterator<Term> listIterator(int index) { - /*if (value != null && getValue().isList()) - return ((ListTerm) getValue()).listIterator(index); - else*/ - return null; + return null; } public Term remove(int index) { - /*if (value != null && getValue().isList()) - return ((ListTerm) getValue()).remove(index); - else*/ - return null; + return null; } public boolean remove(Object o) { - /*if (value != null && getValue().isList()) - return ((ListTerm) getValue()).remove(o); - else*/ - return false; + return false; } public boolean removeAll(@SuppressWarnings("rawtypes") Collection c) { - /*if (value != null && getValue().isList()) - return ((ListTerm) getValue()).removeAll(c); - else*/ - return false; + return false; } public boolean retainAll(@SuppressWarnings("rawtypes") Collection c) { - /*if (value != null && getValue().isList()) - return ((ListTerm) getValue()).retainAll(c); - else*/ - return false; + return false; } public Term set(int index, Term o) { - /*if (value != null && getValue().isList()) - return ((ListTerm) getValue()).set(index, o); - else*/ - return null; + return null; } public List<Term> subList(int arg0, int arg1) { - /*if (value != null && getValue().isList()) - return ((ListTerm) getValue()).subList(arg0, arg1); - else*/ - return null; + return null; } public Iterator<List<Term>> subSets(int k) { - /*if (value != null && getValue().isList()) - return ((ListTerm) getValue()).subSets(k); - else*/ - return null; + return null; } public Object[] toArray() { - /*if (value != null && getValue().isList()) - return ((ListTerm) getValue()).toArray(); - else*/ - return null; + return null; } @SuppressWarnings("unchecked") public Object[] toArray(Object[] arg0) { - /*if (value != null && getValue().isList()) - return ((ListTerm) getValue()).toArray(arg0); - else*/ - return null; + return null; } // from ListTerm public void setTerm(Term t) { - //if (value != null && getValue().isList()) - // ((ListTerm) getValue()).setTerm(t); } public void setNext(Term t) { - //if (value != null && getValue().isList()) - // ((ListTerm) getValue()).setNext(t); } public ListTerm append(Term t) { - /*if (value != null && getValue().isList()) - return ((ListTerm) getValue()).append(t); - else*/ - return null; + return null; } public ListTerm insert(Term t) { - /*if (value != null && getValue().isList()) - return ((ListTerm) getValue()).insert(t); - else*/ - return null; + return null; } public ListTerm concat(ListTerm lt) { - /*if (value != null && getValue().isList()) - return ((ListTerm) getValue()).concat(lt); - else*/ - return null; + return null; } public ListTerm reverse() { - /*if (value != null && getValue().isList()) - return ((ListTerm) getValue()).reverse(); - else*/ - return null; + return null; } public ListTerm union(ListTerm lt) { - /*if (value != null && getValue().isList()) - return ((ListTerm) getValue()).union(lt); - else*/ - return null; + return null; } public ListTerm intersection(ListTerm lt) { - /*if (value != null && getValue().isList()) - return ((ListTerm) getValue()).intersection(lt); - else*/ - return null; + return null; } public ListTerm difference(ListTerm lt) { - /*if (value != null && getValue().isList()) - return ((ListTerm) getValue()).difference(lt); - else*/ - return null; + return null; } public List<Term> getAsList() { - /*if (value != null && getValue().isList()) - return ((ListTerm) getValue()).getAsList(); - else*/ - return null; + return null; } public ListTerm getLast() { - /*if (value != null && getValue().isList()) - return ((ListTerm) getValue()).getLast(); - else*/ - return null; + return null; } public ListTerm getPenultimate() { - /*if (value != null && getValue().isList()) - return ((ListTerm) getValue()).getPenultimate(); - else*/ - return null; + return null; } public Term removeLast() { - /*if (value != null && getValue().isList()) - return ((ListTerm) getValue()).removeLast(); - else*/ - return null; + return null; } public ListTerm getNext() { - /*if (value != null && getValue().isList()) - return ((ListTerm) getValue()).getNext(); - else*/ - return null; + return null; } public Term getTerm() { - /*if (value != null && getValue().isList()) - return ((ListTerm) getValue()).getTerm(); - else*/ - return null; + return null; } public boolean isEmpty() { - return false; //value != null && getValue().isList() && ((ListTerm) getValue()).isEmpty(); + return false; } public boolean isEnd() { - return false; //value != null && getValue().isList() && ((ListTerm) getValue()).isEnd(); + return false; } public boolean isTail() { - return false; //value != null && getValue().isList() && ((ListTerm) getValue()).isTail(); + return false; } public void setTail(VarTerm v) { - //if (value != null && getValue().isList()) - // ((ListTerm) getValue()).setTail(v); } public VarTerm getTail() { - /*if (value != null && getValue().isList()) - return ((ListTerm) getValue()).getTail(); - else*/ - return null; + return null; } public Iterator<ListTerm> listTermIterator() { - /*if (value != null && getValue().isList()) - return ((ListTerm) getValue()).listTermIterator(); - else*/ - return null; + return null; } public int size() { - /*if (value != null && getValue().isList()) - return ((ListTerm) getValue()).size(); - else*/ - return -1; + return -1; } public ListTerm cloneLTShallow() { - /*if (value != null && getValue().isList()) - return ((ListTerm) getValue()).cloneLTShallow(); - else*/ - return null; + return null; } - // ----------------------- - // StringTerm interface implementation - // ----------------------- - - /* - public String getString() { - if (value != null && getValue().isString()) - return ((StringTerm) getValue()).getString(); - else - return null; - } - - public int length() { - if (value != null && getValue().isString()) - return ((StringTerm) getValue()).length(); - else - return -1; - } - */ - - // ----------------------- - // ObjectTerm interface implementation - // ----------------------- - - /* - public Object getObject() { - if (value != null && getValue() instanceof ObjectTerm) - return ((ObjectTerm) getValue()).getObject(); - else - return null; - } - */ - - // ----------------------- - // PlanBody interface implementation - // ----------------------- - /* - public BodyType getBodyType() { - if (value != null && getValue() instanceof PlanBody) - return ((PlanBody) getValue()).getBodyType(); - else - return BodyType.none; - } - - public Term getBodyTerm() { - if (value != null && getValue() instanceof PlanBody) - return ((PlanBody) getValue()).getBodyTerm(); - else - return null; - } - - public PlanBody getBodyNext() { - if (value != null && getValue() instanceof PlanBody) - return ((PlanBody) getValue()).getBodyNext(); - else - return null; - } - - public PlanBody getLastBody() { - if (value != null && getValue() instanceof PlanBody) - return ((PlanBody) getValue()).getLastBody(); - else - return null; - } - - public boolean isEmptyBody() { - if (value != null && getValue() instanceof PlanBody) - return ((PlanBody) getValue()).isEmptyBody(); - else - return true; - } - - public int getPlanSize() { - if (value != null && getValue() instanceof PlanBody) - return ((PlanBody) getValue()).getPlanSize(); - else - return 0; - } - - public void setBodyType(BodyType bt) { - if (value != null && getValue() instanceof PlanBody) - ((PlanBody) getValue()).setBodyType(bt); - } - - public void setBodyTerm(Term t) { - if (value != null && getValue() instanceof PlanBody) - ((PlanBody) getValue()).setBodyTerm(t); - } - - public void setBodyNext(PlanBody bl) { - if (value != null && getValue() instanceof PlanBody) - ((PlanBody) getValue()).setBodyNext(bl); - } - - public boolean isBodyTerm() { - if (value != null && getValue() instanceof PlanBody) - return ((PlanBody) getValue()).isBodyTerm(); - else - return false; - } - - public void setAsBodyTerm(boolean b) { - if (value != null && getValue() instanceof PlanBody) - ((PlanBody) getValue()).setAsBodyTerm(b); - } - - public boolean add(PlanBody bl) { - if (value != null && getValue() instanceof PlanBody) - return ((PlanBody) getValue()).add(bl); - else - return false; - } - - public boolean add(int index, PlanBody bl) { - if (value != null && getValue() instanceof PlanBody) - return ((PlanBody) getValue()).add(index, bl); - else - return false; - } - - public Term removeBody(int index) { - if (value != null && getValue() instanceof PlanBody) - return ((PlanBody) getValue()).removeBody(index); - else - return null; - } - */ - /** get as XML */ public Element getAsDOM(Document document) { - /*if (hasValue()) { - return value.getAsDOM(document); - } else {*/ - Element u = (Element) document.createElement("var-term"); - u.setAttribute("functor", getFunctor()); - if (hasAnnot()) { - Element ea = document.createElement("annotations"); - ea.appendChild(getAnnots().getAsDOM(document)); - u.appendChild(ea); - } - return u; - //} + Element u = (Element) document.createElement("var-term"); + u.setAttribute("functor", getFunctor()); + if (hasAnnot()) { + Element ea = document.createElement("annotations"); + ea.appendChild(getAnnots().getAsDOM(document)); + u.appendChild(ea); + } + return u; } } Modified: trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc =================================================================== --- trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2015-12-07 17:16:38 UTC (rev 1860) +++ trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2015-12-07 18:35:12 UTC (rev 1861) @@ -601,7 +601,9 @@ NS = new Atom(tns.image); } | - NS = var(NS) + NS = var(NS) { if (NS.hasAnnot()) + throw new ParseException(getSourceRef(NS)+" name space cannot have annotations."); + } ) "::" ] @@ -612,11 +614,7 @@ (F=pred() | V = var(NS) { VarTerm vt = (VarTerm)V; vt.setNegated(type); - //if (NS == Literal.DefaultNS) { - return vt; - //} else { - // return new VarTerm(NS, vt); - //} + return vt; } ) ) @@ -629,6 +627,8 @@ throw new ParseException(getSourceRef(F)+" Internal actions cannot have annotations."); if (type == Literal.LNeg) throw new ParseException(getSourceRef(F)+" Internal actions cannot be negated."); + if (NS != Literal.DefaultNS) + throw new ParseException(getSourceRef(F)+" Internal actions cannot have name space."); try { return new InternalActionLiteral(F, curAg); } catch (Exception e) { @@ -883,7 +883,7 @@ } -VarTerm var(Atom ns): { Token K; VarTerm v; ListTerm lt; } +VarTerm var(Atom ns): { Token K; VarTerm v; ListTerm lt = null; } { ( K = <VAR> { v = new VarTerm(ns, K.image); v.setSrcInfo(new SourceInfo(asSource, K.beginLine));} | K = <UNNAMEDVAR> { v = UnnamedVar.create(ns, K.image); } @@ -891,7 +891,8 @@ [ lt = list() { v.setAnnots(lt); } ] - { return v; } + { return v; + } } StringTerm string():{ Token k; StringTermImpl s; } Modified: trunk/src/jason/asSyntax/parser/as2j.java =================================================================== --- trunk/src/jason/asSyntax/parser/as2j.java 2015-12-07 17:16:38 UTC (rev 1860) +++ trunk/src/jason/asSyntax/parser/as2j.java 2015-12-07 18:35:12 UTC (rev 1861) @@ -902,6 +902,8 @@ case VAR: case UNNAMEDVAR: NS = var(NS); + if (NS.hasAnnot()) + {if (true) throw new ParseException(getSourceRef(NS)+" name space cannot have annotations.");} break; default: jj_la1[32] = jj_gen; @@ -932,12 +934,7 @@ V = var(NS); VarTerm vt = (VarTerm)V; vt.setNegated(type); - //if (NS == Literal.DefaultNS) { - {if (true) return vt;} - //} else { - // return new VarTerm(NS, vt); - //} - + {if (true) return vt;} break; default: jj_la1[34] = jj_gen; @@ -963,6 +960,8 @@ {if (true) throw new ParseException(getSourceRef(F)+" Internal actions cannot have annotations.");} if (type == Literal.LNeg) {if (true) throw new ParseException(getSourceRef(F)+" Internal actions cannot be negated.");} + if (NS != Literal.DefaultNS) + {if (true) throw new ParseException(getSourceRef(F)+" Internal actions cannot have name space.");} try { {if (true) return new InternalActionLiteral(F, curAg);} } catch (Exception e) { @@ -1561,7 +1560,7 @@ } final public VarTerm var(Atom ns) throws ParseException { - Token K; VarTerm v; ListTerm lt; + Token K; VarTerm v; ListTerm lt = null; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case VAR: K = jj_consume_token(VAR); @@ -1891,13 +1890,13 @@ return false; } - final private boolean jj_3R_92() { - if (jj_scan_token(VAR)) return true; + final private boolean jj_3R_78() { + if (jj_scan_token(STRING)) return true; return false; } - final private boolean jj_3R_78() { - if (jj_scan_token(STRING)) return true; + final private boolean jj_3R_92() { + if (jj_scan_token(VAR)) return true; return false; } @@ -2274,18 +2273,13 @@ return false; } - final private boolean jj_3R_37() { - if (jj_scan_token(TK_FALSE)) return true; - return false; - } - final private boolean jj_3R_104() { if (jj_scan_token(59)) return true; return false; } - final private boolean jj_3R_36() { - if (jj_scan_token(TK_TRUE)) return true; + final private boolean jj_3R_37() { + if (jj_scan_token(TK_FALSE)) return true; return false; } @@ -2306,6 +2300,11 @@ return false; } + final private boolean jj_3R_36() { + if (jj_scan_token(TK_TRUE)) return true; + return false; + } + final private boolean jj_3R_95() { if (jj_3R_97()) return true; Token xsp; @@ -2321,6 +2320,11 @@ return false; } + final private boolean jj_3R_50() { + if (jj_3R_13()) return true; + return false; + } + final private boolean jj_3R_122() { if (jj_scan_token(TK_FOR)) return true; if (jj_scan_token(42)) return true; @@ -2330,11 +2334,6 @@ return false; } - final private boolean jj_3R_50() { - if (jj_3R_13()) return true; - return false; - } - final private boolean jj_3R_49() { if (jj_scan_token(TK_NEG)) return true; return false; Modified: trunk/src/test/NSTest.java =================================================================== --- trunk/src/test/NSTest.java 2015-12-07 17:16:38 UTC (rev 1860) +++ trunk/src/test/NSTest.java 2015-12-07 18:35:12 UTC (rev 1861) @@ -42,6 +42,9 @@ t1 = ASSyntax.parseLiteral("ns::_"); assertTrue(t1.toString().startsWith("ns::_")); + + t1 = ASSyntax.parseLiteral("ns::~p"); + assertEquals("ns::~p", t1.toString()); } public void testUnifies() throws ParseException { @@ -120,9 +123,35 @@ assertTrue(u.unifies(new VarTerm("A"), ASSyntax.parseLiteral("ns::bob(45)"))); Literal t = (Literal)p1.capply(u); assertEquals("ns::bob(45)", t.toString()); + + // ns::A = other::B // fail + u = new Unifier(); + p6 = ASSyntax.parseLiteral("other::B"); + u.unifies(p1, p6); + System.out.println(u); + assertFalse(u.unifies(p1, p6)); + + } + public void testConstants() throws ParseException { + Unifier u = new Unifier(); + + // A = 10 // unifies + assertTrue(u.unifies(new VarTerm("A"), ASSyntax.parseTerm("10"))); + assertEquals("10", u.get("A").toString()); + + // ns1::A = 10 // unifies + u = new Unifier(); + assertTrue(u.unifies(ASSyntax.parseTerm("ns::A"), ASSyntax.parseTerm("10"))); + assertEquals("10", u.get("A").toString()); + + // A::B = 10 // unifies (A -> default) + u = new Unifier(); + assertTrue(u.unifies(ASSyntax.parseTerm("A::B"), ASSyntax.parseTerm("10"))); + assertEquals("10", u.get("B").toString()); + } - + public void testCompare() throws ParseException { Literal p1 = ASSyntax.parseLiteral("ns1::a"); Literal p2 = ASSyntax.parseLiteral("ns2::b"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |