|
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.
|